# frozen_string_literal: true require 'swagger_helper' RSpec.describe 'groups' do let(:admin) { Fabricate(:admin) } before do Jobs.run_immediately! sign_in(admin) end path '/admin/groups.json' do post 'Creates a group' do tags 'Groups' operationId 'createGroup' consumes 'application/json' 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 expected_response_schema = load_spec_schema('group_create_response') 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 end path '/admin/groups/{id}.json' do delete 'Delete a group' do tags 'Groups' operationId 'deleteGroup' consumes 'application/json' parameter name: :id, in: :path, type: :integer expected_request_schema = nil produces 'application/json' response '200', 'response' do expected_response_schema = load_spec_schema('success_ok_response') schema expected_response_schema let(:id) { Fabricate(:group).id } 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 end path '/groups/{id}.json' do put 'Update a group' do tags 'Groups' operationId 'updateGroup' consumes 'application/json' parameter name: :id, in: :path, type: :integer parameter name: :group, in: :body, schema: { type: :object, properties: { group: { type: :object, properties: { name: { type: :string }, }, required: ['name'] } }, required: ['group'] } produces 'application/json' response '200', 'success response' do schema type: :object, properties: { success: { type: :string, example: "OK" } } let(:id) { Fabricate(:group).id } let(:group) { { name: 'awesome' } } run_test! end end get 'Get a group' do tags 'Groups' operationId 'getGroup' consumes 'application/json' parameter name: :id, in: :path, type: :string, example: 'name', description: "Use group name instead of id" expected_request_schema = nil produces 'application/json' response '200', 'success response' do expected_response_schema = load_spec_schema('group_response') schema expected_response_schema let(:id) { Fabricate(:group).name } 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 end path '/groups/{id}/members.json' do get 'List group members' do tags 'Groups' operationId 'listGroupMembers' consumes 'application/json' parameter name: :id, in: :path, type: :string, example: 'name', description: "Use group name instead of id" expected_request_schema = nil produces 'application/json' response '200', 'success response' do expected_response_schema = load_spec_schema('group_members_response') schema expected_response_schema let(:id) { Fabricate(:group).name } 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 put 'Add group members' do tags 'Groups' operationId 'addGroupMembers' consumes 'application/json' parameter name: :id, in: :path, type: :integer expected_request_schema = load_spec_schema('group_add_members_request') parameter name: :params, in: :body, schema: expected_request_schema produces 'application/json' response '200', 'success response' do expected_response_schema = load_spec_schema('group_add_members_response') schema expected_response_schema let(:id) { Fabricate(:group).id } let(:user) { Fabricate(:user) } let(:user2) { Fabricate(:user) } let(:usernames) { "#{user.username},#{user2.username}" } let(:params) { { 'usernames' => usernames } } 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 delete 'Remove group members' do tags 'Groups' operationId 'removeGroupMembers' consumes 'application/json' parameter name: :id, in: :path, type: :integer expected_request_schema = load_spec_schema('group_remove_members_request') parameter name: :params, in: :body, schema: expected_request_schema produces 'application/json' response '200', 'success response' do expected_response_schema = load_spec_schema('group_remove_members_response') schema expected_response_schema let(:id) { Fabricate(:group).id } let(:user) { Fabricate(:user) } let(:user2) { Fabricate(:user) } let(:usernames) { "#{user.username},#{user2.username}" } let(:params) { { 'usernames' => usernames } } 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 end path '/groups.json' do get 'List groups' do tags 'Groups' operationId 'listGroups' consumes 'application/json' expected_request_schema = nil produces 'application/json' response '200', 'response' do expected_response_schema = load_spec_schema('groups_list_response') schema expected_response_schema 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 end end