/// <summary> /// Converts a collection of resources into a serialized <see cref="Document" />. /// </summary> /// <remarks> /// This method is internal instead of private for easier testability. /// </remarks> internal string SerializeMany(IReadOnlyCollection <IIdentifiable> resources) { IReadOnlyCollection <AttrAttribute> attributes = _fieldsToSerialize.GetAttributes(_primaryResourceType); IReadOnlyCollection <RelationshipAttribute> relationships = _fieldsToSerialize.GetRelationships(_primaryResourceType); Document document = Build(resources, attributes, relationships); foreach (ResourceObject resourceObject in document.ManyData) { ResourceLinks links = _linkBuilder.GetResourceLinks(resourceObject.Type, resourceObject.Id); if (links == null) { break; } resourceObject.Links = links; } AddTopLevelObjects(document); return(SerializeObject(document, _options.SerializerSettings, serializer => { serializer.NullValueHandling = NullValueHandling.Include; })); }
protected ILinkBuilder GetLinkBuilder(TopLevelLinks top = null, ResourceLinks resource = null, RelationshipLinks relationship = null) { var mock = new Mock <ILinkBuilder>(); mock.Setup(m => m.GetTopLevelLinks()).Returns(top); mock.Setup(m => m.GetResourceLinks(It.IsAny <string>(), It.IsAny <string>())).Returns(resource); mock.Setup(m => m.GetRelationshipLinks(It.IsAny <RelationshipAttribute>(), It.IsAny <IIdentifiable>())).Returns(relationship); return(mock.Object); }
protected ResponseResourceObjectBuilder GetResponseResourceObjectBuilder(IEnumerable <IEnumerable <RelationshipAttribute> > inclusionChains = null, ResourceLinks resourceLinks = null, RelationshipLinks relationshipLinks = null) { ILinkBuilder link = GetLinkBuilder(null, resourceLinks, relationshipLinks); IEnumerable <IQueryConstraintProvider> includeConstraints = GetIncludeConstraints(inclusionChains); IIncludedResourceObjectBuilder includedBuilder = GetIncludedBuilder(); return(new ResponseResourceObjectBuilder(link, includedBuilder, includeConstraints, ResourceGraph, GetResourceDefinitionAccessor(), GetSerializerSettingsProvider())); }
public SerializerTestsSetup() { _dummyTopLevelLinks = new TopLevelLinks { Self = "http://www.dummy.com/dummy-self-link", Next = "http://www.dummy.com/dummy-next-link", Prev = "http://www.dummy.com/dummy-prev-link", First = "http://www.dummy.com/dummy-first-link", Last = "http://www.dummy.com/dummy-last-link" }; _dummyResourceLinks = new ResourceLinks { Self = "http://www.dummy.com/dummy-resource-self-link" }; _dummyRelationshipLinks = new RelationshipLinks { Related = "http://www.dummy.com/dummy-relationship-related-link", Self = "http://www.dummy.com/dummy-relationship-self-link" }; }
public void Downloader_LinksRecieved(object sender, ResourceLinks e) { lock (locker) { var todel = new List <LinkRequest>(); foreach (var request in requests) { if (DateTime.Now.Subtract(request.Created).TotalSeconds > RequestTimeout) { todel.Add(request); } else if (request.Hash == e.Checksum) { foreach (var s in e.Mirrors) { Program.main.AutoHost.Respond(request.SayArgs, s); } } } requests.RemoveAll(todel.Contains); } }
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 options = new JsonApiOptions { ResourceLinks = 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); // Act ResourceLinks resourceLinks = linkBuilder.GetResourceLinks(nameof(ExampleResource), "id"); // Assert if (expected == LinkTypes.Self) { resourceLinks.Self.Should().NotBeNull(); } else { resourceLinks.Should().BeNull(); } }
protected ResponseResourceObjectBuilder GetResponseResourceObjectBuilder(List <List <RelationshipAttribute> > inclusionChains = null, ResourceLinks resourceLinks = null, RelationshipLinks relationshipLinks = null) { var link = GetLinkBuilder(null, resourceLinks, relationshipLinks); var includeConstraints = GetIncludeConstraints(inclusionChains); var includedBuilder = GetIncludedBuilder(); return(new ResponseResourceObjectBuilder(link, includedBuilder, includeConstraints, _resourceGraph, GetSerializerSettingsProvider())); }
protected ResponseSerializer <T> GetResponseSerializer <T>(List <List <RelationshipAttribute> > inclusionChains = null, Dictionary <string, object> metaDict = null, TopLevelLinks topLinks = null, ResourceLinks resourceLinks = null, RelationshipLinks relationshipLinks = null) where T : class, IIdentifiable { var meta = GetMetaBuilder <T>(metaDict); var link = GetLinkBuilder(topLinks, resourceLinks, relationshipLinks); var includeConstraints = GetIncludeConstraints(inclusionChains); var includedBuilder = GetIncludedBuilder(); var fieldsToSerialize = GetSerializableFields(); ResponseResourceObjectBuilder resourceObjectBuilder = new ResponseResourceObjectBuilder(link, includedBuilder, includeConstraints, _resourceGraph, GetSerializerSettingsProvider()); return(new ResponseSerializer <T>(meta, link, includedBuilder, fieldsToSerialize, resourceObjectBuilder, new JsonApiOptions())); }
/// <summary> /// Returns a fully populated <see cref="ResourceLink"/>. /// </summary> /// <param name="id">The resource link id.</param> /// <returns>The resource link.</returns> public async Task <ResourceLink> GetResourceLinkAsync(int id) { return(await ResourceLinks .Include(l => l.Tool) .SingleOrDefaultAsync(l => l.Id == id)); }
protected ResponseSerializer <T> GetResponseSerializer <T>(IEnumerable <IEnumerable <RelationshipAttribute> > inclusionChains = null, Dictionary <string, object> metaDict = null, TopLevelLinks topLinks = null, ResourceLinks resourceLinks = null, RelationshipLinks relationshipLinks = null) where T : class, IIdentifiable { IEnumerable <RelationshipAttribute>[] inclusionChainArray = inclusionChains?.ToArray(); IMetaBuilder meta = GetMetaBuilder(metaDict); ILinkBuilder link = GetLinkBuilder(topLinks, resourceLinks, relationshipLinks); IEnumerable <IQueryConstraintProvider> includeConstraints = GetIncludeConstraints(inclusionChainArray); IIncludedResourceObjectBuilder includedBuilder = GetIncludedBuilder(inclusionChainArray != null); IFieldsToSerialize fieldsToSerialize = GetSerializableFields(); IResourceDefinitionAccessor resourceDefinitionAccessor = GetResourceDefinitionAccessor(); IResourceObjectBuilderSettingsProvider settingsProvider = GetSerializerSettingsProvider(); IEvaluatedIncludeCache evaluatedIncludeCache = GetEvaluatedIncludeCache(inclusionChainArray); var resourceObjectBuilder = new ResponseResourceObjectBuilder(link, includedBuilder, includeConstraints, ResourceGraph, resourceDefinitionAccessor, settingsProvider, evaluatedIncludeCache); var jsonApiOptions = new JsonApiOptions(); return(new ResponseSerializer <T>(meta, link, includedBuilder, fieldsToSerialize, resourceObjectBuilder, resourceDefinitionAccessor, jsonApiOptions)); }