public void Test_Title_PropertyChange_Propagates()
        {
            // Arrange.
            var testCase = new Mock <ITestCase>();
            var vm       = new TestCaseViewModel(testCase.Object, automationService.Object);

            // Act/Assert.
            AssertThat.PropertyChanged(vm,
                                       p => p.Title,
                                       () => testCase.Raise(tc => tc.PropertyChanged += null, new PropertyChangedEventArgs("Title")));
        }
        public void Test_Implementation_PropertyChange_Propagates_To_CanRemoveAutomation()
        {
            // Arrange.
            var testCase = new Mock <ITestCase>();
            var vm       = new TestCaseViewModel(testCase.Object, automationService.Object);

            // Act/Assert.
            AssertThat.PropertyChanged(vm,
                                       p => p.CanRemoveAutomation,
                                       () => testCase.Raise(tc => tc.PropertyChanged += null, new PropertyChangedEventArgs("Implementation")));
        }
Beispiel #3
0
        public void Test_Title()
        {
            // Arrange.
            var testCase = Mock.Of <ITestCase>(tc => tc.Title == "A test case");
            var vm       = new TestCaseViewModel(testCase, automationService.Object);

            // Act.
            var title = vm.Title;

            // Assert.
            Assert.Equal("A test case", title);
        }
Beispiel #4
0
        public void Test_Id()
        {
            // Arrange.
            var testCase = Mock.Of <ITestCase>(tc => tc.Id == 112);
            var vm       = new TestCaseViewModel(testCase, automationService.Object);

            // Act.
            var id = vm.Id;

            // Assert.
            Assert.Equal(112, id);
        }
Beispiel #5
0
        // GET: TestCase/Edit/5
        public async Task <IActionResult> Edit(string id, string TesterName, DateTime?FromPlannedDate, DateTime?ToPlannedDate, string SearchTestStatus, DateTime?FromUpdatedDate, DateTime?ToUpdatedDate)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var testCase = await _context.TestCase.FindAsync(id);

            if (testCase == null)
            {
                return(NotFound());
            }

            var testVariant = await(from variant in _context.TestVariant.Where(i => i.ID.Equals(testCase.TestVariantID, StringComparison.OrdinalIgnoreCase))
                                    join scenario in _context.TestScenario
                                    on variant.ScenarioID equals scenario.ID
                                    select new { ProjectID = scenario.ProjectID, ScenarioID = scenario.ID }).FirstOrDefaultAsync();

            if (testVariant == null)
            {
                return(NotFound());
            }

            if (!AuthorizeData(id))
            {
                return(Unauthorized());
            }

            if (!CanWrite(User.Identity.Name, testVariant.ProjectID))
            {
                return(Forbid());
            }

            var attachments = await _context.TestCaseAttachment.Where(i => i.TestCaseID.Equals(id, StringComparison.OrdinalIgnoreCase)).ToListAsync();

            var testCaseViewModel = new TestCaseViewModel()
            {
                ProjectID           = testVariant.ProjectID,
                ScenarioID          = testVariant.ScenarioID,
                TesterName          = TesterName,
                FromPlannedDate     = FromPlannedDate,
                ToPlannedDate       = ToPlannedDate,
                SearchTestStatus    = SearchTestStatus,
                FromUpdatedDate     = FromUpdatedDate,
                ToUpdatedDate       = ToUpdatedDate,
                TestCase            = testCase,
                TestCaseAttachments = attachments
            };

            return(View(testCaseViewModel));
        }
Beispiel #6
0
        public void Test_AssociatedAutomation_Without_Implementation()
        {
            // Arrange.
            var testCase = Mock.Of <ITestCase>(tc =>
                                               tc.IsAutomated == false);

            var vm = new TestCaseViewModel(testCase, automationService.Object);

            // Act.
            var implementation = vm.AssociatedAutomation;

            // Assert.
            Assert.Equal(string.Empty, implementation);
        }
Beispiel #7
0
        //to make action asynchronous - wrap the return type with async Task <>
        public async Task <IActionResult> Post([FromBody] TestCaseViewModel testcase)
        {
            if (ModelState.IsValid)
            {
                var newTestCase = Mapper.Map <TestCase>(testcase);
                _repository.AddTestCase(newTestCase);

                if (await _repository.SaveChangesAsync())
                {
                    return(Created($"/api/testcases/{testcase.Name}", Mapper.Map <TestCaseViewModel>(newTestCase)));
                }
            }
            return(BadRequest("Failed to save test case."));
        }
