Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        // 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);
        }
Exemple #9
0
        //[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);
        }
Exemple #10
0
        //[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);
        }