示例#1
0
        public void GetResultById_should_return_expected_result()
        {
            // given
            TestsClient client   = Helpers.CreateTestsClient();
            TestFile    testFile = Helpers.CreateTestFileAndTest(client);

            var repository = ServiceStarter.Container.GetInstance <ITestFileResultRepository>();
            var result1    = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };
            var result2 = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };

            repository.Add(result1).Wait();
            repository.Add(result2).Wait();

            // when
            TestFileResult actualResult = client.GetResultById(result2.Id);

            // then
            Assert.That(actualResult, Is.Not.Null);
            Assert.That(actualResult.Id, Is.EqualTo(result2.Id));
        }
        public async Task Run_should_verify_positive_and_negative_items_when_httpcode_passes()
        {
            // given
            TestFileRunner runner = CreateRunner();

            _httpClientMock.Response.StatusCode = HttpStatusCode.OK;
            _httpClientMock.Response.Content    = "some content";

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "foo1",
                    ExpectedHttpStatusCode = HttpStatusCode.OK,
                    Assertions             = new List <Assertion>()
                    {
                        new Assertion("positive-1", "some content", AssertionType.Positive, AssertionMethod.Regex),
                        new Assertion("negative-1", "no text like this", AssertionType.Negative, AssertionMethod.Regex)
                    }
                },
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, "development", "bob");

            // then
            var result = session.TestResults.Single();

            Assert.That(result.ResultState, Is.EqualTo(TestResultState.Success));
            Assert.That(result.AssertionResults.Where(x => x.AssertionType == AssertionType.Positive).Count, Is.EqualTo(1));
            Assert.That(result.AssertionResults[0].Success, Is.True);

            Assert.That(result.AssertionResults.Where(x => x.AssertionType == AssertionType.Negative).Count, Is.EqualTo(1));
            Assert.That(result.AssertionResults[0].Success, Is.True);
        }
        public async Task Run_should_ignore_null_scriptevaluator_output()
        {
            // given
            const string environment = "knights-of-the-white-table";
            const string httpContent = "im lowercase";

            TestFileRunner runner = CreateRunner();

            _httpClientMock.Response.Content    = httpContent;
            _httpClientMock.Response.StatusCode = HttpStatusCode.OK;

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "test1",
                    ExpectedHttpStatusCode = HttpStatusCode.OK,
                }
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, environment, "bob");

            // then
            Assert.That(testFile, Is.Not.Null);
            Assert.That(testFile.Tests.FirstOrDefault(), Is.Not.Null);
            Assert.That(session.TestResults.First().HttpResponse, Is.Not.Null);
        }
示例#4
0
        public void GetSummaries_should_return_all_results()
        {
            // given
            TestsClient client   = Helpers.CreateTestsClient();
            TestFile    testFile = Helpers.CreateTestFileAndTest(client);

            var repository = ServiceStarter.Container.GetInstance <ITestFileResultRepository>();
            var result1    = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };
            var result2 = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };

            repository.Add(result1).Wait();
            repository.Add(result2).Wait();

            // when
            TestFileResultSummaryCollection results = client.GetSummaries(It.IsAny <DateTime>()).Result;

            // then
            Assert.That(results.TotalFileResults, Is.EqualTo(2));
        }
        public async Task Run_should_populate_StartTime_and_EndTime_and_TotalRunTime()
        {
            // given
            var beforeStart = DateTime.UtcNow;

            var response = new HttpResponse();

            response.ResponseTime = TimeSpan.FromSeconds(5);

            HttpClientMock httpClient = new HttpClientMock(response);
            var            runner     = new TestFileRunner(httpClient, GetRepositoryFactory(), new JsonConfiguration(), _capturedVariableProviderFactory.Object, GetTestFileRunnerLoggerFactory());

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "foo1"
                },
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, "development", "bob");

            // then
            Assert.That(session.StartTime, Is.GreaterThanOrEqualTo(beforeStart));
            Assert.That(session.EndTime, Is.GreaterThanOrEqualTo(session.StartTime));
            Assert.That(session.TotalRunTime, Is.EqualTo(session.EndTime - session.StartTime));
        }
示例#6
0
        public ActionResult Delete(Guid id)
        {
            TestFileResult session = _testsClient.GetResultById(id);

            _testsClient.DeleteResult(session.Id);

            return(RedirectToAction("Index"));
        }
