Beispiel #1
0
        public async Task ShouldLogInformationIfLegacyUrlfound()
        {
            const string url = "/a-url";
            var          redirectedToLocation = @"/redirected-to-location-from-the-rule";

            _legacyRedirects.Setup(o => o.RedirectUrl(url)).ReturnsAsync(redirectedToLocation);

            var httpContext = new DefaultHttpContext();

            httpContext.Request.Path        = "/test";
            httpContext.Response.StatusCode = 404;
            var mockHttpContext = new ControllerContext
            {
                HttpContext = httpContext
            };
            var controller = new ErrorController(_legacyRedirects.Object, _logger.Object)
            {
                ControllerContext = mockHttpContext
            };

            controller.HttpContext.Features.Set <IStatusCodeReExecuteFeature>(new StatusCodeReExecuteFeature()
            {
                OriginalPath = url
            });

            await controller.Error();

            LogTesting.Assert(_logger, LogLevel.Information,
                              $"A legacy redirect was found - redirecting to {redirectedToLocation}");
        }
Beispiel #2
0
        public async void GetSecureDocument_ShouldLogIfExceptionIsThrown()
        {
            var httpClient = new Mock <IHttpClient>();
            var applicationConfiguraiton = new Mock <IApplicationConfiguration>();
            var simpleUrlGenerator       = new Mock <IUrlGeneratorSimple>();
            var loggedInHelper           = new Mock <ILoggedInHelper>();
            var logger = new Mock <ILogger <BaseRepository> >();
            var documentsRepository = new DocumentsRepository(httpClient.Object, applicationConfiguraiton.Object, simpleUrlGenerator.Object, loggedInHelper.Object, logger.Object);
            var document            = new DocumentBuilder().Build();
            var seralisedDocument   = JsonConvert.SerializeObject(document);

            // Mock
            simpleUrlGenerator.Setup(o => o.BaseContentApiUrl <Document>()).Returns("url");
            loggedInHelper.Setup(o => o.GetLoggedInPerson()).Returns(new LoggedInPerson()
            {
                Email = "email"
            });
            httpClient.Setup(o => o.Get(It.IsAny <string>(), It.IsAny <Dictionary <string, string> >())).ThrowsAsync(new System.Exception());

            // Act
            var documentResponse = await documentsRepository.GetSecureDocument("asset id", "group-slug");

            LogTesting.Assert(logger, LogLevel.Error, $"Error getting response for url url/group-slug/asset id");
            documentResponse.Should().BeNull();
        }
Beispiel #3
0
        public async Task ShouldLogInformationIfLegacyUrlNotfound()
        {
            const string url = "/a-url";

            _legacyRedirects.Setup(o => o.RedirectUrl(url)).ReturnsAsync(string.Empty);

            var httpContext = new DefaultHttpContext();

            httpContext.Request.Path        = "/test";
            httpContext.Response.StatusCode = 404;
            var mockHttpContext = new ControllerContext
            {
                HttpContext = httpContext
            };
            var controller = new ErrorController(_legacyRedirects.Object, _logger.Object)
            {
                ControllerContext = mockHttpContext
            };

            controller.HttpContext.Features.Set <IStatusCodeReExecuteFeature>(new StatusCodeReExecuteFeature()
            {
                OriginalPath = url
            });

            await controller.Error();

            LogTesting.Assert(_logger, LogLevel.Information,
                              $"No legacy url matching current url ({url}) found");
        }
Beispiel #4
0
        public void ShouldLogRedirect()
        {
            var context = new DefaultHttpContext();

            context.Request.Host = new HostString("beta.domain.com");
            context.Request.Path = "/test";
            _middleware.Invoke(context);
            LogTesting.Assert(_logger, LogLevel.Information, "beta.domain.com redirected to www.domain.com for path: /test");
        }
        public void ShouldLogWarningIfNoBusinessIdIsSet()
        {
            var context = new DefaultHttpContext();

            context.Request.Path = "/";
            _businessIdMiddleware.Invoke(context, _businessId);

            LogTesting.Assert(_logger, LogLevel.Information, "BUSINESS-ID has not been set, setting to default");
        }
