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 }); }
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(); } } }
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(); } } }
protected virtual IQueryable <TEntity> GetAllQueryable(JsonApiRequest request) { return(DefaultListQuery.GenerateQuery(request)); }
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)); }
public async Task <IEnumerable <TEntity> > GetAllDefault(JsonApiRequest request) { return(await this.DefaultQuery.GenerateQuery(request).ToListAsync()); }
public virtual async Task <IEnumerable <TEntity> > GetAll(IList <TKey> keys, JsonApiRequest request) { return(await this.GetAllQueryable(request).Where(x => keys.Contains(x.Id)).ToListAsync()); }
protected override async Task <(bool success, SampleUser user)> AuthenticateAsync(JsonApiRequest request) =>
public SampleFunction(JsonApiRequest request, ILogger logger, Repository <TModel> repository) : base(request, logger, repository) { }
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; }