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 %>:
+
+<% schema.enum.sort.each do |value| %>
+- <%= value %>
+<% end %>
+
+<% 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