Beispiel #6
0
        public void ShouldReturnFailureForHttpRequestException()
        {
            _msHttpClient.Setup(o => o.GetAsync(It.IsAny <string>())).Throws(new HttpRequestException());

            var response = _httpClient.Get("http://www.nourl.com");

            LogTesting.Assert(_logger, LogLevel.Error, "An error occured while communicating with the remote service.");
            response.Result.StatusCode.Should().Be(HttpStatusCode.InternalServerError);
        }
Beispiel #7
0
        public void ShouldReturnInvalidContentMessageForEmptyServiceEmail()
        {
            var content    = $"{{{{CONTACT-US:}}}}";
            var parsedHtml = _contactUsTagParser.Parse(content, null);

            parsedHtml.Should().Be("<p>This contact form is temporarily unavailable. Please check back later.</p>");
            LogTesting.Assert(_mockLogger, LogLevel.Error,
                              $"The service email ID in this CONTACT-US tag is invalid and this contact form will not render.");
        }
        public async void ItShouldLogThatAnEmailWasSent()
        {
            var groupSubmission = new GroupSubmission {
                Email = "*****@*****.**"
            };
            await _groupEmailBuilder.SendEmailAddNew(groupSubmission);

            LogTesting.Assert(_logger, LogLevel.Information, "Sending group submission form email");
        }
        public async void ItShouldReturnFeaturedEventsFirst()
        {
            var eventSubmission = new EventSubmission {
                SubmitterEmail = "*****@*****.**", EventDate = new DateTime(2017, 9, 9)
            };
            await _eventEmailBuilder.SendEmailAddNew(eventSubmission);

            LogTesting.Assert(_logger, LogLevel.Information, "Sending event submission form email");
        }
        public void ShouldNotLogIfNoBusinessIdIsSetAndIsHealthCheck()
        {
            var context = new DefaultHttpContext();

            context.Request.Path = "/_healthcheck";
            _businessIdMiddleware.Invoke(context, _businessId);

            LogTesting.DoesNotContain(_logger, LogLevel.Information, "BUSINESS-ID has not been set, setting to default");
        }
        public void ShouldLogInformationIfBusniessIdIsSet()
        {
            var          context          = new DefaultHttpContext();
            const string businessIdString = "business-id";

            context.Request.Headers["BUSINESS-ID"] = businessIdString;
            _businessIdMiddleware.Invoke(context, _businessId);

            LogTesting.Assert(_logger, LogLevel.Information, "BUSINESS-ID has been set to: business-id");
        }
Beispiel #12
0
        public async Task ShouldNotReturnAFooterInViewIfViewNotFound()
        {
            _repository.Setup(o => o.Get <Footer>(It.IsAny <string>(), It.IsAny <List <Query> >())).ReturnsAsync(HttpResponse.Failure(404, "No Footer Found"));

            var result = await _footerViewComponent.InvokeAsync() as ViewViewComponentResult;

            result.ViewData.Model.Should().BeNull();

            LogTesting.Assert(_logger, LogLevel.Information, "Call to retrieve the footer");
        }
Beispiel #13
0
        public async Task ItShouldReturnA500AndLogItIfTheServiceEmailIsNullOrEmpty()
        {
            var emailClient  = new HttpEmailClient(_mockLogger.Object, _emailBuilder.Object, _amazonEmailService.Object, true);
            var emailMessage = new EmailMessage("subject", "body", "", "", "*****@*****.**", new List <IFormFile>());

            var httpStatusCode = await emailClient.SendEmailToService(emailMessage);

            httpStatusCode.Should().Be(HttpStatusCode.InternalServerError);

            LogTesting.Assert(_mockLogger, LogLevel.Error, "ToEmail can not be null or empty. No email has been sent.");
        }
