From c56f7876028e7eb3b9a116d1dc26ae229f8b2ca0 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Mon, 26 Jun 2017 16:43:14 +0200 Subject: Rename group member specs for consistent naming Signed-off-by: Dmitriy Zaporozhets --- spec/features/groups/members/list_members_spec.rb | 105 +++++++++++++++++++++ spec/features/groups/members/list_spec.rb | 105 --------------------- .../groups/members/manage_access_requests_spec.rb | 47 +++++++++ spec/features/groups/members/manage_members.rb | 4 + .../members/owner_manages_access_requests_spec.rb | 47 --------- .../features/groups/members/request_access_spec.rb | 78 +++++++++++++++ .../groups/members/requests_access_spec.rb | 78 --------------- spec/features/groups/members/sort_members_spec.rb | 98 +++++++++++++++++++ spec/features/groups/members/sorting_spec.rb | 98 ------------------- 9 files changed, 332 insertions(+), 328 deletions(-) create mode 100644 spec/features/groups/members/list_members_spec.rb delete mode 100644 spec/features/groups/members/list_spec.rb create mode 100644 spec/features/groups/members/manage_access_requests_spec.rb create mode 100644 spec/features/groups/members/manage_members.rb delete mode 100644 spec/features/groups/members/owner_manages_access_requests_spec.rb create mode 100644 spec/features/groups/members/request_access_spec.rb delete mode 100644 spec/features/groups/members/requests_access_spec.rb create mode 100644 spec/features/groups/members/sort_members_spec.rb delete mode 100644 spec/features/groups/members/sorting_spec.rb diff --git a/spec/features/groups/members/list_members_spec.rb b/spec/features/groups/members/list_members_spec.rb new file mode 100644 index 00000000000..69cbeb4a35a --- /dev/null +++ b/spec/features/groups/members/list_members_spec.rb @@ -0,0 +1,105 @@ +require 'spec_helper' + +feature 'Groups > Members > List members', feature: true do + include Select2Helper + + let(:user1) { create(:user, name: 'John Doe') } + let(:user2) { create(:user, name: 'Mary Jane') } + let(:group) { create(:group) } + let(:nested_group) { create(:group, parent: group) } + + background do + gitlab_sign_in(user1) + end + + scenario 'show members from current group and parent', :nested_groups do + group.add_developer(user1) + nested_group.add_developer(user2) + + visit group_group_members_path(nested_group) + + expect(first_row.text).to include(user1.name) + expect(second_row.text).to include(user2.name) + end + + scenario 'show user once if member of both current group and parent', :nested_groups do + group.add_developer(user1) + nested_group.add_developer(user1) + + visit group_group_members_path(nested_group) + + expect(first_row.text).to include(user1.name) + expect(second_row).to be_blank + end + + scenario 'update user to owner level', :js do + group.add_owner(user1) + group.add_developer(user2) + + visit group_group_members_path(group) + + page.within(second_row) do + click_button('Developer') + click_link('Owner') + + expect(page).to have_button('Owner') + end + end + + scenario 'add user to group', :js do + group.add_owner(user1) + + visit group_group_members_path(group) + + add_user(user2.id, 'Reporter') + + page.within(second_row) do + expect(page).to have_content(user2.name) + expect(page).to have_button('Reporter') + end + end + + scenario 'add yourself to group when already an owner', :js do + group.add_owner(user1) + + visit group_group_members_path(group) + + add_user(user1.id, 'Reporter') + + page.within(first_row) do + expect(page).to have_content(user1.name) + expect(page).to have_content('Owner') + end + end + + scenario 'invite user to group', :js do + group.add_owner(user1) + + visit group_group_members_path(group) + + add_user('test@example.com', 'Reporter') + + page.within(second_row) do + expect(page).to have_content('test@example.com') + expect(page).to have_content('Invited') + expect(page).to have_button('Reporter') + end + end + + def first_row + page.all('ul.content-list > li')[0] + end + + def second_row + page.all('ul.content-list > li')[1] + end + + def add_user(id, role) + page.within ".users-group-form" do + select2(id, from: "#user_ids", multiple: true) + select(role, from: "access_level") + end + + click_button "Add to group" + end +end diff --git a/spec/features/groups/members/list_spec.rb b/spec/features/groups/members/list_spec.rb deleted file mode 100644 index 5d00ed30c83..00000000000 --- a/spec/features/groups/members/list_spec.rb +++ /dev/null @@ -1,105 +0,0 @@ -require 'spec_helper' - -feature 'Groups members list', feature: true do - include Select2Helper - - let(:user1) { create(:user, name: 'John Doe') } - let(:user2) { create(:user, name: 'Mary Jane') } - let(:group) { create(:group) } - let(:nested_group) { create(:group, parent: group) } - - background do - gitlab_sign_in(user1) - end - - scenario 'show members from current group and parent', :nested_groups do - group.add_developer(user1) - nested_group.add_developer(user2) - - visit group_group_members_path(nested_group) - - expect(first_row.text).to include(user1.name) - expect(second_row.text).to include(user2.name) - end - - scenario 'show user once if member of both current group and parent', :nested_groups do - group.add_developer(user1) - nested_group.add_developer(user1) - - visit group_group_members_path(nested_group) - - expect(first_row.text).to include(user1.name) - expect(second_row).to be_blank - end - - scenario 'update user to owner level', :js do - group.add_owner(user1) - group.add_developer(user2) - - visit group_group_members_path(group) - - page.within(second_row) do - click_button('Developer') - click_link('Owner') - - expect(page).to have_button('Owner') - end - end - - scenario 'add user to group', :js do - group.add_owner(user1) - - visit group_group_members_path(group) - - add_user(user2.id, 'Reporter') - - page.within(second_row) do - expect(page).to have_content(user2.name) - expect(page).to have_button('Reporter') - end - end - - scenario 'add yourself to group when already an owner', :js do - group.add_owner(user1) - - visit group_group_members_path(group) - - add_user(user1.id, 'Reporter') - - page.within(first_row) do - expect(page).to have_content(user1.name) - expect(page).to have_content('Owner') - end - end - - scenario 'invite user to group', :js do - group.add_owner(user1) - - visit group_group_members_path(group) - - add_user('test@example.com', 'Reporter') - - page.within(second_row) do - expect(page).to have_content('test@example.com') - expect(page).to have_content('Invited') - expect(page).to have_button('Reporter') - end - end - - def first_row - page.all('ul.content-list > li')[0] - end - - def second_row - page.all('ul.content-list > li')[1] - end - - def add_user(id, role) - page.within ".users-group-form" do - select2(id, from: "#user_ids", multiple: true) - select(role, from: "access_level") - end - - click_button "Add to group" - end -end diff --git a/spec/features/groups/members/manage_access_requests_spec.rb b/spec/features/groups/members/manage_access_requests_spec.rb new file mode 100644 index 00000000000..f84d8594c65 --- /dev/null +++ b/spec/features/groups/members/manage_access_requests_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' + +feature 'Groups > Members > Manage access requests', feature: true do + let(:user) { create(:user) } + let(:owner) { create(:user) } + let(:group) { create(:group, :public, :access_requestable) } + + background do + group.request_access(user) + group.add_owner(owner) + gitlab_sign_in(owner) + end + + scenario 'owner can see access requests' do + visit group_group_members_path(group) + + expect_visible_access_request(group, user) + end + + scenario 'owner can grant access' do + visit group_group_members_path(group) + + expect_visible_access_request(group, user) + + perform_enqueued_jobs { click_on 'Grant access' } + + expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email] + expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was granted" + end + + scenario 'owner can deny access' do + visit group_group_members_path(group) + + expect_visible_access_request(group, user) + + perform_enqueued_jobs { click_on 'Deny access' } + + expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email] + expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was denied" + end + + def expect_visible_access_request(group, user) + expect(group.requesters.exists?(user_id: user)).to be_truthy + expect(page).to have_content "Users requesting access to #{group.name} 1" + expect(page).to have_content user.name + end +end diff --git a/spec/features/groups/members/manage_members.rb b/spec/features/groups/members/manage_members.rb new file mode 100644 index 00000000000..ff0a09709e5 --- /dev/null +++ b/spec/features/groups/members/manage_members.rb @@ -0,0 +1,4 @@ +require 'spec_helper' + +feature 'Groups > Members > Manage members', feature: true do +end diff --git a/spec/features/groups/members/owner_manages_access_requests_spec.rb b/spec/features/groups/members/owner_manages_access_requests_spec.rb deleted file mode 100644 index db656d244c0..00000000000 --- a/spec/features/groups/members/owner_manages_access_requests_spec.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'spec_helper' - -feature 'Groups > Members > Owner manages access requests', feature: true do - let(:user) { create(:user) } - let(:owner) { create(:user) } - let(:group) { create(:group, :public, :access_requestable) } - - background do - group.request_access(user) - group.add_owner(owner) - gitlab_sign_in(owner) - end - - scenario 'owner can see access requests' do - visit group_group_members_path(group) - - expect_visible_access_request(group, user) - end - - scenario 'owner can grant access' do - visit group_group_members_path(group) - - expect_visible_access_request(group, user) - - perform_enqueued_jobs { click_on 'Grant access' } - - expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email] - expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was granted" - end - - scenario 'owner can deny access' do - visit group_group_members_path(group) - - expect_visible_access_request(group, user) - - perform_enqueued_jobs { click_on 'Deny access' } - - expect(ActionMailer::Base.deliveries.last.to).to eq [user.notification_email] - expect(ActionMailer::Base.deliveries.last.subject).to match "Access to the #{group.name} group was denied" - end - - def expect_visible_access_request(group, user) - expect(group.requesters.exists?(user_id: user)).to be_truthy - expect(page).to have_content "Users requesting access to #{group.name} 1" - expect(page).to have_content user.name - end -end diff --git a/spec/features/groups/members/request_access_spec.rb b/spec/features/groups/members/request_access_spec.rb new file mode 100644 index 00000000000..41c31b62e18 --- /dev/null +++ b/spec/features/groups/members/request_access_spec.rb @@ -0,0 +1,78 @@ +require 'spec_helper' + +feature 'Groups > Members > Request access', feature: true do + let(:user) { create(:user) } + let(:owner) { create(:user) } + let(:group) { create(:group, :public, :access_requestable) } + let!(:project) { create(:project, :private, namespace: group) } + + background do + group.add_owner(owner) + gitlab_sign_in(user) + visit group_path(group) + end + + scenario 'request access feature is disabled' do + group.update_attributes(request_access_enabled: false) + visit group_path(group) + + expect(page).not_to have_content 'Request Access' + end + + scenario 'user can request access to a group' do + perform_enqueued_jobs { click_link 'Request Access' } + + expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email] + expect(ActionMailer::Base.deliveries.last.subject).to match "Request to join the #{group.name} group" + + expect(group.requesters.exists?(user_id: user)).to be_truthy + expect(page).to have_content 'Your request for access has been queued for review.' + + expect(page).to have_content 'Withdraw Access Request' + expect(page).not_to have_content 'Leave group' + end + + scenario 'user does not see private projects' do + perform_enqueued_jobs { click_link 'Request Access' } + + expect(page).not_to have_content project.name + end + + scenario 'user does not see group in the Dashboard > Groups page' do + perform_enqueued_jobs { click_link 'Request Access' } + + visit dashboard_groups_path + + expect(page).not_to have_content group.name + end + + scenario 'user is not listed in the group members page' do + click_link 'Request Access' + + expect(group.requesters.exists?(user_id: user)).to be_truthy + + click_link 'Members' + + page.within('.content') do + expect(page).not_to have_content(user.name) + end + end + + scenario 'user can withdraw its request for access' do + click_link 'Request Access' + + expect(group.requesters.exists?(user_id: user)).to be_truthy + + click_link 'Withdraw Access Request' + + expect(group.requesters.exists?(user_id: user)).to be_falsey + expect(page).to have_content 'Your access request to the group has been withdrawn.' + end + + scenario 'member does not see the request access button' do + group.add_owner(user) + visit group_path(group) + + expect(page).not_to have_content 'Request Access' + end +end diff --git a/spec/features/groups/members/requests_access_spec.rb b/spec/features/groups/members/requests_access_spec.rb deleted file mode 100644 index eaf9d163896..00000000000 --- a/spec/features/groups/members/requests_access_spec.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'spec_helper' - -feature 'Groups > Members > Requests access', feature: true do - let(:user) { create(:user) } - let(:owner) { create(:user) } - let(:group) { create(:group, :public, :access_requestable) } - let!(:project) { create(:project, :private, namespace: group) } - - background do - group.add_owner(owner) - gitlab_sign_in(user) - visit group_path(group) - end - - scenario 'request access feature is disabled' do - group.update_attributes(request_access_enabled: false) - visit group_path(group) - - expect(page).not_to have_content 'Request Access' - end - - scenario 'user can request access to a group' do - perform_enqueued_jobs { click_link 'Request Access' } - - expect(ActionMailer::Base.deliveries.last.to).to eq [owner.notification_email] - expect(ActionMailer::Base.deliveries.last.subject).to match "Request to join the #{group.name} group" - - expect(group.requesters.exists?(user_id: user)).to be_truthy - expect(page).to have_content 'Your request for access has been queued for review.' - - expect(page).to have_content 'Withdraw Access Request' - expect(page).not_to have_content 'Leave group' - end - - scenario 'user does not see private projects' do - perform_enqueued_jobs { click_link 'Request Access' } - - expect(page).not_to have_content project.name - end - - scenario 'user does not see group in the Dashboard > Groups page' do - perform_enqueued_jobs { click_link 'Request Access' } - - visit dashboard_groups_path - - expect(page).not_to have_content group.name - end - - scenario 'user is not listed in the group members page' do - click_link 'Request Access' - - expect(group.requesters.exists?(user_id: user)).to be_truthy - - click_link 'Members' - - page.within('.content') do - expect(page).not_to have_content(user.name) - end - end - - scenario 'user can withdraw its request for access' do - click_link 'Request Access' - - expect(group.requesters.exists?(user_id: user)).to be_truthy - - click_link 'Withdraw Access Request' - - expect(group.requesters.exists?(user_id: user)).to be_falsey - expect(page).to have_content 'Your access request to the group has been withdrawn.' - end - - scenario 'member does not see the request access button' do - group.add_owner(user) - visit group_path(group) - - expect(page).not_to have_content 'Request Access' - end -end diff --git a/spec/features/groups/members/sort_members_spec.rb b/spec/features/groups/members/sort_members_spec.rb new file mode 100644 index 00000000000..8ee61953844 --- /dev/null +++ b/spec/features/groups/members/sort_members_spec.rb @@ -0,0 +1,98 @@ +require 'spec_helper' + +feature 'Groups > Members > Sort members', feature: true do + let(:owner) { create(:user, name: 'John Doe') } + let(:developer) { create(:user, name: 'Mary Jane', last_sign_in_at: 5.days.ago) } + let(:group) { create(:group) } + + background do + create(:group_member, :owner, user: owner, group: group, created_at: 5.days.ago) + create(:group_member, :developer, user: developer, group: group, created_at: 3.days.ago) + + gitlab_sign_in(owner) + end + + scenario 'sorts alphabetically by default' do + visit_members_list(sort: nil) + + expect(first_member).to include(owner.name) + expect(second_member).to include(developer.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending') + end + + scenario 'sorts by access level ascending' do + visit_members_list(sort: :access_level_asc) + + expect(first_member).to include(developer.name) + expect(second_member).to include(owner.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, ascending') + end + + scenario 'sorts by access level descending' do + visit_members_list(sort: :access_level_desc) + + expect(first_member).to include(owner.name) + expect(second_member).to include(developer.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, descending') + end + + scenario 'sorts by last joined' do + visit_members_list(sort: :last_joined) + + expect(first_member).to include(developer.name) + expect(second_member).to include(owner.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Last joined') + end + + scenario 'sorts by oldest joined' do + visit_members_list(sort: :oldest_joined) + + expect(first_member).to include(owner.name) + expect(second_member).to include(developer.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Oldest joined') + end + + scenario 'sorts by name ascending' do + visit_members_list(sort: :name_asc) + + expect(first_member).to include(owner.name) + expect(second_member).to include(developer.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending') + end + + scenario 'sorts by name descending' do + visit_members_list(sort: :name_desc) + + expect(first_member).to include(developer.name) + expect(second_member).to include(owner.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, descending') + end + + scenario 'sorts by recent sign in', :redis do + visit_members_list(sort: :recent_sign_in) + + expect(first_member).to include(owner.name) + expect(second_member).to include(developer.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Recent sign in') + end + + scenario 'sorts by oldest sign in', :redis do + visit_members_list(sort: :oldest_sign_in) + + expect(first_member).to include(developer.name) + expect(second_member).to include(owner.name) + expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Oldest sign in') + end + + def visit_members_list(sort:) + visit group_group_members_path(group.to_param, sort: sort) + end + + def first_member + page.all('ul.content-list > li').first.text + end + + def second_member + page.all('ul.content-list > li').last.text + end +end diff --git a/spec/features/groups/members/sorting_spec.rb b/spec/features/groups/members/sorting_spec.rb deleted file mode 100644 index 719fa0b40b8..00000000000 --- a/spec/features/groups/members/sorting_spec.rb +++ /dev/null @@ -1,98 +0,0 @@ -require 'spec_helper' - -feature 'Groups > Members > Sorting', feature: true do - let(:owner) { create(:user, name: 'John Doe') } - let(:developer) { create(:user, name: 'Mary Jane', last_sign_in_at: 5.days.ago) } - let(:group) { create(:group) } - - background do - create(:group_member, :owner, user: owner, group: group, created_at: 5.days.ago) - create(:group_member, :developer, user: developer, group: group, created_at: 3.days.ago) - - gitlab_sign_in(owner) - end - - scenario 'sorts alphabetically by default' do - visit_members_list(sort: nil) - - expect(first_member).to include(owner.name) - expect(second_member).to include(developer.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending') - end - - scenario 'sorts by access level ascending' do - visit_members_list(sort: :access_level_asc) - - expect(first_member).to include(developer.name) - expect(second_member).to include(owner.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, ascending') - end - - scenario 'sorts by access level descending' do - visit_members_list(sort: :access_level_desc) - - expect(first_member).to include(owner.name) - expect(second_member).to include(developer.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Access level, descending') - end - - scenario 'sorts by last joined' do - visit_members_list(sort: :last_joined) - - expect(first_member).to include(developer.name) - expect(second_member).to include(owner.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Last joined') - end - - scenario 'sorts by oldest joined' do - visit_members_list(sort: :oldest_joined) - - expect(first_member).to include(owner.name) - expect(second_member).to include(developer.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Oldest joined') - end - - scenario 'sorts by name ascending' do - visit_members_list(sort: :name_asc) - - expect(first_member).to include(owner.name) - expect(second_member).to include(developer.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, ascending') - end - - scenario 'sorts by name descending' do - visit_members_list(sort: :name_desc) - - expect(first_member).to include(developer.name) - expect(second_member).to include(owner.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Name, descending') - end - - scenario 'sorts by recent sign in', :redis do - visit_members_list(sort: :recent_sign_in) - - expect(first_member).to include(owner.name) - expect(second_member).to include(developer.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Recent sign in') - end - - scenario 'sorts by oldest sign in', :redis do - visit_members_list(sort: :oldest_sign_in) - - expect(first_member).to include(developer.name) - expect(second_member).to include(owner.name) - expect(page).to have_css('.member-sort-dropdown .dropdown-toggle-text', text: 'Oldest sign in') - end - - def visit_members_list(sort:) - visit group_group_members_path(group.to_param, sort: sort) - end - - def first_member - page.all('ul.content-list > li').first.text - end - - def second_member - page.all('ul.content-list > li').last.text - end -end -- cgit v1.2.1