public async Task MoveConversationAsync_Succeeds()
        {
            // Arrange
            await InitializeDatabaseAsync();
            var provider = new SqlServerServiceBroker(connection);
            var handle = await BeginDialogAsync();
            var sql = @"SELECT [conversation_group_id] FROM sys.conversation_endpoints WHERE conversation_handle = @handle";
            var newGroupId = await connection.ExecuteScalarAsync<Guid>(sql, new { handle });
            handle = await BeginDialogAsync();

            // Act
            await provider.MoveConversationAsync(new MoveConversationArguments(handle, newGroupId));
            var actualGroupId = await connection.ExecuteScalarAsync<Guid>(sql, new { handle });

            // Assert
            Assert.Equal(newGroupId, actualGroupId);
        }
        public async Task MoveConversationAsync_UsesTransaction()
        {
            // Arrange
            await InitializeDatabaseAsync();
            var provider = new SqlServerServiceBroker(connection);
            var handle1 = await BeginDialogAsync();
            var handle2 = await BeginDialogAsync();
            var sql = @"SELECT [conversation_group_id] FROM sys.conversation_endpoints WHERE conversation_handle = @handle";
            var group1 = await connection.ExecuteScalarAsync<Guid>(sql, new { handle = handle1 });
            var group2 = await connection.ExecuteScalarAsync<Guid>(sql, new { handle = handle2 });

            // Act
            using (var transaction = await provider.BeginTransactionAsync())
            {
                await provider.MoveConversationAsync(new MoveConversationArguments(handle1, group2));
                transaction.Rollback();
            }

            var afterRollback = await connection.ExecuteScalarAsync<Guid>(sql, new { handle = handle1 });

            // Assert
            Assert.Equal(group1, afterRollback);
        }
        public async Task MoveConversationAsync_ArgumentsCannotBeNull()
        {
            // Arrange
            var provider = new SqlServerServiceBroker(connection);

            // Act
            Func<Task> call = async () => await provider.MoveConversationAsync(null);

            // Assert
            await Assert.ThrowsAsync<ArgumentNullException>("arguments", call);
        }