Exemplo n.º 1
0
        public async Task RefreshTestSuits(long id, SystemUser user)
        {
            var gitClient  = new GithubApiClient();
            var firstSuits = await GetSuite(id);

            var newGitHubIssues = gitClient.GetIssuesForProject(firstSuits.GitHubProjectId);
            var trClient        = new TestRailApiClient();

            var testSuit = await GetSuite(id);

            foreach (var issue in newGitHubIssues.GitHubIssues)
            {
                var seekingElement = testSuit.TestCases.FirstOrDefault(p => p.GitHubId == issue.number);
                if (seekingElement != null)
                {
                    continue;
                }
                //add new issue
                var newTest = ExtractTestCase(user, issue, trClient, testSuit);
                testSuit.TestCases.Add(newTest);
            }

            _dbContext.TestSuites.Update(testSuit);
            await _dbContext.SaveChangesAsync();
        }
        public void TestPrioritiesMaps()
        {
            var(webClient, webClientFactory) = MockWebClientFactory(
                new Dictionary <string, object>
            {
                { requestUrl, data_priorities_1 }
            });

            var client = new TestRailApiClient(
                data_config,
                webClientFactory.Object);

            var priorities = client.Priorities;

            Assert.That(priorities, Has.Count.EqualTo(4));
            Assert.That(priorities, Does.ContainKey("P1 - Don't Test"));
            Assert.That(priorities, Does.ContainKey("P3 - Test If Time"));
            Assert.That(priorities, Does.ContainKey("P1"));
            Assert.That(priorities, Does.ContainKey("P2"));

            var prioritiesById = client.PrioritiesById;

            Assert.That(prioritiesById, Has.Count.EqualTo(3));
            Assert.That(prioritiesById, Does.ContainKey(1));
            Assert.That(prioritiesById, Does.ContainKey(2));
            Assert.That(prioritiesById, Does.ContainKey(3));
        }
Exemplo n.º 3
0
        public void TestStatusesMaps()
        {
            var(webClient, webClientFactory) = MockWebClientFactory(
                new Dictionary <string, object>
            {
                { requestUrl, data_statuses_1 }
            });

            var client = new TestRailApiClient(
                data_config,
                webClientFactory.Object);

            var statuses = client.Statuses;

            Assert.That(statuses, Has.Count.EqualTo(4));
            Assert.That(statuses, Does.ContainKey("status-1"));
            Assert.That(statuses, Does.ContainKey("status-2"));
            Assert.That(statuses, Does.ContainKey("STATUS"));
            Assert.That(statuses, Does.ContainKey("STATUS 3"));

            var statusesById = client.StatusesById;

            Assert.That(statusesById, Has.Count.EqualTo(3));
            Assert.That(statusesById, Does.ContainKey(1));
            Assert.That(statusesById, Does.ContainKey(2));
            Assert.That(statusesById, Does.ContainKey(3));
        }
        public async Task TestPrioritiesCaching()
        {
            var(webClient, webClientFactory) = MockWebClientFactory(
                new Dictionary <string, object>
            {
                { requestUrl, data_priorities_1 }
            });

            var client = new TestRailApiClient(
                data_config,
                webClientFactory.Object);

            var priorities1 = client.Priorities;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(1));

            var priorities2 = client.Priorities;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(1));

            var prioritiesById1 = client.PrioritiesById;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(1));

            var prioritiesById2 = client.PrioritiesById;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(1));

            var priorities = await client.GetPrioritiesAsync();

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(2));

            var priorities3 = client.Priorities;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(2));

            var prioritiesById3 = client.PrioritiesById;

            webClient.Verify(
                c => c.OpenReadTaskAsync(It.Is <string>(address => address == requestUrl)),
                Times.Exactly(2));
        }
Exemplo n.º 5
0
        public async Task <long> AddNewIssue(int issueId, long testSuiteId, SystemUser user)
        {
            var existingIssue = await _dbContext.TestCases
                                .Include(p => p.TestSuite)
                                .FirstOrDefaultAsync(p => p.GitHubId == issueId);

            if (existingIssue != null)
            {
                throw new Exception($@"The issue {issueId} was already added to {existingIssue.TestSuite?.Name} test suite.");
            }
            var testSuite = await GetSuite(testSuiteId);

            var client      = new GithubApiClient();
            var issue       = client.GetIssue(issueId);
            var newTestCase = new TestCase
            {
                GitHubId = issue.number,
                IsIssue  = !issue.body.Contains("testrail"),
                Name     = issue.title,
                Status   = Status.ReadyForAutomation,
                Message  = issue.body
            };

            newTestCase.HistoryItems.Add(new TestCaseHistory
            {
                Message = "added issue from the GitHub",
                Author  = user,
            });
            if (!newTestCase.IsIssue && int.TryParse(issue.body.Split('/').Last(), out var trId))
            {
                var trClient      = new TestRailApiClient();
                var testRailIssue = trClient.GetTest(trId);
                newTestCase.TestSteps = new List <TestStep>();
                var steps = new List <TestStep>();
                foreach (var customStepsSeparated in testRailIssue.custom_steps_separated)
                {
                    steps.Add(new TestStep
                    {
                        Actual    = customStepsSeparated.content,
                        Expected  = customStepsSeparated.expected,
                        SortIndex = testRailIssue.custom_steps_separated.IndexOf(customStepsSeparated)
                    });
                }

                newTestCase.TestSteps = steps;
            }
            testSuite.TestCases.Add(newTestCase);
            _dbContext.TestSuites.Update(testSuite);
            await _dbContext.SaveChangesAsync();

            return(newTestCase.Id);
        }
        public async Task TestInvalidConfig(TestRailApiClientConfiguration config)
        {
            Assert.CatchAsync <TestRailClientException>(async() =>
            {
                var(webClient, webClientFactory) = MockWebClientFactory(
                    new Dictionary <string, object>
                {
                    { "https://test:1234/index.php?/api/v2/get_statuses", data_statuses_1 }
                });

                var client = new TestRailApiClient(
                    config,
                    webClientFactory.Object);
            });
        }
        public async Task TestValidUrlInConfig(string apiUrl)
        {
            var(webClient, webClientFactory) = MockWebClientFactory(
                new Dictionary <string, object>
            {
                { "https://test:1234/index.php?/api/v2/get_statuses", data_statuses_1 }
            });

            var client = new TestRailApiClient(
                new TestRailApiClientConfiguration
            {
                Url      = apiUrl,
                UserName = "******",
                AppKey   = "qwerasdfzxcv",
            },
                webClientFactory.Object);

            var statuses = await client.GetStatusesAsync();

            Assert.That(statuses, Has.Length.GreaterThan(0));
        }
