public void Applies_cascading_settings_for_relationship_links(LinkTypes linksInRelationshipAttribute, LinkTypes linksInResourceContext, LinkTypes linksInOptions, LinkTypes expected) { // Arrange var exampleResourceContext = new ResourceContext { PublicName = nameof(ExampleResource), ResourceType = typeof(ExampleResource), RelationshipLinks = linksInResourceContext }; var options = new JsonApiOptions { RelationshipLinks = linksInOptions }; var request = new JsonApiRequest(); var paginationContext = new PaginationContext(); var resourceGraph = new ResourceGraph(exampleResourceContext.AsArray()); var httpContextAccessor = new FakeHttpContextAccessor(); var linkGenerator = new FakeLinkGenerator(); var controllerResourceMapping = new FakeControllerResourceMapping(); var linkBuilder = new LinkBuilder(options, request, paginationContext, resourceGraph, httpContextAccessor, linkGenerator, controllerResourceMapping); var relationship = new HasOneAttribute { Links = linksInRelationshipAttribute }; // Act RelationshipLinks relationshipLinks = linkBuilder.GetRelationshipLinks(relationship, new ExampleResource()); // Assert if (expected == LinkTypes.None) { relationshipLinks.Should().BeNull(); } else { if (expected.HasFlag(LinkTypes.Self)) { relationshipLinks.Self.Should().NotBeNull(); } else { relationshipLinks.Self.Should().BeNull(); } if (expected.HasFlag(LinkTypes.Related)) { relationshipLinks.Related.Should().NotBeNull(); } else { relationshipLinks.Related.Should().BeNull(); } } }
public void Applies_cascading_settings_for_resource_links(LinkTypes linksInResourceContext, LinkTypes linksInOptions, LinkTypes expected) { // Arrange var exampleResourceContext = new ResourceContext { PublicName = nameof(ExampleResource), ResourceType = typeof(ExampleResource), ResourceLinks = linksInResourceContext }; var resourceGraph = new ResourceGraph(exampleResourceContext.AsArray()); var request = new JsonApiRequest(); var paginationContext = new PaginationContext(); var queryStringAccessor = new EmptyRequestQueryStringAccessor(); var options = new JsonApiOptions { ResourceLinks = linksInOptions }; var linkBuilder = new LinkBuilder(options, request, paginationContext, resourceGraph, queryStringAccessor); // Act ResourceLinks resourceLinks = linkBuilder.GetResourceLinks(nameof(ExampleResource), "id"); // Assert if (expected == LinkTypes.Self) { resourceLinks.Self.Should().NotBeNull(); } else { resourceLinks.Should().BeNull(); } }
public void Applies_cascading_settings_for_top_level_links(LinkTypes linksInResourceContext, LinkTypes linksInOptions, LinkTypes expected) { // Arrange var exampleResourceContext = new ResourceContext { PublicName = nameof(ExampleResource), ResourceType = typeof(ExampleResource), TopLevelLinks = linksInResourceContext }; var options = new JsonApiOptions { TopLevelLinks = linksInOptions }; var request = new JsonApiRequest { PrimaryResource = exampleResourceContext, PrimaryId = "1", IsCollection = true, Kind = EndpointKind.Relationship, Relationship = new HasOneAttribute() }; var paginationContext = new PaginationContext { PageSize = new PageSize(1), PageNumber = new PageNumber(2), TotalResourceCount = 10 }; var resourceGraph = new ResourceGraph(exampleResourceContext.AsArray()); var httpContextAccessor = new FakeHttpContextAccessor(); var linkGenerator = new FakeLinkGenerator(); var controllerResourceMapping = new FakeControllerResourceMapping(); var linkBuilder = new LinkBuilder(options, request, paginationContext, resourceGraph, httpContextAccessor, linkGenerator, controllerResourceMapping); // Act TopLevelLinks topLevelLinks = linkBuilder.GetTopLevelLinks(); // Assert if (expected == LinkTypes.None) { topLevelLinks.Should().BeNull(); } else { if (expected.HasFlag(LinkTypes.Self)) { topLevelLinks.Self.Should().NotBeNull(); } else { topLevelLinks.Self.Should().BeNull(); } if (expected.HasFlag(LinkTypes.Related)) { topLevelLinks.Related.Should().NotBeNull(); } else { topLevelLinks.Related.Should().BeNull(); } if (expected.HasFlag(LinkTypes.Paging)) { topLevelLinks.First.Should().NotBeNull(); topLevelLinks.Last.Should().NotBeNull(); topLevelLinks.Prev.Should().NotBeNull(); topLevelLinks.Next.Should().NotBeNull(); } else { topLevelLinks.First.Should().BeNull(); topLevelLinks.Last.Should().BeNull(); topLevelLinks.Prev.Should().BeNull(); topLevelLinks.Next.Should().BeNull(); } } }