Exemplo n.º 1
0
        public async Task Put_logs_exception()
        {
            //Arrange
            var Aquarium = new Aquarium();
            var model    = new AquariumModel();

            mockMapper.Setup(am => am.Map(It.IsAny <AquariumModel>(), It.IsAny <Aquarium>())).Verifiable();

            var existingAquarium = new Aquarium();

            mockAquariumRepository.Setup(ur => ur.Get(1, 1)).ReturnsAsync(existingAquarium).Verifiable();
            mockAquariumRepository.Setup(ur => ur.Update(It.IsAny <Aquarium>())).Throws(new Exception()).Verifiable();
            mockLogger.Setup(l => l.Error(It.IsAny <Exception>(), It.IsAny <string>())).Verifiable();

            SetupController();

            //Act
            var result = await controller.Put(1, model);

            //Assert
            Assert.Equal(typeof(BadRequestObjectResult), result.GetType());

            var badRequestObjectResult = (BadRequestObjectResult)result;

            Assert.Equal(400, badRequestObjectResult.StatusCode);
            Assert.Equal("Could not update Aquarium", badRequestObjectResult.Value.ToString());

            mockAquariumRepository.Verify(r => r.Get(1, 1), Times.Once);
            mockAquariumRepository.Verify(r => r.Update(It.IsAny <Aquarium>()), Times.Once);

            mockMapper.Verify(m => m.Map(It.IsAny <AquariumModel>(), It.IsAny <Aquarium>()), Times.Once);
            mockLogger.Verify(l => l.Error(It.IsAny <Exception>(), It.IsAny <string>()), Times.Once);
        }
Exemplo n.º 2
0
        public async Task Put_returns_ok()
        {
            //Arrange
            var aquarium = new Aquarium
            {
                RowVersion = Encoding.ASCII.GetBytes("RowVersion")
            };
            var model = new AquariumModel();

            mockMapper.Setup(am => am.Map(It.IsAny <AquariumModel>(), It.IsAny <Aquarium>())).Verifiable();
            mockMapper.Setup(am => am.Map <AquariumModel>(It.IsAny <Aquarium>())).Returns(model);
            mockAquariumRepository.Setup(ur => ur.Get(1, 1)).ReturnsAsync(aquarium).Verifiable();

            SetupController();

            //Act
            var result = await controller.Put(1, model);

            //Assert
            Assert.Equal(typeof(OkObjectResult), result.GetType());

            var okObjectResult = (OkObjectResult)result;

            Assert.Equal(200, okObjectResult.StatusCode);

            mockAquariumRepository.Verify(r => r.Get(1, 1), Times.Once);
            mockAquariumRepository.Verify(r => r.Update(It.IsAny <Aquarium>()), Times.Once);

            mockMapper.Verify(m => m.Map(It.IsAny <AquariumModel>(), It.IsAny <Aquarium>()), Times.Once);
        }
Exemplo n.º 3
0
        public async Task Post_returns_UnprocessableEntity()
        {
            //Arrange
            SetupController();
            AquariumModel model = null;

            //Act
            var result = await controller.Post(model);

            //Assert
            Assert.Equal(typeof(StatusCodeResult), result.GetType());

            var statusCodeResult = (StatusCodeResult)result;

            Assert.Equal(422, statusCodeResult.StatusCode);
        }
Exemplo n.º 4
0
        public async Task Put_returns_not_found()
        {
            //Arrange
            var model = new AquariumModel();

            SetupController();

            //Act
            var result = await controller.Put(2, model);

            //Assert
            Assert.Equal(typeof(NotFoundResult), result.GetType());

            var notFoundResult = (NotFoundResult)result;

            Assert.Equal(404, notFoundResult.StatusCode);
        }