示例#7
0
 private void AddResult(TestFileResult session, TestResult result)
 {
     session.TestResults.Add(result);
     lock (_currentResults)
     {
         _currentResults.Add(result);
     }
     NotifySubscribersOfAddedResult(result);
 }
示例#8
0
        public ActionResult ViewLog(Guid testFileResultId, int resultId)
        {
            TestFileResult testFileResult = _testsClient.GetResultById(testFileResultId);
            TestResult     result         = testFileResult.TestResults.ElementAtOrDefault(resultId);

            if (result != null)
            {
                return(Content(result.Log, "text/plain"));
            }

            return(Content("Result Id not found"));
        }
示例#9
0
        public void TotalAssertionsFailed_should_count_failed_tests()
        {
            // given
            var builder = new TestFileResultsBuilder()
                          .New().AddPositiveVerify().Add()
                          .New().AddPositiveVerify(false).Add()
                          .New().AddNegativeVerify(false).Add();

            var testFileResult = new TestFileResult();

            testFileResult.TestResults = builder.GetCollection();

            // when + then
            Assert.That(testFileResult.TotalAssertionsFailed, Is.EqualTo(2));
        }
示例#10
0
        public async Task Run_should_set_MinResponseTime_and_MaxResponseTime_from_http_response_times()
        {
            // given
            var response = new HttpResponse();

            response.ResponseTime = TimeSpan.FromSeconds(5);

            HttpClientMock httpClient = new HttpClientMock(response);

            httpClient.ResponseTimes = new List <TimeSpan>()
            {
                // Deliberately mixed up order
                TimeSpan.FromSeconds(5),
                TimeSpan.FromSeconds(88),
                TimeSpan.FromSeconds(3),
                TimeSpan.FromSeconds(10)
            };
            httpClient.Response = response;

            var runner = new TestFileRunner(httpClient, GetRepositoryFactory(), new JsonConfiguration(), _capturedVariableProviderFactory.Object, GetTestFileRunnerLoggerFactory());

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "foo1"
                },
                new Test()
                {
                    Url = "foo2"
                },
                new Test()
                {
                    Url = "foo3"
                },
                new Test()
                {
                    Url = "foo4"
                },
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, "development", "bob");

            // then
            Assert.That(session.MinResponseTime, Is.EqualTo(TimeSpan.FromSeconds(3)));
            Assert.That(session.MaxResponseTime, Is.EqualTo(TimeSpan.FromSeconds(88)));
        }
示例#11
0
        public ActionResult ViewHtml(Guid testFileResultId, int resultId)
        {
            TestFileResult testFileResult = _testsClient.GetResultById(testFileResultId);
            TestResult     result         = testFileResult.TestResults.ElementAtOrDefault(resultId);

            if (result != null)
            {
                string html    = result.HttpContent;
                string baseUrl = _urlHelper.GetBaseUrl(result.ActualUrl);
                html = _urlHelper.AddUrlBase(baseUrl, html);

                return(Content(html));
            }

            return(Content("Result Id not found"));
        }
示例#12
0
        public void TotalTestsPassed_should_count_passed_tests()
        {
            // given
            var builder = new TestFileResultsBuilder()
                          .New().WithSuccess().Add()
                          .New().WithSuccess().Add()
                          .New().WithSuccess().Add()
                          .New().WithFail().Add()
                          .New().WithFail().Add();

            var testFileResult = new TestFileResult();

            testFileResult.TestResults = builder.GetCollection();

            // when + then
            Assert.That(testFileResult.TotalTestsPassed, Is.EqualTo(3));
        }
示例#13
0
        static ProcessState CalcBeforeCheckoutState(TestFileResult result)
        {
            switch (result)
            {
            case TestFileResult.Ok:
                return(ProcessState.Default);

            case TestFileResult.Fail:
                return(ProcessState.Failed);

            case TestFileResult.Ignore:
                return(ProcessState.Ignored);

            default:
                throw new Exception("result");
            }
        }
示例#14
0
        public async Task should_parse_capturedvariables()
        {
            // Arrange
            var httpClient = new HttpClient(new RestClient());

            string   xml          = TestHelpers.ReadEmbeddedFile("capturedvariables.xml", XmlExamplesFolder);
            var      stringReader = new StringReader(xml);
            var      reader       = new TestFileReader();
            TestFile testFile     = reader.Read(stringReader);
            var      runner       = new TestFileRunner(httpClient, GetRepository(), new JsonConfiguration());

            // Act
            TestFileResult result = await runner.RunAsync(testFile);

            // Assert
            Assert.That(result, Is.Not.Null);
            Assert.That(result.TestResults.Count, Is.EqualTo(2));
        }
