public void IndexPostReturnsCorrectImportError_WhenNoFileIsUploaded() { var sut = new ImportController(null, null, null); var result = (IndexViewModel)((ViewResult)sut.Index(new IndexViewModel())).Model; Assert.True(result.ImportErrors.Contains("please select a file to upload.")); }
public void IndexGetReturnsCorrectView() { var sut = new ImportController(null, null); var result = sut.Index() as ViewResult; Assert.Null(result.ViewName); }
public void IndexPostRedirectsToCorrectAction_WhenFileIsNull() { var sut = new ImportController(null, Mock.Of<ILogger<ImportController>>()); sut.SetFakeUser("1"); var result = sut.Index(null) as RedirectToActionResult; Assert.Equal(result.ActionName, nameof(ImportController.Index)); }
public void IndexPostReturnsTheCorrectViewModelAndView() { var sut = new ImportController(null, null, null); var result = sut.Index(new IndexViewModel()) as ViewResult; Assert.IsType<IndexViewModel>(result.Model); Assert.Null(result.ViewName); }
public void IndexPostDoesNotSendImportRequestsCommand_WhenFileIsNull() { var mediator = new Mock<IMediator>(); var sut = new ImportController(mediator.Object, Mock.Of<ILogger<ImportController>>()); sut.SetFakeUser("1"); sut.Index(null); mediator.Verify(x => x.Send(It.IsAny<ImportRequestsCommand>()), Times.Never); }
public void IndexPostReturnsCorrectImportError_WhenUploadedFileIsEmpty() { var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(new List<ImportRequestViewModel>()); var sut = new ImportController(null, null, csvFactory.Object); var result = (IndexViewModel)((ViewResult)sut.Index(new IndexViewModel { File = iFormFile.Object })).Model; Assert.True(result.ImportErrors.Contains("you uploaded an empty file.")); }
public void IndexPostInvokesLogInformation_WhenFileIsNull() { const string userName = "******"; var logger = new Mock<ILogger<ImportController>>(); var sut = new ImportController(null, logger.Object); sut.SetFakeUserName(userName); sut.Index(null); var message = $"User {userName} attempted a file upload without specifying a file."; logger.Verify( x => x.Log(LogLevel.Information, It.IsAny<EventId>(), It.Is<Microsoft.Extensions.Logging.Internal.FormattedLogValues>( y => (string) y[0].Value == message), It.IsAny<Exception>(), It.IsAny<Func<object, Exception, string>>()), Times.Once); }
public void IndexPostReturnsCorrectImportError_WhenThereAreDuplicateProviderRequestIdsFound() { const string duplicateId = "id"; var duplicateIds = new List<string> { duplicateId }; var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = duplicateId } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(duplicateIds); var sut = new ImportController(mediator.Object, null, csvFactory.Object); var result = (IndexViewModel)((ViewResult)sut.Index(new IndexViewModel { File = iFormFile.Object })).Model; Assert.True(result.ImportErrors.Contains($"These id's already exist in the system. Please remove them from the CSV and try again: {string.Join(", ", duplicateIds)}")); }
public void IndexPostSendsDuplicateProviderRequestIdsQueryWithCorrectProviderRequestIds() { const string id = "id"; var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = id } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(new List<string>()); var sut = new ImportController(mediator.Object, null, csvFactory.Object); sut.Index(new IndexViewModel { File = iFormFile.Object }); mediator.Verify(x => x.Send(It.Is<DuplicateProviderRequestIdsQuery>(y => y.ProviderRequestIds[0] == id)), Times.Once); }
public void IndexPostHasValidateAntiForgeryTokenAttribute() { var sut = new ImportController(null, null, null); var attribute = sut.GetAttributesOn(x => x.Index(It.IsAny<IndexViewModel>())).OfType<ValidateAntiForgeryTokenAttribute>().SingleOrDefault(); Assert.NotNull(attribute); }
public void IndexPostAssignsImportSuccessToTrue_WhenImportSucceeds() { var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = "Id", Name = "Name", Address = "Address", City = "City", Email = "*****@*****.**", Phone = "111-111-1111", State = "State", Zip = "Zip" } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); iFormFile.Setup(x => x.Name).Returns(It.IsAny<string>()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(new List<string>()); var sut = new ImportController(mediator.Object, Mock.Of<ILogger<ImportController>>(), csvFactory.Object); sut.SetFakeUserName("UserName"); var result = (IndexViewModel)((ViewResult)sut.Index(new IndexViewModel { File = iFormFile.Object })).Model; Assert.True(result.ImportSuccess); }
public void IndexPostLogsCorrectMessage_WhenImportSucceeds() { const string userName = "******"; const string fileName = "FileName"; var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = "Id", Name = "Name", Address = "Address", City = "City", Email = "*****@*****.**", Phone = "111-111-1111", State = "State", Zip = "Zip" } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); var logger = new Mock<ILogger<ImportController>>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); iFormFile.Setup(x => x.Name).Returns(fileName); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(new List<string>()); var sut = new ImportController(mediator.Object, logger.Object, csvFactory.Object); sut.SetFakeUserName(userName); sut.Index(new IndexViewModel { File = iFormFile.Object }); logger.Verify(m => m.Log(LogLevel.Information, It.IsAny<EventId>(), It.Is<FormattedLogValues>(v => v.ToString() == $"{userName} imported file {fileName}"), null, It.IsAny<Func<object, Exception, string>>()), Times.Once); }
public void IndexPostSendsImportRequestsCommandWithTheCorrectViewModel() { var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = "Id", Name = "Name", Address = "Address", City = "City", Email = "*****@*****.**", Phone = "111-111-1111", State = "State", Zip = "Zip" } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); iFormFile.Setup(x => x.Name).Returns(It.IsAny<string>()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(new List<string>()); var sut = new ImportController(mediator.Object, Mock.Of<ILogger<ImportController>>(), csvFactory.Object); sut.SetFakeUserName("UserName"); sut.Index(new IndexViewModel { File = iFormFile.Object }); mediator.Verify(x => x.Send(It.Is<ImportRequestsCommand>(y => y.ImportRequestViewModels[0].Id == importRequestViewModels[0].Id && y.ImportRequestViewModels[0].Name == importRequestViewModels[0].Name && y.ImportRequestViewModels[0].Address == importRequestViewModels[0].Address && y.ImportRequestViewModels[0].City == importRequestViewModels[0].City && y.ImportRequestViewModels[0].Email == importRequestViewModels[0].Email && y.ImportRequestViewModels[0].Phone == importRequestViewModels[0].Phone && y.ImportRequestViewModels[0].State == importRequestViewModels[0].State && y.ImportRequestViewModels[0].Zip == importRequestViewModels[0].Zip && y.ImportRequestViewModels[0].Longitude == 0 && y.ImportRequestViewModels[0].Latitude == 0 && y.ImportRequestViewModels[0].ProviderData == null)), Times.Once); }
public void IndexPostReturnsCorrectImportError_WhenThereAreValidationErrors() { var importRequestViewModels = new List<ImportRequestViewModel> { new ImportRequestViewModel { Id = "Id", Name = null, Address = string.Empty, Email = "InvalidEmail" } }; var iFormFile = new Mock<IFormFile>(); var csvFactory = new Mock<ICsvFactory>(); var csvReader = new Mock<ICsvReader>(); var mediator = new Mock<IMediator>(); iFormFile.Setup(x => x.OpenReadStream()).Returns(new MemoryStream()); csvFactory.Setup(x => x.CreateReader(It.IsAny<TextReader>())).Returns(csvReader.Object); csvReader.Setup(x => x.Configuration).Returns(new CsvConfiguration()); csvReader.Setup(x => x.GetRecords<ImportRequestViewModel>()).Returns(importRequestViewModels); mediator.Setup(x => x.Send(It.IsAny<DuplicateProviderRequestIdsQuery>())).Returns(new List<string>()); var sut = new ImportController(mediator.Object, null, csvFactory.Object); var viewResult = sut.Index(new IndexViewModel { File = iFormFile.Object }) as ViewResult; var result = viewResult.Model as IndexViewModel; Assert.Equal(result.ValidationErrors[0].ProviderRequestId, importRequestViewModels[0].Id); Assert.Equal(result.ValidationErrors[0].Errors[0].ErrorMessage, "The Name field is required."); Assert.Equal(result.ValidationErrors[0].Errors[1].ErrorMessage, "The Address field is required."); Assert.Equal(result.ValidationErrors[0].Errors[2].ErrorMessage, "The City field is required."); Assert.Equal(result.ValidationErrors[0].Errors[3].ErrorMessage, "The State field is required."); Assert.Equal(result.ValidationErrors[0].Errors[4].ErrorMessage, "The Zip field is required."); Assert.Equal(result.ValidationErrors[0].Errors[5].ErrorMessage, "The Phone field is required."); Assert.Equal(result.ValidationErrors[0].Errors[6].ErrorMessage, "Invalid Email Address"); }