Beispiel #8
0
        public ActionResult GetResult(string testCase, string resultName = null)
        {
            var tc = this.GetTestCase(testCase);

            if (!tc.Executions.Any())
            {
                return(RedirectToAction(nameof(GetDefinition), new { testCase = testCase }));
            }

            var model = new TestCaseViewModel(tc);

            model.SelectResult(resultName);

            return(View("Result", model));
        }
Beispiel #9
0
        public void Test_AssociatedAutomation_With_Implementation()
        {
            // Arrange.
            var testCase = Mock.Of <ITestCase>(tc =>
                                               tc.IsAutomated &&
                                               tc.Implementation == Mock.Of <ITestImplementation>(ti =>
                                                                                                  ti.DisplayText == "test123"));

            var vm = new TestCaseViewModel(testCase, automationService.Object);

            // Act.
            var implementation = vm.AssociatedAutomation;

            // Assert.
            Assert.Equal("test123", implementation);
        }
Beispiel #10
0
        private void EditTestCaseButton_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;

            if (b == null)
            {
                return;
            }
            TestCaseViewModel tc = b.Tag as TestCaseViewModel;

            if (tc == null)
            {
                return;
            }
            EditTestCaseView.Show(tc);
        }
Beispiel #11
0
        // GET: TestCase/Create
        public async Task <IActionResult> Create(string id)
        {
            if (!string.IsNullOrEmpty(id))
            {
                var clonedTestCase = await(from tc in _context.TestCase.Where(i => i.ID.Equals(id, StringComparison.OrdinalIgnoreCase))
                                           join variant in _context.TestVariant
                                           on tc.TestVariantID equals variant.ID
                                           join scenario in _context.TestScenario
                                           on variant.ScenarioID equals scenario.ID
                                           select new TestCaseViewModel()
                {
                    ProjectID = scenario.ProjectID, ScenarioID = scenario.ID, TestCase = tc
                }).FirstOrDefaultAsync();

                if (clonedTestCase == null)
                {
                    return(NotFound());
                }

                clonedTestCase.TestCase.SetCreator(User.Identity.Name);
                return(View(clonedTestCase));
            }

            TestCaseViewModel newCase = new TestCaseViewModel()
            {
                ProjectID  = string.Empty,
                ScenarioID = string.Empty,
                TestCase   = new TestCase()
                {
                    TesterName  = "?",
                    PlannedDate = new DateTime(2000, 1, 1),
                    TestStatus  = TestStatuses.Open
                }
            };

            newCase.TestCase.SetCreator(User.Identity.Name);

            return(View(newCase));
        }