Exemplo n.º 8
0
        public async Task RefreshTestSteps(int id)
        {
            var test = await GetTest(id);

            var client       = new TestRailApiClient();
            var testRailTest = client.GetTest(test.TestRailId);

            test.Preconditions = testRailTest.custom_preconds;
            var newSteps = new List <TestStep>();

            testRailTest.custom_steps_separated.ForEach(p => newSteps.Add(new TestStep
            {
                Actual    = p.content,
                Expected  = p.expected,
                SortIndex = testRailTest.custom_steps_separated.IndexOf(p)
            }));
            foreach (var testTestStep in test.TestSteps.ToList())
            {
                test.TestSteps.Remove(testTestStep);
            }

            test.TestSteps = newSteps;
            await UpdateTest(test);
        }
Exemplo n.º 9
0
        public async Task AddNewTestSuite(int id, SystemUser systemUser)
        {
            var existingSuite = await _dbContext.TestSuites.CountAsync(p => p.GitHubProjectId == id) > 0;

            if (existingSuite)
            {
                throw new Exception("Test suite with this project id was already added.");
            }
            var gitClient      = new GithubApiClient();
            var testRailClient = new TestRailApiClient();
            var issues         = gitClient.GetIssuesForProject(id);
            var newTestSuite   = new TestSuite
            {
                Name            = issues.Name,
                GitHubProjectId = id,
                TestCases       = new List <TestCase>(),
                AddedOn         = issues.AddedOn,
                Description     = issues.Body
            };

            foreach (var issue in issues.GitHubIssues)
            {
                var newTest = ExtractTestCase(systemUser, issue, testRailClient, newTestSuite);

                newTestSuite.TestCases.Add(newTest);
            }
            var afterExistingSuite = await _dbContext.TestSuites.CountAsync(p => p.GitHubProjectId == id) > 0;

            if (afterExistingSuite)
            {
                throw new Exception("Test suite with this project id was already added.");
            }

            _dbContext.TestSuites.Add(newTestSuite);
            await _dbContext.SaveChangesAsync();
        }
Exemplo n.º 10
0
        private static TestCase ExtractTestCase(SystemUser systemUser, GitHubIssue issue, TestRailApiClient testRailClient,
                                                TestSuite newTestSuite)
        {
            var          testId       = issue.body.Split('/').Last();
            TestRailTest testRailTest = null;
            TestCase     newTest;

            if (int.TryParse(testId, out var tId))
            {
                testRailTest            = testRailClient.GetTest(tId);
                newTestSuite.TestRailId = testRailTest.suite_id;
                newTest = new TestCase
                {
                    Name          = testRailTest.title,
                    GitHubId      = issue.number,
                    Status        = Status.New,
                    TestRailId    = testRailTest.id,
                    TestSteps     = new List <TestStep>(),
                    Preconditions = testRailTest.custom_preconds
                };
            }
            else
            {
                newTest = new TestCase
                {
                    Name     = issue.title,
                    GitHubId = issue.number,
                    Status   = Status.ReadyForAutomation,
                    Message  = issue.body,
                    IsIssue  = true
                };
            }


            if (issue.Column == "Done")
            {
                newTest.Status     = Status.Finished;
                newTest.FinishedOn = issue.closed_at ?? DateTime.MinValue;
                newTest.StartedOn  = issue.created_at ?? DateTime.MinValue;
                newTest.Assignee   = systemUser;

                newTest.HistoryItems.Add(new TestCaseHistory
                {
                    Message = "status updated automatically on import"
                });
            }

            var steps = new List <TestStep>();

            if (testRailTest != null)
            {
                foreach (var customStepsSeparated in testRailTest.custom_steps_separated)
                {
                    steps.Add(new TestStep
                    {
                        Actual    = customStepsSeparated.content,
                        Expected  = customStepsSeparated.expected,
                        SortIndex = testRailTest.custom_steps_separated.IndexOf(customStepsSeparated)
                    });
                }
            }

            newTest.TestSteps = steps;
            newTest.HistoryItems.Add(new TestCaseHistory
            {
                Author  = systemUser,
                Message = "added test from Git Hub"
            });
            return(newTest);
        }