public async Task PutObservationAsync_ReturnsBadRequest_OnException(int id, int birdId) { //Arrange var model = GetTestObservationEditViewModel(id, birdId); var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); //mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny<int>())) // .ReturnsAsync(GetTestBird(birdId)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); //mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny<string>())) // .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(o => o.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .Throws(new InvalidOperationException()); var mockObjectValidator = new Mock <IObjectModelValidator>(); mockObjectValidator.Setup(o => o.Validate(It.IsAny <ActionContext>(), It.IsAny <ValidationStateDictionary>(), It.IsAny <string>(), It.IsAny <Object>())); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; controller.ObjectValidator = mockObjectValidator.Object; // Act var result = await controller.PutObservationAsync(id, model); // Assert var objectResult = Assert.IsType <ObjectResult>(result); Assert.Equal(StatusCodes.Status500InternalServerError, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal("an unexpected error occurred", actual); }
public async Task DeleteObservationAsync_ReturnsOk_OnSuccess(int id) { //Arrange var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); mockUnitOfWork.Setup(w => w.CompleteAsync()) .Returns(Task.CompletedTask); var mockBirdRepo = new Mock <IBirdRepository>(); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(o => o.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .ReturnsAsync(GetTestObservation(id, requestingUser)); var mockObjectValidator = new Mock <IObjectModelValidator>(); mockObjectValidator.Setup(o => o.Validate(It.IsAny <ActionContext>(), It.IsAny <ValidationStateDictionary>(), It.IsAny <string>(), It.IsAny <Object>())); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; controller.ObjectValidator = mockObjectValidator.Object; // Act var result = await controller.DeleteObservationAsync(id); // Assert var objectResult = Assert.IsType <OkObjectResult>(result); Assert.Equal(StatusCodes.Status200OK, objectResult.StatusCode); var actual = Assert.IsType <int>(objectResult.Value); Assert.Equal(actual, id); }
public async Task PutObservationAsync_ReturnsUnauthorised_WhenRequestingUserIsNotObservationOwner(int id, int birdId) { //Arrange var requestingUser = GetUser("Any"); var model = GetTestObservationEditViewModel(id, birdId, requestingUser); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); //mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny<int>())) // .Returns(Task.FromResult<Bird>(null)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); //mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny<string>())) // .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(obs => obs.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .ReturnsAsync(GetTestObservation(0, new ApplicationUser { UserName = "******" })); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.PutObservationAsync(id, model); // Assert string expectedMessage = "Requesting user is not allowed to edit this observation"; var objectResult = Assert.IsType <UnauthorizedObjectResult>(result); Assert.Equal(StatusCodes.Status401Unauthorized, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal(expectedMessage, actual); }
public async Task PutObservationAsync_ReturnsBadRequest_WhenObservationNotFound(int id, int birdId) { //Arrange var model = GetTestObservationEditViewModel(id, birdId); var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); //mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny<int>())) // .Returns(Task.FromResult<Bird>(null)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); //mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny<string>())) // .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(obs => obs.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .Returns(Task.FromResult <Observation>(null)); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.PutObservationAsync(id, model); // Assert var objectResult = Assert.IsType <ObjectResult>(result); Assert.Equal(StatusCodes.Status500InternalServerError, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal($"observation with id '{model.ObservationId}' was not found.", actual); }
public async Task PutObservationAsync_ReturnsBadRequest_OnIdNotEqualModelId() { //Arrange int birdId = 1; int id = 1; int modelId = 2; var model = GetTestObservationEditViewModel(modelId, birdId); var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); var mockObsRepo = new Mock <IObservationRepository>(); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); //mockObsRepo.Setup(o => o.GetObservationsAsync(It.IsAny<Expression<Func<Observation, bool>>>())) // .ThrowsAsync(new InvalidOperationException()); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.PutObservationAsync(id, model); // Assert string expectedMessage = "An error occurred (id)"; var objectResult = Assert.IsType <BadRequestObjectResult>(result); Assert.Equal(StatusCodes.Status400BadRequest, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal(expectedMessage, actual); }
public async Task GetObservationAsync_ReturnsNotFound_WhenObservationIsNotFound(int id) { //Arrange var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(o => o.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .Returns(Task.FromResult <Observation>(null)); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.GetObservationAsync(id); // Assert string expectedMessage = $"Observation with id '{id}' was not found."; var objectResult = Assert.IsType <ObjectResult>(result); Assert.Equal(StatusCodes.Status500InternalServerError, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal($"Observation with id '{id}' was not found.", actual); }
public async Task GetObservationAsync_ReturnsOkWithObservation_OnSuccessfulRequest(int id) { //Arrange var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(o => o.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .ReturnsAsync(GetTestObservation(id, requestingUser)); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.GetObservationAsync(id); // Assert var objectResult = Assert.IsType <OkObjectResult>(result); var actualObs = Assert.IsType <ObservationDto>(objectResult.Value); Assert.Equal(id, actualObs.ObservationId); Assert.Equal(requestingUser.UserName, actualObs.User.UserName); }
// NNED TO ADD NOTES REPO MOCK METHOD .ADD & .REMOVE.... public async Task PutObservationAsync_ReturnsOkWithObservationViewModel_OnSuccess(int id, int birdId) { //Arrange var model = GetTestObservationEditViewModel(id, birdId); var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); mockUnitOfWork.Setup(w => w.CompleteAsync()) .Returns(Task.CompletedTask); var mockBirdRepo = new Mock <IBirdRepository>(); mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny <int>())) .ReturnsAsync(GetTestBird(birdId)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny <string>())) .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(obs => obs.GetObservationAsync(It.IsAny <int>(), It.IsAny <bool>())) .ReturnsAsync(GetTestObservation(id, requestingUser)); var mockObjectValidator = new Mock <IObjectModelValidator>(); mockObjectValidator.Setup(o => o.Validate(It.IsAny <ActionContext>(), It.IsAny <ValidationStateDictionary>(), It.IsAny <string>(), It.IsAny <Object>())); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); mockObsPositionRepo.Setup(p => p.SingleOrDefaultAsync(It.IsAny <Expression <Func <ObservationPosition, bool> > >())) .ReturnsAsync(SharedFunctions.GetObservationPosition()); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); mockObsNotesRepo.Setup(on => on.FindAsync(It.IsAny <Expression <Func <ObservationNote, bool> > >())) .ReturnsAsync(GetTestObservationNotes(5)); mockObsNotesRepo.Setup(n => n.RemoveRange(It.IsAny <IEnumerable <ObservationNote> >())) .Verifiable(); mockObsNotesRepo.Setup(n => n.AddRange(It.IsAny <IEnumerable <ObservationNote> >())) .Verifiable(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; controller.ObjectValidator = mockObjectValidator.Object; // Act var result = await controller.PutObservationAsync(id, model); // Assert var objectResult = Assert.IsType <OkObjectResult>(result); Assert.Equal(StatusCodes.Status200OK, objectResult.StatusCode); var actual = Assert.IsType <ObservationEditDto>(objectResult.Value); Assert.Equal(model.ObservationId, actual.ObservationId); Assert.Equal(model.BirdId, actual.Bird.BirdId); }
//[InlineData(2, 1)] //[InlineData(3, 1)] public async Task CreateObservationAsync_ReturnsOkWithObservationViewModel_OnSuccess(int birdId) { //Arrange //var model = GetTestObservationViewModel(id, birdId); var model = new ObservationAddDto() { //ObservationId = id, Bird = new BirdSummaryViewModel() { BirdId = birdId }, BirdId = birdId, Position = new ObservationPositionDto() { } }; var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); mockUnitOfWork.Setup(w => w.CompleteAsync()) .Returns(Task.CompletedTask); var mockBirdRepo = new Mock <IBirdRepository>(); mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny <int>())) .ReturnsAsync(GetTestBird(birdId)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny <string>())) .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); mockObsRepo.Setup(o => o.Add(It.IsAny <Observation>())) .Verifiable(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); mockObsNotesRepo.Setup(o => o.Add(It.IsAny <ObservationNote>())) .Verifiable(); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); mockObsPositionRepo.Setup(o => o.Add(It.IsAny <ObservationPosition>())) .Verifiable(); var mockObjectValidator = new Mock <IObjectModelValidator>(); mockObjectValidator.Setup(o => o.Validate(It.IsAny <ActionContext>(), It.IsAny <ValidationStateDictionary>(), It.IsAny <string>(), It.IsAny <Object>())); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; controller.ObjectValidator = mockObjectValidator.Object; // Act var result = await controller.CreateObservationAsync(model); // Assert var objectResult = Assert.IsType <CreatedAtActionResult>(result); Assert.Equal("CreateObservationAsync", objectResult.ActionName); Assert.Equal(StatusCodes.Status201Created, objectResult.StatusCode); var actual = Assert.IsType <ObservationDto>(objectResult.Value); Assert.Equal(model.BirdId, actual.BirdId); }
//[InlineData(2, 1)] //[InlineData(3, 2)] public async Task CreateObservationAsync_ReturnsNotFound_WhenBirdNotFound(int birdId) { //Arrange //var model = GetTestObservationViewModel(id, birdId); var model = new ObservationAddDto() { //ObservationId = id, Bird = new BirdSummaryViewModel() { BirdId = birdId }, BirdId = birdId, Position = new ObservationPositionDto() { } }; var requestingUser = GetUser("Any"); var mockUnitOfWork = new Mock <IUnitOfWork>(); var mockBirdRepo = new Mock <IBirdRepository>(); mockBirdRepo.Setup(b => b.GetBirdAsync(It.IsAny <int>())) .Returns(Task.FromResult <Bird>(null)); var mockUserManager = SharedFunctions.InitialiseMockUserManager(); mockUserManager.Setup(um => um.FindByNameAsync(It.IsAny <string>())) .ReturnsAsync(requestingUser); var mockObsRepo = new Mock <IObservationRepository>(); //mockObsRepo.Setup(o => o.GetObservationsAsync(It.IsAny<Expression<Func<Observation, bool>>>())) // .ThrowsAsync(new InvalidOperationException()); var mockObsPositionRepo = new Mock <IObservationPositionRepository>(); var mockObsNotesRepo = new Mock <IObservationNoteRepository>(); var controller = new ObservationController( _mapper , _systemClock , mockUnitOfWork.Object , mockBirdRepo.Object , _logger.Object , mockUserManager.Object , mockObsRepo.Object , mockObsPositionRepo.Object , mockObsNotesRepo.Object); controller.ControllerContext = new ControllerContext() { HttpContext = new DefaultHttpContext() { User = SharedFunctions.GetTestClaimsPrincipal(requestingUser.UserName) } }; // Act var result = await controller.CreateObservationAsync(model); // Assert var objectResult = Assert.IsType <ObjectResult>(result); Assert.Equal(StatusCodes.Status500InternalServerError, objectResult.StatusCode); var actual = Assert.IsType <string>(objectResult.Value); Assert.Equal($"Bird species with id '{model.BirdId}' was not found.", actual); }