private InvokeConfiguration GetConfiguration(string path, string resourceName = "users", string action = "", string id = null, Type relType = null)
        {
            if (path.First() != '/')
            {
                throw new ArgumentException("Path should start with a '/'");
            }
            var middleware = new JsonApiMiddleware(_ =>
            {
                return(Task.Run(() => Console.WriteLine("finished")));
            });
            const string forcedNamespace = "api/v1";
            var          mockMapping     = new Mock <IControllerResourceMapping>();

            mockMapping.Setup(x => x.GetResourceTypeForController(It.IsAny <string>())).Returns(typeof(string));

            Mock <IJsonApiOptions> mockOptions = CreateMockOptions(forcedNamespace);
            var mockGraph = CreateMockResourceGraph(resourceName, includeRelationship: relType != null);
            var request   = new JsonApiRequest();

            if (relType != null)
            {
                request.Relationship = new HasManyAttribute
                {
                    RightType = relType
                };
            }
            var context = CreateHttpContext(path, isRelationship: relType != null, action: action, id: id);

            return(new InvokeConfiguration
            {
                MiddleWare = middleware,
                ControllerResourceMapping = mockMapping,
                Options = mockOptions,
                Request = request,
                HttpContext = context,
                ResourceGraph = mockGraph
            });
        }
Ejemplo n.º 2
0
        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 resourceGraph = new ResourceGraph(new[]
            {
                exampleResourceContext
            });

            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 queryStringAccessor = new EmptyRequestQueryStringAccessor();

            var options = new JsonApiOptions
            {
                TopLevelLinks = linksInOptions
            };

            var linkBuilder = new LinkBuilder(options, request, paginationContext, resourceGraph, queryStringAccessor);

            // Act
            var 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();
                }
            }
        }
Ejemplo n.º 3
0
        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 resourceGraph = new ResourceGraph(new[]
            {
                exampleResourceContext
            });

            var request = new JsonApiRequest();

            var paginationContext = new PaginationContext();

            var queryStringAccessor = new EmptyRequestQueryStringAccessor();

            var options = new JsonApiOptions
            {
                RelationshipLinks = linksInOptions
            };

            var linkBuilder = new LinkBuilder(options, request, paginationContext, resourceGraph, queryStringAccessor);

            var relationship = new HasOneAttribute
            {
                Links = linksInRelationshipAttribute
            };

            // Act
            var 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();
                }
            }
        }
Ejemplo n.º 4
0
 protected virtual IQueryable <TEntity> GetAllQueryable(JsonApiRequest request)
 {
     return(DefaultListQuery.GenerateQuery(request));
 }
Ejemplo n.º 5
0
 public virtual async Task <IEnumerable <TEntity> > GetAll(JsonApiRequest request)
 {
     return(await GetAllQueryable(request).ToListAsync());
 }
        private static QueryStringReader CreateQueryParameterDiscoveryForAll(IResourceGraph resourceGraph, JsonApiRequest request, IJsonApiOptions options,
                                                                             FakeRequestQueryStringAccessor queryStringAccessor)
        {
            var resourceFactory = new ResourceFactory(new ServiceContainer());

            var includeReader        = new IncludeQueryStringParameterReader(request, resourceGraph, options);
            var filterReader         = new FilterQueryStringParameterReader(request, resourceGraph, resourceFactory, options);
            var sortReader           = new SortQueryStringParameterReader(request, resourceGraph);
            var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader(request, resourceGraph);
            var paginationReader     = new PaginationQueryStringParameterReader(request, resourceGraph, options);
            var defaultsReader       = new DefaultsQueryStringParameterReader(options);
            var nullsReader          = new NullsQueryStringParameterReader(options);

            IQueryStringParameterReader[] readers = ArrayFactory.Create <IQueryStringParameterReader>(includeReader, filterReader, sortReader,
                                                                                                      sparseFieldSetReader, paginationReader, defaultsReader, nullsReader);

            return(new QueryStringReader(options, queryStringAccessor, readers, NullLoggerFactory.Instance));
        }
        private static QueryStringReader CreateQueryParameterDiscoveryForSort(IResourceGraph resourceGraph, JsonApiRequest request, IJsonApiOptions options,
                                                                              FakeRequestQueryStringAccessor queryStringAccessor)
        {
            var sortReader = new SortQueryStringParameterReader(request, resourceGraph);

            IEnumerable <SortQueryStringParameterReader> readers = sortReader.AsEnumerable();

            return(new QueryStringReader(options, queryStringAccessor, readers, NullLoggerFactory.Instance));
        }
Ejemplo n.º 8
0
 public async Task <IEnumerable <TEntity> > GetAllDefault(JsonApiRequest request)
 {
     return(await this.DefaultQuery.GenerateQuery(request).ToListAsync());
 }
Ejemplo n.º 9
0
 public virtual async Task <IEnumerable <TEntity> > GetAll(IList <TKey> keys, JsonApiRequest request)
 {
     return(await this.GetAllQueryable(request).Where(x => keys.Contains(x.Id)).ToListAsync());
 }
Ejemplo n.º 10
0
 protected override async Task <(bool success, SampleUser user)> AuthenticateAsync(JsonApiRequest request) =>
Ejemplo n.º 11
0
 public SampleFunction(JsonApiRequest request, ILogger logger, Repository <TModel> repository) : base(request, logger, repository)
 {
 }
Ejemplo n.º 12
0
 protected override IQueryable <FavouriteLocation> GetAllQueryable(JsonApiRequest request)
 {
     return(base.GetAllQueryable(request).Where(x => x.User.Id == RepositoryRequisite.RequestInfo.UserId));
 }
 protected abstract TKey GetId(JsonApiRequest request);
 protected abstract Task <(bool success, TUser user)> AuthenticateAsync(JsonApiRequest request);
 public AzureFunctionHandler(JsonApiRequest request, ILogger logger, IRepository <TModel, TKey, TUser> repository)
 {
     _request    = request;
     _logger     = logger;
     _repository = repository;
 }