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" }); }
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" }); }
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" }); }
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" }); }
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" }); }