Exemplo n.º 1
0
        // GET
        public async Task <IActionResult> Index(int id, string suit, int filterOption, string query, string userFilter, int page = 1)
        {
            var filter = (TestExplorerFilter)filterOption;

            if (string.IsNullOrEmpty(suit))
            {
                suit = "ALL";
            }
            var run = await _runsProvider.GetRun(id);

            var testsInfo = await _runsProvider.GetAllTestsInfo();

            var testInfos     = testsInfo as TestInfo[] ?? testsInfo.ToArray();
            var testInfoTests = testInfos.Select(p => p.TestName).ToList();

            testsInfo = testInfos.ToList();

            var model = new TestsExplorerViewModel
            {
                Environment = run.Environment,
                ReportTime  = run.ReportTime,
                RunId       = run.Id
            };

            foreach (var test in run.Tests)
            {
                var testSuite = testsInfo.FirstOrDefault(p => p.TestName == test.Name + ".py");
                if (testSuite == null)
                {
                    continue;
                }
                {
                    var exists = model.TestSets.FirstOrDefault(p => p.Name == testSuite.SuiteName);
                    if (exists != null)
                    {
                        //add new tests to existing suite
                        var newTest = new ViewTest(test, testInfos);
                        exists.Tests.Add(newTest);
                    }
                    else
                    {
                        var newTestSuite = new TestSet
                        {
                            Name = testSuite.SuiteName,
                            Id   = testSuite.Id
                        };
                        var newTest = new ViewTest(test, testInfos);
                        newTestSuite.Tests.Add(newTest);
                        model.TestSets.Add(newTestSuite);
                    }
                }
            }

            foreach (var testSet in model.TestSets)
            {
                testSet.FailedTests = testSet.Tests.Count(p => p.Failed);
            }

            //display all tests
            var allTestSet = new TestSet
            {
                Name        = "ALL",
                FailedTests = run.Tests.Count(p => p.Steps.ToList().Exists(z => !z.IsPassed)),
                Id          = -1,
            };

            allTestSet.Tests = new List <ViewTest>();
            run.Tests.ToList().ForEach(p => allTestSet.Tests.Add(new ViewTest(p, testInfos)
                                                                 ));
            model.TestSets.Add(allTestSet);

            var notAssignedTests = run.Tests.Where(p => !testInfoTests.Contains(p.Name + ".py")).ToList();
            //Display not assigned
            var notAssignedTestSet = new TestSet
            {
                Name        = "NOT ASSIGNED",
                FailedTests = 0,
                Id          = 0,
                Tests       = new List <ViewTest>()
            };

            notAssignedTests.ToList().ForEach(p => allTestSet.Tests.Add(new ViewTest(p, testInfos)
                                                                        ));
            model.TestSets.Add(notAssignedTestSet);



            model.FilteredTestSets = model.TestSets.Clone();


            if (!string.IsNullOrEmpty(suit))
            {
                model.SelectedSuite    = suit;
                model.FilteredTestSets = model.FilteredTestSets.Where(p => p.Name == suit).ToList();
            }

            switch (filter)
            {
            case TestExplorerFilter.Total:
                break;

            case TestExplorerFilter.Passed:
                foreach (var testSets in model.FilteredTestSets)
                {
                    testSets.Tests = testSets.Tests.Where(p => p.Status == TestStatus.Passed).ToList();
                }

                break;

            case TestExplorerFilter.Failed:
                foreach (var testSets in model.FilteredTestSets)
                {
                    testSets.Tests = testSets.Tests.Where(p => p.Status == TestStatus.Failed).ToList();
                }
                break;

            case TestExplorerFilter.Errors:
                foreach (var testSets in model.FilteredTestSets)
                {
                    testSets.Tests = testSets.Tests.Where(p => p.Status == TestStatus.Error).ToList();
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }


            model.TestExplorerFilter = filter;
            model.Query = query;

            if (!string.IsNullOrEmpty(query))
            {
                foreach (var testSet in model.FilteredTestSets)
                {
                    if (query.Contains("!"))
                    {
                        testSet.Tests = testSet.Tests.Where(p => p.Name.Equals(query.Replace("!", ""))).ToList();
                    }
                    else
                    {
                        testSet.Tests = testSet.Tests.Where(p => p.Name.Contains(query)).ToList();
                    }
                }
            }

            model.Users = testInfos.Select(p => p.AuthorLogin).Distinct();
            if (userFilter != null)
            {
                model.UserFilter = userFilter;
                foreach (var testSet in model.FilteredTestSets)
                {
                    testSet.Tests = testSet.Tests.Where(p => p.Author == userFilter).ToList();
                }
            }

            model.Pager = new Pager(model.FilteredTestSets.SelectMany(p => p.Tests).Count(), page);


            return(View(model));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> TestsExplorer(int id, string suit, bool failedOnly)
        {
            var run = await _runsProvider.GetRun(id);

            var testsInfo = await _runsProvider.GetAllTestsInfo();

            testsInfo = testsInfo.ToList();

            var model = new TestsExplorerViewModel
            {
                Environment = run.Environment,
                ReportTime  = run.ReportTime,
                RunId       = run.Id
            };

            foreach (var test in run.Tests)
            {
                var testSuite = testsInfo.FirstOrDefault(p => p.TestName == test.Name + ".py");
                if (testSuite == null)
                {
                    continue;
                }
                {
                    var exists = model.TestSets.FirstOrDefault(p => p.Name == testSuite.SuiteName);
                    if (exists != null)
                    {
                        //add new tests to existing suite
                        var newTest = new ViewTest
                        {
                            Name        = test.Name,
                            Description = test.Description,
                            Author      = testSuite.AuthorLogin,
                            Failed      = test.Steps.Count(p => !p.IsPassed) != 0
                        };
                        foreach (var testStep in test.Steps)
                        {
                            newTest.Steps.Add(new ViewStep
                            {
                                DateTime   = testStep.Issued,
                                Message    = testStep.Message,
                                StackTrace = testStep.Stacktrace,
                                IsPassed   = testStep.IsPassed
                            });
                        }
                        exists.Tests.Add(newTest);
                    }
                    else
                    {
                        var newTestSuite = new TestSet
                        {
                            Name = testSuite.SuiteName,
                            Id   = testSuite.Id
                        };
                        var newTest = new ViewTest
                        {
                            Name        = test.Name,
                            Description = test.Description,
                            Author      = testSuite.AuthorLogin,
                            Failed      = test.Steps.Count(p => !p.IsPassed) != 0
                        };
                        foreach (var testStep in test.Steps)
                        {
                            newTest.Steps.Add(new ViewStep
                            {
                                DateTime   = testStep.Issued,
                                Message    = testStep.Message,
                                StackTrace = testStep.Stacktrace,
                                IsPassed   = testStep.IsPassed
                            });
                        }
                        newTestSuite.Tests.Add(newTest);
                        model.TestSets.Add(newTestSuite);
                    }
                }
            }

            foreach (var testSet in model.TestSets)
            {
                testSet.FailedTests = testSet.Tests.Count(p => p.Failed);
            }

            //display all tests
            var allTestSet = new TestSet
            {
                Name        = "All",
                FailedTests = run.Tests.Count(p => p.Steps.ToList().Exists(z => !z.IsPassed)),
                Id          = 0
            };

            allTestSet.Tests = new List <ViewTest>();
            run.Tests.ToList().ForEach(p => allTestSet.Tests.Add(new ViewTest
            {
                Name        = p.Name,
                Description = p.Description,
                Failed      = p.Steps.ToList().Exists(z => !z.IsPassed),
                Steps       = p.Steps.Select(q => new ViewStep(q)).ToList(),
                Author      = testsInfo.FirstOrDefault(z => z.TestName == (p.Name + ".py"))?.AuthorLogin
            }));
            model.TestSets.Add(allTestSet);


            model.FilteredTestSets = model.TestSets.Clone();

            if (!string.IsNullOrEmpty(suit))
            {
                model.SelectedSuite    = suit;
                model.FilteredTestSets = model.FilteredTestSets.Where(p => p.Name == suit).ToList();
            }

            if (!failedOnly)
            {
                return(View(model));
            }
            {
                foreach (var testSets in model.FilteredTestSets)
                {
                    testSets.Tests = testSets.Tests.Where(p => p.Failed).ToList();
                }
            }

            return(View(model));
        }