Beispiel #12
0
        public async Task <IActionResult> TestCase(int id)
        {
            var gitClient = new GithubApiClient();
            var model     = new TestCaseViewModel
            {
                TestCase = await _testLabProvider.GetTest(id),
                Users    = await _usersProvider.GetAllUsers(),
            };

            model.GitHubComments = gitClient.GetCommentsForIssue(model.TestCase.GitHubId);
            if (model.TestCase.PullRequestId == 0)
            {
                return(View(model));
            }
            try
            {
                model.PullRequestComment = gitClient.GetPullRequestComments(model.TestCase.PullRequestId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            return(View(model));
        }
Beispiel #13
0
        public async Task <IActionResult> Import([Bind("ProjectID, DataFile")] ImportTestCaseViewModel importModel)
        {
            if (ModelState.IsValid)
            {
                if (!CanWrite(User.Identity.Name, importModel.ProjectID))
                {
                    return(Forbid());
                }

                using (var stream = importModel.DataFile.OpenReadStream())
                {
                    using (var excelPackage = new ExcelPackage(stream))
                    {
                        var workSheet = excelPackage.Workbook.Worksheets["TestCase"];

                        if (workSheet == null)
                        {
                            ModelState.AddModelError("", "Sheet 'TestCase' is not found.");
                            return(View(importModel));
                        }

                        int rowCount = workSheet.Dimension.Rows + 1;
                        List <TestCaseViewModel> inputTestCaseList = new List <TestCaseViewModel>();

                        for (int i = 2; i < rowCount; i++)
                        {
                            var inputTestCase = new TestCaseViewModel()
                            {
                                Index       = i,
                                ScenarioID  = workSheet.Cells[i, 10].GetValue <string>(),
                                VariantName = workSheet.Cells[i, 1].GetValue <string>(),
                                TestCase    = new TestCase()
                                {
                                    ID             = workSheet.Cells[i, 11].GetValue <string>(),
                                    TestCaseName   = workSheet.Cells[i, 2].GetValue <string>(),
                                    TestCaseSteps  = workSheet.Cells[i, 3].GetValue <string>(),
                                    ExpectedResult = workSheet.Cells[i, 4].GetValue <string>(),
                                    ActualResult   = workSheet.Cells[i, 5].GetValue <string>(),
                                    TestStatus     = workSheet.Cells[i, 6].GetValue <string>(),
                                    Note           = workSheet.Cells[i, 7].GetValue <string>(),
                                    TesterName     = workSheet.Cells[i, 8].GetValue <string>(),
                                    PlannedDate    = workSheet.Cells[i, 9].GetValue <DateTime>().Date
                                }
                            };
                            inputTestCaseList.Add(inputTestCase);
                        }

                        int errorCount           = 0;
                        var newVariantList       = new List <TestVariant>();
                        var newTestCaseList      = new List <TestCase>();
                        var updatedTestCaseList  = new List <TestCase>();
                        var inputScenarioIDList  = inputTestCaseList.Select(i => new { i.ScenarioID }).Distinct().ToList();
                        var existingScenarioList = await(from s in _context.TestScenario.Where(i => i.ProjectID.Equals(importModel.ProjectID, StringComparison.OrdinalIgnoreCase))
                                                         join iS in inputScenarioIDList
                                                         on s.ID equals iS.ScenarioID
                                                         select s).ToListAsync();
                        var inputVariantIDList  = inputTestCaseList.Select(i => new { i.ScenarioID, i.VariantName }).Distinct().ToList();
                        var existingVariantList = await(from v in _context.TestVariant
                                                        join iS in existingScenarioList
                                                        on v.ScenarioID equals iS.ID
                                                        join iv in inputVariantIDList
                                                        on new { v.ScenarioID, v.VariantName } equals new { iv.ScenarioID, iv.VariantName }
                                                        select v).ToListAsync();
                        var inputTestCaseIDList  = inputTestCaseList.Select(i => new { i.TestCase.ID }).Distinct().ToList();
                        var existingTestCaseList = await(from c in _context.TestCase
                                                         join ic in inputTestCaseIDList
                                                         on c.ID equals ic.ID
                                                         select c).ToListAsync();

                        foreach (var inputTestCase in inputTestCaseList)
                        {
                            string errorMessage = string.Empty;

                            if (string.IsNullOrEmpty(inputTestCase.VariantName))
                            {
                                errorCount++;
                                errorMessage += "TestVariant is required. ";
                            }

                            if (string.IsNullOrEmpty(inputTestCase.TestCase.TestCaseName))
                            {
                                errorCount++;
                                errorMessage += "TestCaseName is required. ";
                            }

                            if (string.IsNullOrEmpty(inputTestCase.TestCase.TestCaseSteps))
                            {
                                errorCount++;
                                errorMessage += "TestCaseSteps is required. ";
                            }

                            if (string.IsNullOrEmpty(inputTestCase.TestCase.ExpectedResult))
                            {
                                errorCount++;
                                errorMessage += "ExpectedResult is required. ";
                            }

                            if (string.IsNullOrEmpty(inputTestCase.TestCase.TesterName))
                            {
                                errorCount++;
                                errorMessage += "TesterName is required. ";
                            }

                            var minDate = new DateTime(2000, 1, 1);
                            if (inputTestCase.TestCase.PlannedDate < minDate)
                            {
                                errorCount++;
                                errorMessage += $"PlannedDate must be a Date value >= {minDate.ToString("yyyy/MM/dd")}. ";
                            }

                            if (!TestStatuses.GetTestStatusesList().Contains(inputTestCase.TestCase.TestStatus))
                            {
                                errorCount++;
                                errorMessage += $"TestStatus must be {TestStatuses.GetTestStatusesString()}. ";
                            }

                            if (string.IsNullOrEmpty(inputTestCase.ScenarioID))
                            {
                                errorCount++;
                                errorMessage += "ScenarioID is required. ";
                            }
                            else
                            {
                                if (!existingScenarioList.Any(c => c.ID.Equals(inputTestCase.ScenarioID, StringComparison.OrdinalIgnoreCase)))
                                {
                                    errorCount++;
                                    errorMessage += "ScenarioID is invalid. ";
                                }
                            }

                            TestCase updatedTestCase = null;
                            if (!string.IsNullOrEmpty(inputTestCase.TestCase.ID))
                            {
                                updatedTestCase = existingTestCaseList.FirstOrDefault(c => c.ID.Equals(inputTestCase.TestCase.ID, StringComparison.OrdinalIgnoreCase));
                                if (updatedTestCase == null)
                                {
                                    errorCount++;
                                    errorMessage += "TestCaseID is invalid. ";
                                }
                            }

                            if (!string.IsNullOrEmpty(errorMessage))
                            {
                                workSheet.Cells[inputTestCase.Index, 12].Value = errorMessage;
                            }
                            else
                            {
                                var variant = existingVariantList.FirstOrDefault(v => v.VariantName.Equals(inputTestCase.VariantName, StringComparison.OrdinalIgnoreCase) &&
                                                                                 v.ScenarioID.Equals(inputTestCase.ScenarioID, StringComparison.OrdinalIgnoreCase));
                                if (variant == null)
                                {
                                    variant = newVariantList.FirstOrDefault(v => v.VariantName.Equals(inputTestCase.VariantName, StringComparison.OrdinalIgnoreCase) &&
                                                                            v.ScenarioID.Equals(inputTestCase.ScenarioID, StringComparison.OrdinalIgnoreCase));
                                    if (variant == null)
                                    {
                                        variant = new TestVariant()
                                        {
                                            ScenarioID  = inputTestCase.ScenarioID,
                                            VariantName = inputTestCase.VariantName
                                        };
                                        variant.SetCreator(User.Identity.Name);
                                        newVariantList.Add(variant);
                                    }
                                }

                                if (updatedTestCase != null)
                                {
                                    updatedTestCase.TestVariantID  = variant.ID;
                                    updatedTestCase.TestCaseName   = inputTestCase.TestCase.TestCaseName;
                                    updatedTestCase.TestCaseSteps  = inputTestCase.TestCase.TestCaseSteps;
                                    updatedTestCase.ExpectedResult = inputTestCase.TestCase.ExpectedResult;
                                    updatedTestCase.ActualResult   = inputTestCase.TestCase.ActualResult;
                                    updatedTestCase.TestStatus     = inputTestCase.TestCase.TestStatus;
                                    updatedTestCase.Note           = inputTestCase.TestCase.Note;
                                    updatedTestCase.TesterName     = inputTestCase.TestCase.TesterName;
                                    updatedTestCase.PlannedDate    = inputTestCase.TestCase.PlannedDate;
                                    updatedTestCase.SetUpdater(User.Identity.Name);
                                    updatedTestCaseList.Add(updatedTestCase);
                                }
                                else
                                {
                                    var newTestCase = new TestCase()
                                    {
                                        TestVariantID  = variant.ID,
                                        TestCaseName   = inputTestCase.TestCase.TestCaseName,
                                        TestCaseSteps  = inputTestCase.TestCase.TestCaseSteps,
                                        ExpectedResult = inputTestCase.TestCase.ExpectedResult,
                                        ActualResult   = inputTestCase.TestCase.ActualResult,
                                        TestStatus     = inputTestCase.TestCase.TestStatus,
                                        Note           = inputTestCase.TestCase.Note,
                                        TesterName     = inputTestCase.TestCase.TesterName,
                                        PlannedDate    = inputTestCase.TestCase.PlannedDate
                                    };
                                    newTestCase.SetCreator(User.Identity.Name);
                                    newTestCaseList.Add(newTestCase);
                                }
                            }
                        }

                        if (errorCount > 0)
                        {
                            return(File(excelPackage.GetAsByteArray(), importModel.DataFile.ContentType, importModel.DataFile.FileName));
                        }

                        await _context.AddRangeAsync(newVariantList);

                        _context.UpdateRange(updatedTestCaseList);
                        await _context.AddRangeAsync(newTestCaseList);

                        await _context.SaveChangesAsync();
                    }
                }
                return(RedirectToAction(nameof(Index), new { ProjectID = importModel.ProjectID }));
            }
            return(View(importModel));
        }
Beispiel #14
0
        public async Task <IActionResult> Edit(string id, string ProjectID, string ScenarioID, string TesterName, DateTime?FromPlannedDate, DateTime?ToPlannedDate, string SearchTestStatus, DateTime?FromUpdatedDate, DateTime?ToUpdatedDate, List <IFormFile> files,
                                               List <TestCaseAttachment> TestCaseAttachments,
                                               [Bind("TestCaseName,TestVariantID,TestCaseSteps,ExpectedResult,ActualResult,TesterName,PlannedDate,TestStatus,Note,ID,CreatedBy,CreatedDateTime,UpdatedBy,UpdatedDateTime,IsActive")] TestCase testCase)
        {
            if (id != testCase.ID)
            {
                return(NotFound());
            }

            if (!AuthorizeData(id))
            {
                return(Unauthorized());
            }

            if (!CanWrite(User.Identity.Name, ProjectID))
            {
                return(Forbid());
            }

            DateTime minDate = new DateTime(2000, 1, 1);

            if (testCase?.PlannedDate < minDate)
            {
                ModelState.AddModelError("TestCase.PlannedDate", $"PlannedDate must be >= {minDate.ToString("yyyy/MM/dd")}");
            }

            if (ModelState.IsValid)
            {
                try
                {
                    testCase.SetUpdater(User.Identity.Name);
                    _context.Update(testCase);
                    if (files.Count > 0)
                    {
                        List <TestCaseAttachment> attachments = new List <TestCaseAttachment>();
                        string subFolder  = Path.Combine("datafile/testCaseAttachment/", ProjectID, ScenarioID, id);
                        string fullFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", subFolder);
                        if (!Directory.Exists(fullFolder))
                        {
                            Directory.CreateDirectory(fullFolder);
                        }
                        foreach (var formFile in files)
                        {
                            if (formFile.Length > 0)
                            {
                                string filename = Guid.NewGuid().ToString() + Path.GetExtension(formFile.FileName);
                                string fullPath = Path.Combine(fullFolder, filename);
                                string filePath = Path.Combine(subFolder, filename);
                                using (var stream = new FileStream(fullPath, FileMode.Create))
                                {
                                    await formFile.CopyToAsync(stream);

                                    var attachment = new TestCaseAttachment()
                                    {
                                        TestCaseID       = testCase.ID,
                                        OriginalFileName = formFile.FileName,
                                        FullFileName     = filePath,
                                        ContentType      = formFile.ContentType
                                    };
                                    attachment.SetCreator(User.Identity.Name);
                                    attachments.Add(attachment);
                                }
                            }
                        }
                        _context.TestCaseAttachment.AddRange(attachments);
                    }
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TestCaseExists(testCase.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index), new
                {
                    ProjectID = ProjectID,
                    ScenarioID = ScenarioID,
                    VariantID = testCase.TestVariantID,
                    TesterName = TesterName,
                    FromPlannedDate = FromPlannedDate,
                    ToPlannedDate = ToPlannedDate,
                    SearchTestStatus = SearchTestStatus,
                    FromUpdatedDate = FromUpdatedDate,
                    ToUpdatedDate = ToUpdatedDate
                }));
            }
            var testCaseViewModel = new TestCaseViewModel()
            {
                ProjectID           = ProjectID,
                ScenarioID          = ScenarioID,
                TesterName          = TesterName,
                FromPlannedDate     = FromPlannedDate,
                ToPlannedDate       = ToPlannedDate,
                SearchTestStatus    = SearchTestStatus,
                FromUpdatedDate     = FromUpdatedDate,
                ToUpdatedDate       = ToUpdatedDate,
                TestCase            = testCase,
                TestCaseAttachments = TestCaseAttachments
            };

            return(View(testCaseViewModel));
        }