diff options
Diffstat (limited to 'spec/helpers/groups/group_members_helper_spec.rb')
-rw-r--r-- | spec/helpers/groups/group_members_helper_spec.rb | 108 |
1 files changed, 72 insertions, 36 deletions
diff --git a/spec/helpers/groups/group_members_helper_spec.rb b/spec/helpers/groups/group_members_helper_spec.rb index 99efc7963e6..c3f1509fbc8 100644 --- a/spec/helpers/groups/group_members_helper_spec.rb +++ b/spec/helpers/groups/group_members_helper_spec.rb @@ -23,83 +23,119 @@ RSpec.describe Groups::GroupMembersHelper do end end - describe '#group_group_links_data_json' do - include_context 'group_group_link' + describe '#group_members_list_data_json' do + let(:group_members) { create_list(:group_member, 2, group: group, created_by: current_user) } - it 'matches json schema' do - json = helper.group_group_links_data_json(shared_group.shared_with_group_links) + let(:pagination) { {} } + let(:collection) { group_members } + let(:presented_members) { present_members(collection) } - expect(json).to match_schema('group_link/group_group_links') - end - end + subject { Gitlab::Json.parse(helper.group_members_list_data_json(group, presented_members, pagination)) } - describe '#members_data_json' do shared_examples 'members.json' do - it 'matches json schema' do - json = helper.members_data_json(group, present_members([group_member])) - - expect(json).to match_schema('members') + it 'returns `members` property that matches json schema' do + expect(subject['members'].to_json).to match_schema('members') end end - context 'for a group member' do - let(:group_member) { create(:group_member, group: group, created_by: current_user) } + before do + allow(helper).to receive(:group_group_member_path).with(group, ':id').and_return('/groups/foo-bar/-/group_members/:id') + allow(helper).to receive(:can?).with(current_user, :admin_group_member, group).and_return(true) + end + + it 'returns expected json' do + expected = { + member_path: '/groups/foo-bar/-/group_members/:id', + source_id: group.id, + can_manage_members: true + }.as_json + expect(subject).to include(expected) + end + + context 'for a group member' do it_behaves_like 'members.json' context 'with user status set' do let(:user) { create(:user) } let!(:status) { create(:user_status, user: user) } - let(:group_member) { create(:group_member, group: group, user: user, created_by: current_user) } + let(:group_members) { [create(:group_member, group: group, user: user, created_by: current_user)] } it_behaves_like 'members.json' end end context 'for an invited group member' do - let(:group_member) { create(:group_member, :invited, group: group, created_by: current_user) } + let(:group_members) { create_list(:group_member, 2, :invited, group: group, created_by: current_user) } it_behaves_like 'members.json' end context 'for an access request' do - let(:group_member) { create(:group_member, :access_request, group: group, created_by: current_user) } + let(:group_members) { create_list(:group_member, 2, :access_request, group: group, created_by: current_user) } it_behaves_like 'members.json' end - end - - describe '#group_members_list_data_attributes' do - let(:group_member) { create(:group_member, group: group, created_by: current_user) } - before do - allow(helper).to receive(:group_group_member_path).with(group, ':id').and_return('/groups/foo-bar/-/group_members/:id') - allow(helper).to receive(:can?).with(current_user, :admin_group_member, group).and_return(true) + context 'when pagination is not available' do + it 'sets `pagination` attribute to expected json' do + expected = { + current_page: nil, + per_page: nil, + total_items: 2, + param_name: nil, + params: {} + }.as_json + + expect(subject['pagination']).to include(expected) + end end - it 'returns expected hash' do - expect(helper.group_members_list_data_attributes(group, present_members([group_member]))).to include({ - members: helper.members_data_json(group, present_members([group_member])), - member_path: '/groups/foo-bar/-/group_members/:id', - source_id: group.id, - can_manage_members: 'true' - }) + context 'when pagination is available' do + let(:collection) { Kaminari.paginate_array(group_members).page(1).per(1) } + let(:pagination) { { param_name: :page, params: { search_groups: nil } } } + + it 'sets `pagination` attribute to expected json' do + expected = { + current_page: 1, + per_page: 1, + total_items: 2, + param_name: :page, + params: { search_groups: nil } + }.as_json + + expect(subject['pagination']).to include(expected) + end end end - describe '#group_group_links_list_data_attributes' do + describe '#group_group_links_list_data_json' do include_context 'group_group_link' + subject { Gitlab::Json.parse(helper.group_group_links_list_data_json(shared_group)) } + before do allow(helper).to receive(:group_group_link_path).with(shared_group, ':id').and_return('/groups/foo-bar/-/group_links/:id') end - it 'returns expected hash' do - expect(helper.group_group_links_list_data_attributes(shared_group)).to include({ - members: helper.group_group_links_data_json(shared_group.shared_with_group_links), + it 'returns expected json' do + expected = { + pagination: { + current_page: nil, + per_page: nil, + total_items: 1, + param_name: nil, + params: {} + }, member_path: '/groups/foo-bar/-/group_links/:id', source_id: shared_group.id - }) + }.as_json + + expect(subject).to include(expected) + end + + it 'returns `members` property that matches json schema' do + expect(subject['members'].to_json).to match_schema('group_link/group_group_links') end end end |