Beispiel #14
0
        public async void ShouldCallContentfulIfCacheIsEmptyAsync()
        {
            // Arrange
            _distributedCacheWrapper.Setup(o => o.GetString(It.Is <string>(s => s == "test-key"), It.IsAny <CancellationToken>())).ReturnsAsync("");

            // Act
            var valueFromCall = await _cacheWrapper.GetFromCacheOrDirectlyAsync("test-key", testFallbackMethodAsync);

            // Assert
            valueFromCall.Should().Be("Contentful Data");
            LogTesting.Assert(_logger, LogLevel.Information, "Key not found in cache:test-key of type:System.String");
        }
        public void ShouldThrowExceptionIfInvalidJwtToken()
        {
            var token    = "tokenhasbeentamperedwith";
            var encoding = new JwtDecoder(new GroupAuthenticationKeys()
            {
                Key = _secretKeyValid
            }, _logger.Object);

            Exception ex = Assert.Throws <InvalidJwtException>(() => encoding.Decode(token));

            ex.Message.Should().Be("Invalid JWT token");
            LogTesting.Assert(_logger, LogLevel.Warning, $"InvalidJwtException was thrown from jwt decoder for token {token}");
        }
Beispiel #16
0
        public async void ShouldReturnNullIfNoAssetIsFoundAndLogWarning()
        {
            _contentfulClient.Setup(o =>
                                    o.GetAsset("asset-fail", It.IsAny <QueryBuilder <Asset> >(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(new ContentfulException(500, "There was a problem with getting assetid: asset-fail from contentful"));

            var assetRepository = new AssetRepository(new ContentfulConfig("", "", ""), _contentfulClientManager.Object,
                                                      _logger.Object);

            await assetRepository.Get("asset-fail");

            LogTesting.Assert(_logger, LogLevel.Warning, "There was a problem with getting assetId: asset-fail from contentful");
        }
        public void ShouldThrowJsonExceptionIfInvalidJwtButInCorrectFormatWithDots()
        {
            var token = "tokenhasbeentamperedwith.test.test";

            var encoding = new JwtDecoder(new GroupAuthenticationKeys()
            {
                Key = _secretKeyValid
            }, _logger.Object);

            Exception ex = Assert.Throws <JsonReaderException>(() => encoding.Decode(token));

            ex.Message.Should().Contain("Unexpected character encountered while parsing value");
            LogTesting.Assert(_logger, LogLevel.Warning, $"JsonReaderException was thrown for jwt decoder for token {token}");
        }
        public void ShouldFailDecryptionWithInvalidKey()
        {
            var token    = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoidGVzdGluZyBuYW1lIiwiZW1haWwiOiJ0ZXN0aW5nQGVtYWlsIn0.QmkqA7HE-nOPqxx5kSG5NqDyVeBXUiJ3_i-lwZAdVkw";
            var encoding = new JwtDecoder(new GroupAuthenticationKeys()
            {
                Key = _secretKeyInvalid
            }, _logger.Object);

            Exception ex = Assert.Throws <Jose.IntegrityException>(() => encoding.Decode(token));

            ex.Message.Should().Be("Invalid signature.");

            LogTesting.Assert(_logger, LogLevel.Warning, $"IntegrityException was thrown from jwt decoder for token {token}");
        }
Beispiel #19
0
        public async Task ItShouldReturnABadRequestIfAmazonSesReturnsAnException()
        {
            _amazonEmailService.Setup(
                o => o.SendRawEmailAsync(It.IsAny <SendRawEmailRequest>(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(new Exception("There was an error"));

            var emailClient  = new HttpEmailClient(_mockLogger.Object, _emailBuilder.Object, _amazonEmailService.Object, true);
            var emailMessage = new EmailMessage("subject", "body", "*****@*****.**", "*****@*****.**", "*****@*****.**", new List <IFormFile>());

            var httpStatusCode = await emailClient.SendEmailToService(emailMessage);

            httpStatusCode.Should().Be(HttpStatusCode.BadRequest);
            LogTesting.Assert(_mockLogger, LogLevel.Error, "An error occurred trying to send an email to Amazon SES. \nThere was an error");
        }
        public void ShouldLogInformationTheLoadedFeatureToggles()
        {
            string appEnvironment = "preprod";

            var featureTogglesReader = new FeatureTogglesReader(YamlFile, appEnvironment, Logger.Object);

            var featureToggles = featureTogglesReader.Build <FakeFeatureToggles>();

            LogTesting.Assert(Logger, LogLevel.Information,
                              $"Feature Toggles for: {appEnvironment}\n" +
                              $"SearchBar: {featureToggles.SearchBar}, " +
                              $"AToZ: {featureToggles.AToZ}, " +
                              $"OverriddenFeature: {featureToggles.OverriddenFeature}, ");
        }
Beispiel #21
0
        public async Task ShouldReturnFooterAsModelInView()
        {
            var footer = new Footer("Title", "Slug", new List <SubItem>(), new List <SocialMediaLink>());

            _repository.Setup(o => o.Get <Footer>(It.IsAny <string>(), It.IsAny <List <Query> >())).ReturnsAsync(HttpResponse.Successful(200, footer));

            var result = await _footerViewComponent.InvokeAsync() as ViewViewComponentResult;

            result.ViewData.Model.Should().BeOfType <Footer>();
            var footerModel = result.ViewData.Model as Footer;

            footerModel.Should().Be(footer);

            LogTesting.Assert(_logger, LogLevel.Information, "Call to retrieve the footer");
        }
        public void ShouldDefaultAllFeatureTogglesToFalseIfEnvironmentIsNotFound()
        {
            string appEnvironment = "notfound";

            var featureTogglesReader = new FeatureTogglesReader(YamlFile, appEnvironment, Logger.Object);

            var featureToggles = featureTogglesReader.Build <FakeFeatureToggles>();

            featureToggles.AToZ.Should().Be(false);
            featureToggles.SearchBar.Should().Be(false);
            featureToggles.OverriddenFeature.Should().Be(false);

            LogTesting.Assert(Logger, LogLevel.Warning,
                              $"No feature toggle configuration found for environment: {appEnvironment}. Setting all features to false.");
        }
        public void ShouldDefaultToFalseIfFileCannotBeParsed()
        {
            string appEnvironment = "prod";

            var featureTogglesReader = new FeatureTogglesReader(invalidYamlFile, appEnvironment, Logger.Object);

            var featureToggles = featureTogglesReader.Build <FakeFeatureToggles>();

            featureToggles.AToZ.Should().Be(false);
            featureToggles.SearchBar.Should().Be(false);
            featureToggles.OverriddenFeature.Should().Be(false);

            LogTesting.Assert(Logger, LogLevel.Warning,
                              $"Cannot parse feature toggles in {invalidYamlFile}. Setting all features to false.");
        }
        public void ShouldDefaultToFalseIfFileNotFound()
        {
            string appEnvironment = "prod";

            var nonExistentFile      = "notfound";
            var featureTogglesReader = new FeatureTogglesReader(nonExistentFile, appEnvironment, Logger.Object);

            var featureToggles = featureTogglesReader.Build <FakeFeatureToggles>();

            featureToggles.AToZ.Should().Be(false);
            featureToggles.SearchBar.Should().Be(false);
            featureToggles.OverriddenFeature.Should().Be(false);

            LogTesting.Assert(Logger, LogLevel.Warning,
                              $"No feature toggle configuration file found ({nonExistentFile}). Setting all features to false.");
        }
Beispiel #25
0
        public async Task ItShouldReturnA500IfTheEmailServiceThrowsAnException()
        {
            _amazonEmailService.Setup(o => o.SendRawEmailAsync(It.IsAny <SendRawEmailRequest>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new SendRawEmailResponse {
                HttpStatusCode = HttpStatusCode.InternalServerError, MessageId = "test", ResponseMetadata = new ResponseMetadata {
                    RequestId = "test"
                }
            });

            var emailClient  = new HttpEmailClient(_mockLogger.Object, _emailBuilder.Object, _amazonEmailService.Object, true);
            var emailMessage = new EmailMessage("subject", "body", "*****@*****.**", "*****@*****.**", "*****@*****.**", new List <IFormFile>());

            var httpStatusCode = await emailClient.SendEmailToService(emailMessage);

            httpStatusCode.Should().Be(HttpStatusCode.InternalServerError);
            LogTesting.Assert(_mockLogger, LogLevel.Warning, $"There was a problem sending an email, message id: test and request id: test and status code {HttpStatusCode.InternalServerError}");
        }
Beispiel #26
0
        public async Task ItShouldReturnA200IfTheStatusCodeIsOkAndLogTheResponse()
        {
            _amazonEmailService.Setup(o => o.SendRawEmailAsync(It.IsAny <SendRawEmailRequest>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(new SendRawEmailResponse {
                HttpStatusCode = HttpStatusCode.OK, MessageId = "test", ResponseMetadata = new ResponseMetadata {
                    RequestId = "test"
                }
            });

            var emailClient  = new HttpEmailClient(_mockLogger.Object, _emailBuilder.Object, _amazonEmailService.Object, true);
            var emailMessage = new EmailMessage("subject", "body", "*****@*****.**", "*****@*****.**", "*****@*****.**", new List <IFormFile>());

            var httpStatusCode = await emailClient.SendEmailToService(emailMessage);

            httpStatusCode.Should().Be(HttpStatusCode.OK);
            LogTesting.Assert(_mockLogger, LogLevel.Information, "An email was sent to Amazon SES with message id: test and request id test");
        }
        public async void GetSecureDocument_ShouldLogIfThrowsException()
        {
            var mockDocumentsRepository = new Mock <IDocumentsRepository>();
            var mockHttpClientWrapper   = new Mock <IHttpClientWrapper>();
            var logger   = new Mock <ILogger <DocumentsService> >();
            var document = new DocumentBuilder().Build();

            var documentsService = new DocumentsService(mockDocumentsRepository.Object, mockHttpClientWrapper.Object, logger.Object);

            // Mock
            mockDocumentsRepository.Setup(o => o.GetSecureDocument("asset id", "group-slug")).ThrowsAsync(new Exception("Error"));

            // Act
            var documentResponse = await documentsService.GetSecureDocument("asset id", "group-slug");

            // Assert
            LogTesting.Assert(logger, LogLevel.Error, "There was a problem getting document with assetId: asset id for group group-slug");
            documentResponse.Should().BeNull();
        }
Beispiel #28
0
        public async void GetResponse_LogIfExceptionIsThrown()
        {
            //Arrange
            var stockportApiRepository = new StockportApiRepository(_httpClient.Object, _applicationConfiguraiton.Object, _simpleUrlGenerator.Object, _logger.Object);
            var builtEvents            = new List <Event>();

            builtEvents.Add(new EventBuilder().Build());
            var seralisedEvents = JsonConvert.SerializeObject(builtEvents);

            // Mock
            _simpleUrlGenerator.Setup(o => o.StockportApiUrl <List <Event> >()).Returns("url");
            _httpClient.Setup(o => o.Get(It.IsAny <string>(), It.IsAny <Dictionary <string, string> >())).ThrowsAsync(new System.Exception());

            // Act
            var apiResponse = await stockportApiRepository.GetResponse <List <Event> >();

            LogTesting.Assert(_logger, LogLevel.Error, "Error getting response for url url");
            apiResponse.Should().BeNull();
        }
Beispiel #29
0
        public async void GetSecureDocument_ShouldReturnNullIfUserIsntLoggedIn()
        {
            var httpClient = new Mock <IHttpClient>();
            var applicationConfiguraiton = new Mock <IApplicationConfiguration>();
            var simpleUrlGenerator       = new Mock <IUrlGeneratorSimple>();
            var loggedInHelper           = new Mock <ILoggedInHelper>();
            var logger = new Mock <ILogger <BaseRepository> >();
            var documentsRepository = new DocumentsRepository(httpClient.Object, applicationConfiguraiton.Object, simpleUrlGenerator.Object, loggedInHelper.Object, logger.Object);
            var document            = new DocumentBuilder().Build();
            var seralisedDocument   = JsonConvert.SerializeObject(document);

            // Mock
            simpleUrlGenerator.Setup(o => o.BaseContentApiUrl <Document>()).Returns("url");
            loggedInHelper.Setup(o => o.GetLoggedInPerson()).Returns(new LoggedInPerson());

            // Act
            var documentResponse = await documentsRepository.GetSecureDocument("asset id", "group-slug");

            LogTesting.Assert(logger, LogLevel.Warning, "Document asset id was requested, but the user wasn't logged in");
            documentResponse.Should().BeNull();
        }