/// <summary>
        /// Overload 3, adds HATEOAS links to supplied object.
        /// Ted Henriksson
        /// </summary>
        /// <param name="habitat"></param>
        /// <returns></returns>
        internal HabitatDTO HateoasMainLinks(HabitatDTO habitat)
        {
            HabitatDTO habitatDTO = habitat;

            habitatDTO.Links.Add(UrlLink("all", "GetAllHabitat", null));
            habitatDTO.Links.Add(UrlLink("_self", "GetHabitatByID", new { id = habitatDTO.HabitatID }));
            habitatDTO.Links.Add(UrlLink("self", "GetHabitatByName", new { name = habitatDTO.Name }));

            return(habitatDTO);
        }
        public async void GetHabitatById_FetchHabitatBasedOnId_SameIdAsInputExpected(int inlineHabitatID, int expected)
        {
            // Arrange
            var     profile       = new MammalAPI.Configuration.Mapper();
            var     configuration = new MapperConfiguration(cfg => cfg.AddProfile(profile));
            IMapper mapper        = new Mapper(configuration);

            //Mock context
            var testHabitats = GetTestHabitats();
            var contextMock  = new Mock <DBContext>();

            contextMock.Setup(h => h.Habitats).ReturnsDbSet(testHabitats);

            //Mock Repo
            var logger          = Mock.Of <ILogger <HabitatRepository> >();
            var habitatRepoMock = new HabitatRepository(contextMock.Object, logger);

            //Mock IActionDescriptorCollectionProvider
            var actions = new List <ActionDescriptor>
            {
                new ActionDescriptor
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "/test",
                    },
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        { "action", "Test" },
                        { "controller", "Test" },
                    },
                }
            };
            var mockDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>();

            mockDescriptorProvider.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(actions, 0));

            //Setup new controller based on mocks
            var controller = new HabitatController(habitatRepoMock, mapper, mockDescriptorProvider.Object);

            //Act
            var result = await controller.GetHabitatById(inlineHabitatID, false);

            var        contentResult = result.Result as OkObjectResult;
            HabitatDTO dto           = (HabitatDTO)contentResult.Value;

            //Assert
            Assert.Equal(expected, dto.HabitatID);
        }
        public async void PostHabitat_Should_SaveOne()
        {
            var            profile  = new MammalAPI.Configuration.Mapper();
            var            config   = new MapperConfiguration(c => c.AddProfile(profile));
            IMapper        mapper   = new Mapper(config);
            List <Habitat> habitats = new List <Habitat>();

            var habitatrepo = new Mock <IHabitatRepository>();

            habitatrepo.Setup(h => h.Add <Habitat>(It.IsAny <Habitat>()));
            habitatrepo.Setup(h => h.GetAllHabitats(It.IsAny <Boolean>())).Returns(Task.FromResult(habitats));
            habitatrepo.Setup(h => h.Save()).Returns(Task.FromResult(true));

            var actions = new List <ActionDescriptor>
            {
                new ActionDescriptor
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "/test",
                    },
                    RouteValues = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase)
                    {
                        { "action", "Test" },
                        { "controller", "Test" },
                    },
                },
            };
            var mockDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>();

            mockDescriptorProvider.Setup(m => m.ActionDescriptors).Returns(new ActionDescriptorCollection(actions, 0));

            var controller = new HabitatController(habitatrepo.Object, mapper, mockDescriptorProvider.Object);

            var habitatDTO = new HabitatDTO
            {
                HabitatID = 1,
                Name      = "Habitat test"
            };

            var result = await controller.PostHabitat(habitatDTO);

            var test      = result.Result as CreatedResult;
            var dtoResult = (HabitatDTO)test.Value;

            Assert.Equal("Habitat test", dtoResult.Name);
        }
Beispiel #4
0
 public async Task <ActionResult <HabitatDTO> > PostHabitat(HabitatDTO habitatDto)
 {
     try
     {
         var mappedEntity = _mapper.Map <Habitat>(habitatDto);
         _habitatRepository.Add(mappedEntity);
         if (await _habitatRepository.Save())
         {
             return(Created($"Post succeeded: /api/v1.0/habitat/id/{habitatDto.HabitatID}", _mapper.Map <HabitatDTO>(mappedEntity)));
         }
     }
     catch (Exception e)
     {
         return(this.StatusCode(StatusCodes.Status500InternalServerError, $"database failure {e.Message}"));
     }
     return(BadRequest());
 }
Beispiel #5
0
        public async Task <ActionResult> PutHabitat(int id, HabitatDTO habitatDto)
        {
            try
            {
                var oldHabitat = await _habitatRepository.GetHabitatById(id);

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

                var newHabitat = _mapper.Map(habitatDto, oldHabitat);
                _habitatRepository.Update(newHabitat);
                if (await _habitatRepository.Save())
                {
                    return(NoContent());
                }
            }
            catch (Exception e)
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError, $"Database failure {e.Message}"));
            }
            return(BadRequest());
        }