From 8626c99a7d2f05d5ee4fefad4aa7466177f1edeb Mon Sep 17 00:00:00 2001 From: Blake Erickson Date: Wed, 20 Jul 2022 20:18:48 -0500 Subject: [PATCH] DEV: Tidy up create group api endpoint docs (#17586) Switch to using json schema files for describing the requests and responses. --- spec/requests/api/groups_spec.rb | 59 +------ .../schemas/json/group_create_request.json | 20 +++ .../schemas/json/group_create_response.json | 161 ++++++++++++++++++ 3 files changed, 188 insertions(+), 52 deletions(-) create mode 100644 spec/requests/api/schemas/json/group_create_request.json create mode 100644 spec/requests/api/schemas/json/group_create_response.json diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb index 4662e89eec7..ec8ae0810e9 100644 --- a/spec/requests/api/groups_spec.rb +++ b/spec/requests/api/groups_spec.rb @@ -15,62 +15,17 @@ describe 'groups' do tags 'Groups' operationId 'createGroup' consumes 'application/json' - parameter name: :group, in: :body, schema: { - type: :object, - properties: { - group: { - type: :object, - properties: { - name: { type: :string }, - }, required: ['name'] - } - }, required: ['group'] - } + expected_request_schema = load_spec_schema('group_create_request') + parameter name: :params, in: :body, schema: expected_request_schema produces 'application/json' response '200', 'group created' do - schema type: :object, properties: { - basic_group: { - type: :object, - properties: { - id: { type: :integer }, - automatic: { type: :boolean }, - name: { type: :string }, - user_count: { type: :integer }, - mentionable_level: { type: :integer }, - messageable_level: { type: :integer }, - visibility_level: { type: :integer }, - automatic_membership_email_domains: { type: [:string, :null] }, - automatic_membership_retroactive: { type: :boolean }, - primary_group: { type: :boolean }, - title: { type: [:string, :null] }, - grant_trust_level: { type: [:string, :null] }, - incoming_email: { type: [:string, :null] }, - has_messages: { type: :boolean }, - flair_url: { type: [:string, :null] }, - flair_bg_color: { type: [:string, :null] }, - flair_color: { type: [:string, :null] }, - bio_raw: { type: [:string, :null] }, - bio_cooked: { type: [:string, :null] }, - bio_excerpt: { type: [:string, :null] }, - public_admission: { type: :boolean }, - public_exit: { type: :boolean }, - allow_membership_requests: { type: :boolean }, - full_name: { type: [:string, :null] }, - default_notification_level: { type: :integer }, - membership_request_template: { type: [:string, :null] }, - membership_visibility_level: { type: :integer }, - can_see_members: { type: :boolean }, - publish_read_state: { type: :boolean }, - }, - required: ["id"] - } - }, required: ["basic_group"] + expected_response_schema = load_spec_schema('group_create_response') - let(:group) { { name: 'awesome' } } - run_test! do |response| - data = JSON.parse(response.body) - expect(data['basic_group']['name']).to eq("awesome") + let(:params) { { 'group' => { 'name' => 'awesome' } } } + it_behaves_like "a JSON endpoint", 200 do + let(:expected_response_schema) { expected_response_schema } + let(:expected_request_schema) { expected_request_schema } end end end diff --git a/spec/requests/api/schemas/json/group_create_request.json b/spec/requests/api/schemas/json/group_create_request.json new file mode 100644 index 00000000000..5be58664cf0 --- /dev/null +++ b/spec/requests/api/schemas/json/group_create_request.json @@ -0,0 +1,20 @@ +{ + "additionalProperties": false, + "properties": { + "group": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + }, + "required": [ + "group" + ] +} diff --git a/spec/requests/api/schemas/json/group_create_response.json b/spec/requests/api/schemas/json/group_create_response.json new file mode 100644 index 00000000000..2d77910bbeb --- /dev/null +++ b/spec/requests/api/schemas/json/group_create_response.json @@ -0,0 +1,161 @@ +{ + "additionalProperties": false, + "properties": { + "basic_group": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "integer" + }, + "automatic": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "user_count": { + "type": "integer" + }, + "mentionable_level": { + "type": "integer" + }, + "messageable_level": { + "type": "integer" + }, + "visibility_level": { + "type": "integer" + }, + "primary_group": { + "type": "boolean" + }, + "title": { + "type": [ + "string", + "null" + ] + }, + "grant_trust_level": { + "type": [ + "string", + "null" + ] + }, + "incoming_email": { + "type": [ + "string", + "null" + ] + }, + "has_messages": { + "type": "boolean" + }, + "flair_url": { + "type": [ + "string", + "null" + ] + }, + "flair_bg_color": { + "type": [ + "string", + "null" + ] + }, + "flair_color": { + "type": [ + "string", + "null" + ] + }, + "bio_raw": { + "type": [ + "string", + "null" + ] + }, + "bio_cooked": { + "type": [ + "string", + "null" + ] + }, + "bio_excerpt": { + "type": [ + "string", + "null" + ] + }, + "public_admission": { + "type": "boolean" + }, + "public_exit": { + "type": "boolean" + }, + "allow_membership_requests": { + "type": "boolean" + }, + "full_name": { + "type": [ + "string", + "null" + ] + }, + "default_notification_level": { + "type": "integer" + }, + "membership_request_template": { + "type": [ + "string", + "null" + ] + }, + "members_visibility_level": { + "type": "integer" + }, + "can_see_members": { + "type": "boolean" + }, + "can_admin_group": { + "type": "boolean" + }, + "publish_read_state": { + "type": "boolean" + } + }, + "required": [ + "id", + "automatic", + "name", + "user_count", + "mentionable_level", + "messageable_level", + "visibility_level", + "primary_group", + "title", + "grant_trust_level", + "incoming_email", + "has_messages", + "flair_url", + "flair_bg_color", + "flair_color", + "bio_raw", + "bio_cooked", + "bio_excerpt", + "public_admission", + "public_exit", + "allow_membership_requests", + "full_name", + "default_notification_level", + "membership_request_template", + "members_visibility_level", + "can_see_members", + "can_admin_group", + "publish_read_state" + ] + } + }, + "required": [ + "basic_group" + ] +}