示例#15
0
        public async Task GetById_should_return_session()
        {
            // Arrange
            var fixture         = new Fixture();
            var expectedSession = fixture.Create <TestFileResult>();

            MongoTestFileResultRepository repository = GetTestFileResultRepository();
            await repository.Add(expectedSession);

            // Act
            TestFileResult actualSession = repository.GetById(expectedSession.Id);

            // Assert
            Assert.That(actualSession, Is.Not.Null, "couldn't find the session");
            string actual   = GetAsJson(actualSession);
            string expected = GetAsJson(expectedSession);

            Assert.That(actual, Is.EqualTo(expected));
        }
示例#16
0
        public async Task Run_should_set_capturedvariables()
        {
            // given
            const string environment = "big-daddy-doo-dah";
            const string httpContent = "THIS IS SOME CONTENT - content coming to you 24/7, 365, every and all init yeah.";

            TestFileRunner runner = CreateRunner();

            _httpClientMock.Response.Content    = httpContent;
            _httpClientMock.Response.StatusCode = HttpStatusCode.OK;

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "test1",
                    ExpectedHttpStatusCode = HttpStatusCode.OK,
                    CapturedVariables      = new List <CapturedVariable>()
                    {
                        new CapturedVariable("var1", "some content (.*?every)")
                    },
                    Assertions = new List <Assertion>()
                    {
                        new Assertion("positive-1", httpContent.Substring(0, 10), AssertionType.Positive, AssertionMethod.Regex)
                    },
                }
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, environment, "bob");

            // then
            var addedVariable = _capturedVariableProvider.Variables.FirstOrDefault(x => x.Name == "var1");

            Assert.That(addedVariable, Is.Not.Null);
            Assert.That(addedVariable.Value, Is.EqualTo("- content coming to you 24/7, 365, every"));

            var testResult = session.TestResults.Single();

            Assert.That(testResult.AssertionResults[0].Success, Is.True);
        }
示例#17
0
        public async Task Run_should_set_result_state_and_response_when_httpcode_fails()
        {
            // given
            TestFileRunner runner = CreateRunner();

            _httpClientMock.Response.StatusCode = HttpStatusCode.OK;

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    Url = "foo1",
                    ExpectedHttpStatusCode = HttpStatusCode.Ambiguous
                },
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, "development", "bob");

            // then
            Assert.That(session.TestResults.Single().ResultState, Is.EqualTo(TestResultState.Failed));
            Assert.That(session.TestResults.Single().HttpResponse, Is.EqualTo(_httpClientMock.Response));
        }
示例#18
0
        public bool ProcessCheckout(IEnumerable <SyncItem> items, bool ignoreSharedFiles, TrackBranch branch)
        {
            var list        = items.ToList();
            var sharedFiles = list.Where(item => IsSharedFile(item.VcsPath)).ToList();

            sharedFiles.ForEach(x => CheckIsSingleSharedFile(list, x));

            list.ForEach(x => {
                TestFileResult result = ProcessBeforeCheckout(x, ignoreSharedFiles, branch);
                x.State = CalcBeforeCheckoutState(result);
            });

            if (list.Any(x => x.State == ProcessState.Failed))
            {
                return(false);
            }

            list.ForEach(x => {
                TestFileResult result = ProcessCheckoutItem(x, x.Comment.ToString());
                x.State = CalcCheckoutStateAfterCheckout(result);
            });
            return(list.All(x => x.State == ProcessState.Modified || x.State == ProcessState.Ignored));
        }
示例#19
0
        public void DeleteResultAsync_should_delete_expected_result()
        {
            // given
            TestsClient client   = Helpers.CreateTestsClient();
            TestFile    testFile = Helpers.CreateTestFileAndTest(client);

            var repository = ServiceStarter.Container.GetInstance <ITestFileResultRepository>();
            var result1    = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };
            var result2 = new TestFileResult()
            {
                StartTime = DateTime.Now,
                EndTime   = DateTime.Now.AddSeconds(1),
                Filename  = testFile.Filename
            };

            repository.Add(result1).Wait();
            repository.Add(result2).Wait();

            // when
            var result = client.DeleteResult(result2.Id);

            // then
            Assert.That(result, Is.True);
            TestFileResult deletedResult = client.GetResultById(result2.Id);

            Assert.That(deletedResult, Is.Null);

            TestFileResult otherResult = client.GetResultById(result1.Id);

            Assert.That(otherResult, Is.Not.Null);
        }
