diff --git a/example/source/pets.yml b/example/source/pets.yml index 818e14fb..54820ee5 100644 --- a/example/source/pets.yml +++ b/example/source/pets.yml @@ -93,10 +93,19 @@ components: type: string tag: type: string + status: + $ref: "#/components/schemas/PetStatus" Pets: type: array items: $ref: "#/components/schemas/Pet" + PetStatus: + type: string + description: pet status in the store + enum: + - pending + - available + - sold Error: required: - code diff --git a/lib/govuk_tech_docs/api_reference/templates/schema.html.erb b/lib/govuk_tech_docs/api_reference/templates/schema.html.erb index 051f43d6..8747e2cb 100644 --- a/lib/govuk_tech_docs/api_reference/templates/schema.html.erb +++ b/lib/govuk_tech_docs/api_reference/templates/schema.html.erb @@ -27,3 +27,11 @@ <% end %> +<% if schema.enum %> +

This schema can be any one of the following <%= schema.type.pluralize %>:

+ +<% end %> diff --git a/spec/api_reference/renderer_spec.rb b/spec/api_reference/renderer_spec.rb index 30b48998..745279ff 100644 --- a/spec/api_reference/renderer_spec.rb +++ b/spec/api_reference/renderer_spec.rb @@ -79,5 +79,47 @@ expect(rendered).to have_css("div#server-list>p>strong", text: "Development") expect(rendered).to have_css("div#server-list>p>strong>p>em", text: "Development") end + + it "renders a schema" do + @spec["components"] = { + "schemas": { + "Pet": { + "properties": { + "id": { "type": "integer", "format": "int64" }, + }, + }, + }, + } + document = Openapi3Parser.load(@spec) + + render = described_class.new(@app, document) + rendered = render.api_full(document.info, document.servers) + + rendered = Capybara::Node::Simple.new(rendered) + expect(rendered).to have_css("h2#schemas", text: "Schemas") + expect(rendered).to have_css("h3#schema-pet", text: "Pet") + expect(rendered).to have_css("table.schema-pet", text: "id") + end + + it "renders an enum schema" do + @spec["components"] = { + "schemas": { + "Pet": { + "type": "string", + "enum": %w[pending available sold], + }, + }, + } + document = Openapi3Parser.load(@spec) + + render = described_class.new(@app, document) + rendered = render.api_full(document.info, document.servers) + + rendered = Capybara::Node::Simple.new(rendered) + expect(rendered).to have_css("h3#schema-pet", text: "Pet") + expect(rendered).to have_css(".schema-pet-enum", text: "pending") + expect(rendered).to have_css(".schema-pet-enum", text: "available") + expect(rendered).to have_css(".schema-pet-enum", text: "sold") + end end end