Exemplo n.º 5
0
        public async Task Get_returns_AquariumModel()
        {
            //Arrange
            var model = new AquariumModel
            {
                Name = "Bedroom",
                Url  = "https://aquamonitor.com/api/Aquariums/1"
            };

            var Aquarium = new Aquarium
            {
                Id         = 1,
                Name       = "Bedroom",
                RowVersion = Encoding.ASCII.GetBytes("RowVersion")
            };

            mockAquariumRepository.Setup(r => r.Get(1, 1)).ReturnsAsync(Aquarium).Verifiable();
            mockMapper.Setup(am => am.Map <AquariumModel>(Aquarium)).Returns(model).Verifiable();
            SetupController();

            //Act
            var result = await controller.Get(1);

            //Assert
            Assert.Equal(typeof(OkObjectResult), result.GetType());

            var okResult = (OkObjectResult)result;

            Assert.Equal(200, okResult.StatusCode);

            Assert.Equal(typeof(AquariumModel), okResult.Value.GetType());

            var AquariumModel = (AquariumModel)okResult.Value;

            Assert.Equal("Bedroom", AquariumModel.Name);
            Assert.Equal("https://aquamonitor.com/api/Aquariums/1", AquariumModel.Url);

            mockAquariumRepository.Verify(r => r.Get(1, 1), Times.Once);
            mockMapper.Verify(m => m.Map <AquariumModel>(It.IsAny <Aquarium>()), Times.Once);
        }
Exemplo n.º 6
0
        public async Task Post_returns_created()
        {
            //Arrange
            var Aquarium = new Aquarium
            {
                RowVersion = Encoding.ASCII.GetBytes("RowVersion")
            };
            var model = new AquariumModel
            {
                Url = "http://aqauamonitor.com/api/aquariums/2"
            };

            mockMapper.Setup(am => am.Map <Aquarium>(It.IsAny <AquariumModel>())).Returns(Aquarium);
            mockMapper.Setup(am => am.Map <AquariumModel>(It.IsAny <Aquarium>())).Returns(model);

            mockUrlHelper
            .Setup(m => m.Link(It.IsAny <string>(), It.IsAny <object>()))
            .Returns("http://aqauamonitor.com/api/aquariums/1")
            .Verifiable();

            SetupController();

            //Act
            var result = await controller.Post(null);

            //Assert
            Assert.Equal(typeof(CreatedResult), result.GetType());

            var createdResult = (CreatedResult)result;

            Assert.Equal(201, createdResult.StatusCode);
            Assert.Equal("http://aqauamonitor.com/api/aquariums/1", createdResult.Location);

            var AquariumModel = (AquariumModel)createdResult.Value;

            Assert.Equal("http://aqauamonitor.com/api/aquariums/2", AquariumModel.Url);
        }
        public async Task <IActionResult> Put(int aquariumId, [FromBody] AquariumModel model)
        {
            try
            {
                var aquarium = await _repository.Get(UserId, aquariumId);

                if (aquarium == null)
                {
                    return(NotFound());
                }

                if (Request.Headers.ContainsKey(HeaderNames.IfMatch))
                {
                    var etag = Request.Headers[HeaderNames.IfMatch].First();
                    if (etag != Convert.ToBase64String(aquarium.RowVersion))
                    {
                        return(StatusCode((int)HttpStatusCode.PreconditionFailed));
                    }
                }

                _mapper.Map(model, aquarium);

                await LookupTypeAndUnits(aquarium);

                _logger.Information($"Updating aquarium. AquariumID:{aquariumId}");
                await _repository.Update(aquarium);

                AddETag(aquarium.RowVersion);

                return(Ok(_mapper.Map <AquariumModel>(aquarium)));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "An error occured whilst trying to update Aquarium");
            }
            return(BadRequest("Could not update Aquarium"));
        }
        public async Task <IActionResult> Post([FromBody] AquariumModel model)
        {
            try
            {
                var aquarium = _mapper.Map <Aquarium>(model);

                if (aquarium == null)
                {
                    return(UnprocessableEntity());
                }

                // Use the URL User Id
                if (aquarium.User == null)
                {
                    aquarium.User = new User();
                }
                aquarium.User.Id = UserId;

                await LookupTypeAndUnits(aquarium);

                _logger.Information("Creating new aquarium...");
                await _repository.Add(aquarium);

                _logger.Information($"New aquarium created. AquariumID:{aquarium.Id}.");

                AddETag(aquarium.RowVersion);

                var url = Url.Link("AquariumGet", new { UserId, aquariumId = aquarium.Id });
                return(Created(url, _mapper.Map <AquariumModel>(aquarium)));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "An error occured whilst trying to create Aquarium.");
            }
            return(BadRequest("Could not create Aquarium"));
        }
 public AquariumModelTests()
 {
     item = new AquariumModel();
 }
 public AquariumApiController(AquariumModel kitchenModel)
 {
     this._aquariumModel = kitchenModel;
 }