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}"); }
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(); }
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"); }
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"); }
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); }
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"); }
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"); }
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."); }
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}"); }
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}"); }
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}, "); }
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."); }
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}"); }
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(); }
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(); }
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(); }