示例#20
0
        public async Task Run_should_skip_test_if_it_is_set_to_ignore_environment()
        {
            // given
            TestFileRunner runner = CreateRunner();

            _httpClientMock.Response.StatusCode = HttpStatusCode.OK;

            var testFile = CreateTestFile(new[]
            {
                new Test()
                {
                    TestConditions = new TestConditions
                    {
                        RequiredEnvironments = { "not-development" }
                    }
                },
            });

            // when
            TestFileResult session = await runner.RunAsync(testFile, "development", "bob");

            // then
            Assert.That(session.TestResults.Single().ResultState, Is.EqualTo(TestResultState.Skipped));
        }
示例#21
0
        public async Task <TestFileResult> RunAsync(TestFile testFile, string environment, string username)
        {
            _isStopPending = false;
            lock (_currentResults)
            {
                _currentResults = new List <TestResult>();
            }

            var testFileResult = new TestFileResult
            {
                Id          = SessionId,
                Filename    = testFile.Filename,
                StartTime   = DateTime.UtcNow,
                Environment = environment,
                Username    = username
            };

            // Add all config variables and ones in this <test>
            ICapturedVariableProvider variables = _capturedVariableProviderFactory.Create(environment);

            variables.AddOrUpdateVariables(testFile.Variables);

            var verificationsMatcher = new AssertionsMatcher(variables, _loggerFactory.CreateLogger());

            List <Test> tests = testFile.Tests.ToList();

            TimeSpan minResponseTime = TimeSpan.MaxValue;
            TimeSpan maxResponseTime = TimeSpan.MinValue;
            int      totalTestsRun   = 0;

            TestsRun   = 0;
            TotalTests = tests.Count;
            bool shouldSave = true;

            for (int i = 0; i < tests.Count; i++)
            {
                if (_isStopPending)
                {
                    break;
                }

                try
                {
                    TestResult result = await RunTestAsync(tests.ElementAt(i), i, variables, verificationsMatcher);

                    AddResult(testFileResult, result);

                    if (result.ResponseTime < minResponseTime)
                    {
                        minResponseTime = result.ResponseTime;
                    }

                    if (result.ResponseTime > maxResponseTime)
                    {
                        maxResponseTime = result.ResponseTime;
                    }
                }
                catch (Exception ex)
                {
                    ReportError(ex);
                }
                finally
                {
                    totalTestsRun++;
                    TestsRun++;
                }

                if (_isStopPending)
                {
                    shouldSave = false;
                    break;
                }
            }

            testFileResult.EndTime         = DateTime.UtcNow;
            testFileResult.TotalRunTime    = testFileResult.EndTime - testFileResult.StartTime;
            testFileResult.TotalTestsRun   = totalTestsRun;
            testFileResult.MinResponseTime = minResponseTime;
            testFileResult.MaxResponseTime = maxResponseTime;

            if (shouldSave)
            {
                using (ITestFileResultRepository repository = RepositoryFactory.GetRepository())
                {
                    await repository.Add(testFileResult);
                }
            }

            NotifySubscribersOfCompletion(testFileResult.Id);

            return(testFileResult);
        }
 public Task Add(TestFileResult testFileResult)
 {
     SavedTestFileResult = testFileResult;
     return(Task.FromResult <object>(null));
 }
示例#23
0
        static ProcessState CalcCheckoutStateAfterCheckout(TestFileResult result)
        {
            switch (result) {
                case TestFileResult.Ok:
                    return ProcessState.Modified;
                case TestFileResult.Fail:
                    return ProcessState.Failed;
                case TestFileResult.Ignore:
                    return ProcessState.Ignored;
                default:
                    throw new Exception("result");

            }
        }
示例#24
0
 public async Task Add(TestFileResult testFileResult)
 {
     await _collection.InsertOneAsync(testFileResult);
 }
示例#25
0
        static ProcessState CalcBeforeCheckoutState(TestFileResult result)
        {
            switch (result) {
                case TestFileResult.Ok:
                    return ProcessState.Default;
                case TestFileResult.Fail:
                    return ProcessState.Failed;
                case TestFileResult.Ignore:
                    return ProcessState.Ignored;
                default:
                    throw new Exception("result");

            }
        }