Ejemplo n.º 1
0
        public void LocateTopLevelArrayItems()
        {
            var doc = new OpenApiDocument()
            {
                Servers = new List <OpenApiServer>()
                {
                    new OpenApiServer(),
                    new OpenApiServer()
                },
                Paths = new OpenApiPaths(),
                Tags  = new List <OpenApiTag>()
                {
                    new OpenApiTag()
                }
            };

            var locator = new LocatorVisitor();
            var walker  = new OpenApiWalker(locator);

            walker.Walk(doc);

            locator.Locations.ShouldBeEquivalentTo(new List <string> {
                "#/servers",
                "#/servers/0",
                "#/servers/1",
                "#/paths",
                "#/tags",
                "#/tags/0"
            });
        }
Ejemplo n.º 2
0
        public void LocatePathOperationContentSchema()
        {
            var doc = new OpenApiDocument
            {
                Paths = new OpenApiPaths()
            };

            doc.Paths.Add("/test", new OpenApiPathItem()
            {
                Operations = new Dictionary <OperationType, OpenApiOperation>()
                {
                    [OperationType.Get] = new OpenApiOperation()
                    {
                        Responses = new OpenApiResponses()
                        {
                            ["200"] = new OpenApiResponse()
                            {
                                Content = new Dictionary <string, OpenApiMediaType>
                                {
                                    ["application/json"] = new OpenApiMediaType
                                    {
                                        Schema = new OpenApiSchema
                                        {
                                            Type = "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            });

            var locator = new LocatorVisitor();
            var walker  = new OpenApiWalker(locator);

            walker.Walk(doc);

            locator.Locations.ShouldBeEquivalentTo(new List <string> {
                "#/servers",
                "#/paths",
                "#/paths/~1test",
                "#/paths/~1test/get",
                "#/paths/~1test/get/responses",
                "#/paths/~1test/get/responses/200",
                "#/paths/~1test/get/responses/200/content",
                "#/paths/~1test/get/responses/200/content/application~1json",
                "#/paths/~1test/get/responses/200/content/application~1json/schema",
                "#/paths/~1test/get/tags",
                "#/tags",
            });

            locator.Keys.ShouldBeEquivalentTo(new List <string> {
                "/test", "Get", "200", "application/json"
            });
        }
Ejemplo n.º 3
0
        public void LocateTopLevelObjects()
        {
            var doc = new OpenApiDocument();

            var locator = new LocatorVisitor();
            var walker  = new OpenApiWalker(locator);

            walker.Walk(doc);

            locator.Locations.ShouldBeEquivalentTo(new List <string> {
                "#/servers",
                "#/tags"
            });
        }
Ejemplo n.º 4
0
        public void WalkDOMWithCycles()
        {
            var loopySchema = new OpenApiSchema()
            {
                Type       = "object",
                Properties = new Dictionary <string, OpenApiSchema>()
                {
                    ["name"] = new OpenApiSchema()
                    {
                        Type = "string"
                    }
                }
            };

            loopySchema.Properties.Add("parent", loopySchema);

            var doc = new OpenApiDocument()
            {
                Paths      = new OpenApiPaths(),
                Components = new OpenApiComponents()
                {
                    Schemas = new Dictionary <string, OpenApiSchema>
                    {
                        ["loopy"] = loopySchema
                    }
                }
            };

            var locator = new LocatorVisitor();
            var walker  = new OpenApiWalker(locator);

            walker.Walk(doc);

            locator.Locations.ShouldBeEquivalentTo(new List <string> {
                "#/servers",
                "#/paths",
                "#/components",
                "#/components/schemas/loopy",
                "#/components/schemas/loopy/properties/name",
                "#/tags"
            });
        }
Ejemplo n.º 5
0
        public void LocateReferences()
        {
            var baseSchema = new OpenApiSchema()
            {
                Reference = new OpenApiReference()
                {
                    Id   = "base",
                    Type = ReferenceType.Schema
                },
                UnresolvedReference = false
            };

            var derivedSchema = new OpenApiSchema
            {
                AnyOf = new List <OpenApiSchema>()
                {
                    baseSchema
                },
                Reference = new OpenApiReference()
                {
                    Id   = "derived",
                    Type = ReferenceType.Schema
                },
                UnresolvedReference = false
            };

            var testHeader = new OpenApiHeader()
            {
                Schema    = derivedSchema,
                Reference = new OpenApiReference()
                {
                    Id   = "test-header",
                    Type = ReferenceType.Header
                },
                UnresolvedReference = false
            };

            var doc = new OpenApiDocument
            {
                Paths = new OpenApiPaths()
                {
                    ["/"] = new OpenApiPathItem()
                    {
                        Operations = new Dictionary <OperationType, OpenApiOperation>()
                        {
                            [OperationType.Get] = new OpenApiOperation()
                            {
                                Responses = new OpenApiResponses()
                                {
                                    ["200"] = new OpenApiResponse()
                                    {
                                        Content = new Dictionary <string, OpenApiMediaType>()
                                        {
                                            ["application/json"] = new OpenApiMediaType()
                                            {
                                                Schema = derivedSchema
                                            }
                                        },
                                        Headers = new Dictionary <string, OpenApiHeader>()
                                        {
                                            ["test-header"] = testHeader
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                Components = new OpenApiComponents()
                {
                    Schemas = new Dictionary <string, OpenApiSchema>()
                    {
                        ["derived"] = derivedSchema,
                        ["base"]    = baseSchema,
                    },
                    Headers = new Dictionary <string, OpenApiHeader>()
                    {
                        ["test-header"] = testHeader
                    }
                }
            };

            var locator = new LocatorVisitor();
            var walker  = new OpenApiWalker(locator);

            walker.Walk(doc);

            locator.Locations.Where(l => l.StartsWith("referenceAt:")).ShouldBeEquivalentTo(new List <string> {
                "referenceAt: #/paths/~1/get/responses/200/content/application~1json/schema",
                "referenceAt: #/paths/~1/get/responses/200/headers/test-header",
                "referenceAt: #/components/schemas/derived/anyOf/0",
                "referenceAt: #/components/headers/test-header/schema"
            });
        }