Skip to content

Commit 25c8a4c

Browse files
committed
Support for schemas with enums
If a schema provides an list of enum values, generate them as a (sorted) list
1 parent 52d890b commit 25c8a4c

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

lib/govuk_tech_docs/api_reference/templates/schema.html.erb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,11 @@
2727
</tbody>
2828
</table>
2929
<% end %>
30+
<% if schema.enum %>
31+
<p>This schema can be any one of the following <%= schema.type.pluralize %>:</p>
32+
<ul class='<%= id.parameterize %>-enum'>
33+
<% schema.enum.sort.each do |value| %>
34+
<li><%= value %></li>
35+
<% end %>
36+
</ul>
37+
<% end %>

spec/api_reference/renderer_spec.rb

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,28 @@
9898
rendered = Capybara::Node::Simple.new(rendered)
9999
expect(rendered).to have_css("h2#schemas", text: "Schemas")
100100
expect(rendered).to have_css("h3#schema-pet", text: "Pet")
101-
expect(rendered).to have_css("table.schema-pet", text: "id")
101+
expect(rendered).to have_css("table.schema-pet", text: 'id')
102+
end
103+
104+
it "renders an enum schema" do
105+
@spec["components"] = {
106+
"schemas": {
107+
"Pet": {
108+
"type": "string",
109+
"enum": [ "pending", "available", "sold" ],
110+
},
111+
},
112+
}
113+
document = Openapi3Parser.load(@spec)
114+
115+
render = described_class.new(@app, document)
116+
rendered = render.api_full(document.info, document.servers)
117+
118+
rendered = Capybara::Node::Simple.new(rendered)
119+
expect(rendered).to have_css("h3#schema-pet", text: "Pet")
120+
expect(rendered).to have_css(".schema-pet-enum", text: "pending")
121+
expect(rendered).to have_css(".schema-pet-enum", text: "available")
122+
expect(rendered).to have_css(".schema-pet-enum", text: "sold")
102123
end
103124
end
104125
end

0 commit comments

Comments
 (0)