Ejemplo n.º 1
0
 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));
        }
Ejemplo n.º 8
0
 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();
            }
Ejemplo n.º 10
0
 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);
            }
Ejemplo n.º 13
0
 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;
 }
Ejemplo n.º 14
0
            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);
            }
Ejemplo n.º 15
0
            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));
            }
        }
Ejemplo n.º 17
0
        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;
 }
Ejemplo n.º 22
0
            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;
 }
Ejemplo n.º 24
0
 public SwaggerFactoryResourceFilterSchemaStrategy(SwaggerDocumentContext documentContext)
 {
     _documentContext = documentContext;
 }
 public SwaggerDefinitionsFactoryGenericEdFiExtensionBridgeStrategy(SwaggerDocumentContext documentContext)
 {
     _documentContext = documentContext;
 }