summaryrefslogtreecommitdiff
path: root/spec/helpers/groups/group_members_helper_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/helpers/groups/group_members_helper_spec.rb')
-rw-r--r--spec/helpers/groups/group_members_helper_spec.rb108
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