/// <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); }
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()); }
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()); }