/// <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"
     };
 }
示例#5
0
 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));
 }
示例#10
0
        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));
        }