public IEnumerable <SwaggerResource> GetFilteredResources(SwaggerDocumentContext swaggerDocumentContext) { return(swaggerDocumentContext.ResourceModel .GetAllResources() .Where(r => r.IsEdFiStandardResource && !r.Entity.IsAbstract) .Select(r => new SwaggerResource(r))); }
protected override void Arrange() { _compositesMetadataProvider = Stub <ICompositesMetadataProvider>(); var routes = new List <XElement>(OpenApiCompositeHelper.Routes).ToReadOnlyList(); var definitions = new List <XElement>(OpenApiCompositeHelper.CompositeDefinitions).ToReadOnlyList(); A.CallTo(() => _compositesMetadataProvider.TryGetRoutes( A <string> ._, A <string> ._, out routes)) .Returns(true); A.CallTo(() => _compositesMetadataProvider.TryGetCompositeDefinitions( A <string> ._, A <string> ._, out definitions)) .Returns(true); _swaggerDocumentContext = new SwaggerDocumentContext( _resourceModelProvider.GetResourceModel()) { CompositeContext = new SwaggerCompositeContext { CategoryName = OpenApiCompositeHelper.CategoryName } }; }
public static SwaggerPathsFactory CreateSwaggerPathsFactory(SwaggerDocumentContext swaggerDocumentContext) { if (swaggerDocumentContext.IsProfileContext) { var profileStrategy = new SwaggerPathsFactoryProfileStrategy(swaggerDocumentContext); //Profile strategy implements each of the interfaces in the signature of the paths factory constructor //Hence the odd parameter repetition. return(new SwaggerPathsFactory(profileStrategy, profileStrategy, profileStrategy)); } ISwaggerPathsFactorySelectorStrategy selectorStrategy = null; ISwaggerPathsFactoryNamingStrategy resourceNamingStrategy = null; if (swaggerDocumentContext.RenderType == RenderType.ExtensionArtifactsOnly) { selectorStrategy = new SwaggerPathsFactorySchemaSelectorStrategy(swaggerDocumentContext); } if (swaggerDocumentContext.IsCompositeContext) { selectorStrategy = new SwaggerCompositePathsFactoryStrategy(swaggerDocumentContext); resourceNamingStrategy = new SwaggerPathsFactoryCompositeStrategy(); } var defaultStrategy = new DefaultSwaggerPathsFactoryStrategy(); var defaultResourceDefinitionNamingStrategy = new SwaggerPathsFactoryDefaultStrategy(); ISwaggerPathsFactoryContentTypeStrategy contentTypeStrategy = defaultStrategy; selectorStrategy = selectorStrategy ?? defaultStrategy; resourceNamingStrategy = resourceNamingStrategy ?? defaultResourceDefinitionNamingStrategy; return(new SwaggerPathsFactory(selectorStrategy, contentTypeStrategy, resourceNamingStrategy)); }
protected override void Arrange() { _testProfileResourceNamesProvider = new TestProfileResourceNamesProvider(); var studentProgramAssociation = _resourceModelProvider.GetResourceModel() .GetResourceByFullName( new FullName( EdFiConventions .PhysicalSchemaName, "StudentProgramAssociation")); var studentSpecialEducationProgramAssociation = _resourceModelProvider .GetResourceModel() .GetResourceByFullName( new FullName( EdFiConventions .PhysicalSchemaName, "StudentSpecialEducationProgramAssociation")); _expectedFilteredResources = new[] { new SwaggerResource(studentProgramAssociation) { Name = "studentProgramAssociation", Readable = true }, new SwaggerResource(studentProgramAssociation) { Name = "studentProgramAssociation", Readable = true, ContextualResource = studentSpecialEducationProgramAssociation }, new SwaggerResource(studentProgramAssociation) { Name = "studentProgramAssociation_StudentSpecialEducationProgramAssociation", Readable = true, Writable = true }, new SwaggerResource(studentSpecialEducationProgramAssociation) { Name = "studentSpecialEducationProgramAssociation", Readable = true, Writable = true } }; _schemaNameMapProviderStub = Stub <ISchemaNameMapProvider>(); var profileResourceModel = new ProfileResourceModel( _resourceModelProvider.GetResourceModel(), _testProfileResourceNamesProvider.GetProfileDefinition("ProfileName")); _swaggerDocumentContext = new SwaggerDocumentContext( _resourceModelProvider.GetResourceModel()) { ProfileContext = new SwaggerProfileContext { ProfileName = "ProfileName", ProfileResourceModel = profileResourceModel } }; }
public static SwaggerTagsFactory CreateSwaggerTagsFactory(SwaggerDocumentContext documentContext) { var filter = documentContext.RenderType == RenderType.ExtensionArtifactsOnly ? new SwaggerFactoryResourceFilterSchemaStrategy(documentContext) as ISwaggerFactoryResourceFilterStrategy : new SwaggerFactoryResourceFilterDefaultStrategy(); return(new SwaggerTagsFactory(filter)); }
public IEnumerable <SwaggerResource> GetFilteredResources(SwaggerDocumentContext swaggerDocumentContext) => swaggerDocumentContext .ResourceModel .GetAllResources() .Where( x => x.IsDescriptorEntity() && !x.Entity.IsAbstract) .Select( r => new SwaggerResource(r));
public IEnumerable <SwaggerResource> GetFilteredResources(SwaggerDocumentContext swaggerDocumentContext) { var profileResources = swaggerDocumentContext.ProfileContext.ProfileResourceModel.ResourceByName.Values .ToList(); var allResources = profileResources.Where(r => r.Readable != null) .Select(r => r.Readable) .Concat( profileResources.Where(r => r.Writable != null) .Select(r => r.Writable)) .ToList(); var readableSwaggerResources = profileResources.Where(r => r.Readable != null) .Select( r => new SwaggerResource(r.Readable) { Name = GetResourceName(r.Readable, ContentTypeUsage.Readable), Readable = true, IsProfileResource = true }) .ToList(); var writableSwaggerResources = profileResources.Where(r => r.Writable != null) .Select( r => new SwaggerResource(r.Writable) { Name = GetResourceName(r.Writable, ContentTypeUsage.Writable), Writable = true, IsProfileResource = true }) .ToList(); return(readableSwaggerResources.Concat(writableSwaggerResources) .Concat( readableSwaggerResources.Select( r => GetBaseResourceInProfile( allResources, r, ContentTypeUsage.Readable))) .Concat( readableSwaggerResources.Select( r => GetGenerationContextForSwaggerResource( allResources, r, ContentTypeUsage.Readable))) .Concat( writableSwaggerResources.Select( r => GetBaseResourceInProfile( allResources, r, ContentTypeUsage.Writable))) .Concat( writableSwaggerResources.Select( r => GetGenerationContextForSwaggerResource( allResources, r, ContentTypeUsage.Writable))) .Where(r => r != null)); }
public SwaggerDefinitionsFactoryDefaultEntityExtensionStrategy( SwaggerDocumentContext documentContext, ISwaggerDefinitionsFactoryEdFiExtensionBridgeStrategy bridgeStrategy, ISwaggerDefinitionsFactoryNamingStrategy namingStrategy) { _documentContext = documentContext; _bridgeStrategy = bridgeStrategy; _namingStrategy = namingStrategy; }
protected override void Arrange() { _swaggerDocumentContext = new SwaggerDocumentContext( ResourceModelProvider.GetResourceModel()) { ProfileContext = new SwaggerProfileContext { ProfileName = "Test-ParentNonAbstractBaseClass-ExcludeOnly" }, RenderType = RenderType.GeneralizedExtensions }; string profileDefinition = @"<Profile name='Test-ParentNonAbstractBaseClass-ExcludeOnly'> <Resource name='StudentSpecialEducationProgramAssociation'> <ReadContentType memberSelection='ExcludeOnly'> <Property name='SpecialEducationHoursPerWeek'/> </ReadContentType> <WriteContentType memberSelection='IncludeAll'/> </Resource> <Resource name='StudentProgramAssociation'> <ReadContentType memberSelection='IncludeOnly'/> </Resource> </Profile>"; var profileResourceModel = new ProfileResourceModel( ResourceModelProvider.GetResourceModel(), XElement.Parse(profileDefinition)); var readableResourceModel = profileResourceModel.ResourceByName.Values.Where(r => r.Readable != null); var writableResourceModel = profileResourceModel.ResourceByName.Values.Where(r => r.Writable != null); _swaggerResources = readableResourceModel .Select( r => new SwaggerResource(r.Readable) { Name = $"{CompositeTermInflector.MakeSingular(r.Readable.Name)}_{ContentTypeUsage.Readable}" .ToCamelCase(), Readable = true, IsProfileResource = true }) .Concat( writableResourceModel.Select( r => new SwaggerResource(r.Writable) { Name = $"{CompositeTermInflector.MakeSingular(r.Writable.Name)}_{ContentTypeUsage.Writable}" .ToCamelCase(), Writable = true, IsProfileResource = true } )) .ToList(); }
public SwaggerDocumentFactory(SwaggerDocumentContext swaggerDocumentContext) : this( new SwaggerParametersFactory(), SwaggerDocumentFactoryHelper.CreateSwaggerDefinitionsFactory(swaggerDocumentContext), new SwaggerResponsesFactory(), SwaggerDocumentFactoryHelper.CreateSwaggerPathsFactory(swaggerDocumentContext), SwaggerDocumentFactoryHelper.CreateSwaggerTagsFactory(swaggerDocumentContext), swaggerDocumentContext) { }
private static ISwaggerDefinitionsFactoryNamingStrategy GetSwaggerDefinitionsFactoryNamingStrategy( SwaggerDocumentContext swaggerDocumentContext) { if (swaggerDocumentContext.IsCompositeContext) { return(new SwaggerDefinitionsFactoryCompositeNamingStrategy()); } return(swaggerDocumentContext.IsProfileContext ? (ISwaggerDefinitionsFactoryNamingStrategy) new SwaggerDefinitionsFactoryProfileNamingStrategy() : new SwaggerDefinitionsFactoryDefaultNamingStrategy()); }
protected override void Arrange() { _swaggerDocumentContext = DomainModelDefinitionsProviderHelper.DefaultSwaggerDocumentContext; var swaggerResources = _swaggerDocumentContext.ResourceModel.GetAllResources() .Select(r => new SwaggerResource(r)) .ToList(); _stubbedOpenApiMetadataResourceStrategy = Stub <IOpenApiMetadataResourceStrategy>(); A.CallTo(() => _stubbedOpenApiMetadataResourceStrategy.GetFilteredResources(A <SwaggerDocumentContext> ._)) .Returns(swaggerResources); }
internal SwaggerDocumentFactory( SwaggerParametersFactory parametersFactory, SwaggerDefinitionsFactory definitionsFactory, SwaggerResponsesFactory responsesFactory, SwaggerPathsFactory pathsFactory, SwaggerTagsFactory tagsFactory, SwaggerDocumentContext documentContext) { _parametersFactory = parametersFactory; _definitionsFactory = definitionsFactory; _responsesFactory = responsesFactory; _pathsFactory = pathsFactory; _tagsFactory = tagsFactory; _documentContext = documentContext; }
protected override void Arrange() { _swaggerDocumentContext = new SwaggerDocumentContext( DomainModelDefinitionsProviderHelper .ResourceModelProvider .GetResourceModel()) { RenderType = RenderType.GeneralizedExtensions, IsIncludedExtension = x => x.FullName.Schema.Equals(EdFiConventions.PhysicalSchemaName) }; _genericSwaggerDefinitionFactory = SwaggerDocumentFactoryHelper.CreateSwaggerDefinitionsFactory( _swaggerDocumentContext); }
protected override void Arrange() { _swaggerDocumentContext = new SwaggerDocumentContext( DomainModelDefinitionsProviderHelper .ResourceModelProvider .GetResourceModel()); _genericSwaggerDefinitionFactory = SwaggerDocumentFactoryHelper.CreateSwaggerDefinitionsFactory( _swaggerDocumentContext); _domainModelProvider = DomainModelDefinitionsProviderHelper.DomainModelProvider; _schemaNameMapProvider = _domainModelProvider.GetDomainModel() .SchemaNameMapProvider; }
// Consider reviewing the conditionals in this file for similarities, that could be used // to create methods for construction of the underlying strategies for that conditional function segment. // This would allow for methods like "GetCompositeSwaggerDefinitionsFactory" or "GetExtensionOnlySwaggerDocumentFactory" // that would create the entire SwaggerDocumentFactory with the correct strategies for that use case rather // than using conditional checks on the context. public static SwaggerDefinitionsFactory CreateSwaggerDefinitionsFactory(SwaggerDocumentContext swaggerDocumentContext) { switch (swaggerDocumentContext.RenderType) { case RenderType.GeneralizedExtensions: var genericStrategy = new SwaggerDefinitionsFactoryGenericEdFiExtensionBridgeStrategy(swaggerDocumentContext); return(new SwaggerDefinitionsFactory( new SwaggerDefinitionsFactoryEmptyEntityExtensionStrategy(), genericStrategy, new SwaggerDefinitionsFactoryDefaultNamingStrategy(), new SwaggerFactoryResourceFilterSchemaStrategy(swaggerDocumentContext))); case RenderType.ExtensionArtifactsOnly: var genericBridgeStrategy = new SwaggerDefinitionsFactoryGenericEdFiExtensionBridgeStrategy(swaggerDocumentContext); return(new SwaggerDefinitionsFactory( new SwaggerDefinitionsFactoryDefaultEntityExtensionStrategy( swaggerDocumentContext, genericBridgeStrategy, new SwaggerDefinitionsFactoryDefaultNamingStrategy()), genericBridgeStrategy, new SwaggerDefinitionsFactoryDefaultNamingStrategy(), new SwaggerFactoryResourceFilterSchemaStrategy(swaggerDocumentContext))); default: var bridgeStrategy = new SwaggerDefinitionsFactoryDefaultEdFiExtensionBridgeStrategy(swaggerDocumentContext); var filterStrategy = new SwaggerFactoryResourceFilterDefaultStrategy(); var namingStrategy = GetSwaggerDefinitionsFactoryNamingStrategy(swaggerDocumentContext); var extensionStrategy = new SwaggerDefinitionsFactoryDefaultEntityExtensionStrategy( swaggerDocumentContext, bridgeStrategy, namingStrategy); return(new SwaggerDefinitionsFactory( extensionStrategy, bridgeStrategy, namingStrategy, filterStrategy)); } }
public IEnumerable <SwaggerResource> GetFilteredResources(SwaggerDocumentContext swaggerDocumentContext) => // Only included extensions or EdFi resources that have one of the included extensions swaggerDocumentContext.ResourceModel .GetAllResources() .Where( r => swaggerDocumentContext.IsIncludedExtension(r) || r.IsEdFiStandardResource && (r.AllContainedItemTypes.Any( i => i.Extensions.Any( x => swaggerDocumentContext.IsIncludedExtension( x.ObjectType))) || r.Extensions.Any( x => swaggerDocumentContext.IsIncludedExtension(x.ObjectType)))) .Select(r => new SwaggerResource(r));
public static SwaggerDocumentFactory GetExtensionOnlySwaggerDocumentFactory(IResourceModel resourceModel, Schema schema) { var documentContext = new SwaggerDocumentContext(resourceModel) { RenderType = RenderType.ExtensionArtifactsOnly, IsIncludedExtension = r => r.FullName.Schema.Equals(schema.PhysicalName) }; return(new SwaggerDocumentFactory( new SwaggerParametersFactory(), CreateSwaggerDefinitionsFactory(documentContext), new SwaggerResponsesFactory(), CreateSwaggerPathsFactory(documentContext), CreateSwaggerTagsFactory(documentContext), documentContext )); }
public SwaggerPathsFactorySchemaSelectorStrategy(SwaggerDocumentContext documentContext) { _documentContext = documentContext; }
public IEnumerable <SwaggerResource> GetFilteredResources(SwaggerDocumentContext swaggerDocumentContext) { var compositeContext = swaggerDocumentContext.CompositeContext; var definitionProcessor = new CompositeDefinitionProcessor <CompositeResourceModelBuilderContext, Resource>( new CompositeResourceModelBuilder()); IReadOnlyList <XElement> compositeDefinitions; if (!_compositesMetadataProvider.TryGetCompositeDefinitions( compositeContext.OrganizationCode, compositeContext.CategoryName, out compositeDefinitions)) { return(null); } var compositeResources = new List <SwaggerResource>(); foreach (var compositeDefinition in compositeDefinitions) { // Enable this for composite xml validation. definitionProcessor.UseCompositeValidation(); var compositeResource = definitionProcessor.Process( compositeDefinition, swaggerDocumentContext.ResourceModel, new CompositeResourceModelBuilderContext()); compositeResources.Add( new SwaggerResource(compositeResource) { Readable = true, CompositeResourceContext = new CompositeResourceContext { OrganizationCode = swaggerDocumentContext.CompositeContext.OrganizationCode, Specification = compositeDefinition.Element("Specification"), BaseResource = compositeDefinition.Element("BaseResource") .AttributeValue("name") } }); } var defaultCompositeRoutes = new List <XElement> { XElement.Parse( "<Route relativeRouteTemplate='/{compositeName}' />"), XElement.Parse( "<Route relativeRouteTemplate='/{compositeName}/{id}' />") }; // Get all route definitions for the category IReadOnlyList <XElement> routes; if (!_compositesMetadataProvider.TryGetRoutes(compositeContext.OrganizationCode, compositeContext.CategoryName, out routes)) { throw new Exception($"Composite category '{compositeContext.CategoryName}' does not have any routes defined."); } compositeContext.RouteElements = defaultCompositeRoutes.Concat(routes) .ToList(); return(compositeResources.ToList()); }
public SwaggerPathsFactoryProfileStrategy(SwaggerDocumentContext documentContext) { _documentContext = documentContext; }
protected override void Arrange() { _compositesMetadataProvider = Stub <ICompositesMetadataProvider>(); var definitions = new List <XElement>(OpenApiCompositeHelper.CompositeDefinitions).ToReadOnlyList(); var routes = new List <XElement>(OpenApiCompositeHelper.Routes).ToReadOnlyList(); A.CallTo( () => _compositesMetadataProvider.TryGetCompositeDefinitions( A <string> ._, A <string> ._, out definitions)) .Returns(true); A.CallTo( () => _compositesMetadataProvider.TryGetRoutes( A <string> ._, A <string> ._, out routes)) .Returns(true); _swaggerDocumentContext = new SwaggerDocumentContext( _resourceModelProvider.GetResourceModel()) { CompositeContext = new SwaggerCompositeContext { CategoryName = OpenApiCompositeHelper .CategoryName } }; _filteredResources = new OpenApiCompositeStrategy(_compositesMetadataProvider) .GetFilteredResources(_swaggerDocumentContext); var assessmentResource = _resourceModelProvider .GetResourceModel() .GetResourceByFullName(new FullName(EdFiConventions.PhysicalSchemaName, "Assessment")); _expectedStrategyAppliedResources = OpenApiCompositeHelper.Routes .Where(r => !IsBaseResourceRoute(r)) .Select( r => new SwaggerPathsResource(assessmentResource) { CompositeResourceContext = new CompositeResourceContext(), Path = GetCompositeResourcePath( assessmentResource, r) .ToCamelCase(), OperationId = GetCompositeResourceOperationId( assessmentResource, r), Readable = true, Writable = false }) .Concat( new[] { new SwaggerPathsResource(assessmentResource) { CompositeResourceContext = new CompositeResourceContext(), Path = $"{_swaggerDocumentContext.CompositeContext.CategoryName}/{assessmentResource.PluralName}", OperationId = "getAssessments", Readable = true, Writable = false } }); }
public SwaggerCompositePathsFactoryStrategy(SwaggerDocumentContext swaggerDocumentContext) { _swaggerDocumentContext = swaggerDocumentContext; }
public SwaggerFactoryResourceFilterSchemaStrategy(SwaggerDocumentContext documentContext) { _documentContext = documentContext; }
public SwaggerDefinitionsFactoryGenericEdFiExtensionBridgeStrategy(SwaggerDocumentContext documentContext) { _documentContext = documentContext; }