summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Kozono <mkozono@gmail.com>2017-08-31 18:09:17 -0700
committerMichael Kozono <mkozono@gmail.com>2017-09-06 12:07:19 -0700
commitc93e8f246a3ade5e60e770533393ed1a6df91731 (patch)
treec5f19ff9e5fbaab69f826acb61487a42140b4f99
parenta1a4754b0ac464cbe0cbbb3c3fab178d19e8c187 (diff)
downloadgitlab-ce-c93e8f246a3ade5e60e770533393ed1a6df91731.tar.gz
Add post-nested group Share lock integration tests
-rw-r--r--spec/features/projects/members/share_with_group_spec.rb120
1 files changed, 86 insertions, 34 deletions
diff --git a/spec/features/projects/members/share_with_group_spec.rb b/spec/features/projects/members/share_with_group_spec.rb
index 904597c6acf..f71cdab8455 100644
--- a/spec/features/projects/members/share_with_group_spec.rb
+++ b/spec/features/projects/members/share_with_group_spec.rb
@@ -4,50 +4,106 @@ feature 'Project > Members > Share with Group', :js do
include Select2Helper
include ActionView::Helpers::DateHelper
- describe 'Share Lock' do
- let(:master) { create(:user) }
- let(:group) { create(:group) }
- let!(:other_group) { create(:group) }
- let(:project) { create(:project, namespace: group) }
+ let(:master) { create(:user) }
- background do
- project.add_master(master)
- sign_in(master)
+ describe 'Share Lock' do
+ shared_examples 'the project can be shared with groups' do
+ scenario 'the "Share with group" tab exists' do
+ visit project_settings_members_path(project)
+ expect(page).to have_selector('#share-with-group-tab')
+ end
end
- context 'when the group does not have "Share lock" enabled' do
- before do
+ shared_examples 'the project cannot be shared with groups' do
+ scenario 'the "Share with group" tab does not exist' do
visit project_settings_members_path(project)
+ expect(page).to have_selector('#add-member-tab')
+ expect(page).not_to have_selector('#share-with-group-tab')
+ end
+ end
- click_on 'share-with-group-tab'
+ context 'for a project in a root group' do
+ let!(:group_to_share_with) { create(:group) }
+ let(:project) { create(:project, namespace: create(:group)) }
+
+ background do
+ project.add_master(master)
+ sign_in(master)
+ end
- select2 other_group.id, from: '#link_group_id'
- page.find('body').click
- find('.btn-create').trigger('click')
+ context 'when the group has "Share lock" disabled' do
+ it_behaves_like 'the project can be shared with groups'
+
+ scenario 'the project can be shared with another group' do
+ visit project_settings_members_path(project)
+
+ click_on 'share-with-group-tab'
+
+ select2 group_to_share_with.id, from: '#link_group_id'
+ page.find('body').click
+ find('.btn-create').trigger('click')
+
+ page.within('.project-members-groups') do
+ expect(page).to have_content(group_to_share_with.name)
+ end
+ end
end
- scenario 'the group link appears in the existing groups list' do
- page.within('.project-members-groups') do
- expect(page).to have_content(other_group.name)
+ context 'when the group has "Share lock" enabled' do
+ before do
+ project.namespace.update_column(:share_with_group_lock, true)
end
+
+ it_behaves_like 'the project cannot be shared with groups'
end
end
- context 'when the group has "Share lock" enabled' do
- before do
- group.update_column(:share_with_group_lock, true)
- visit project_settings_members_path(project)
+ context 'for a project in a subgroup', :postgresql do
+ let!(:group_to_share_with) { create(:group) }
+ let(:root_group) { create(:group) }
+ let(:subgroup) { create(:group, parent: root_group) }
+ let(:project) { create(:project, namespace: subgroup) }
+
+ background do
+ project.add_master(master)
+ sign_in(master)
end
- scenario 'the "Share with group" tab does not exist' do
- expect(page).to have_selector('#add-member-tab')
- expect(page).not_to have_selector('#share-with-group-tab')
+ context 'when the root_group has "Share lock" disabled' do
+ context 'when the subgroup has "Share lock" disabled' do
+ it_behaves_like 'the project can be shared with groups'
+ end
+
+ context 'when the subgroup has "Share lock" enabled' do
+ before do
+ subgroup.update_column(:share_with_group_lock, true)
+ end
+
+ it_behaves_like 'the project cannot be shared with groups'
+ end
+ end
+
+ context 'when the root_group has "Share lock" enabled' do
+ before do
+ root_group.update_column(:share_with_group_lock, true)
+ end
+
+ context 'when the subgroup has "Share lock" disabled (parent overridden)' do
+ it_behaves_like 'the project can be shared with groups'
+ end
+
+ context 'when the subgroup has "Share lock" enabled' do
+ before do
+ subgroup.update_column(:share_with_group_lock, true)
+ end
+
+ it_behaves_like 'the project cannot be shared with groups'
+ end
end
end
end
describe 'setting an expiration date for a group link' do
- let(:master) { create(:user) }
let(:project) { create(:project) }
let!(:group) { create(:group) }
@@ -83,17 +139,14 @@ feature 'Project > Members > Share with Group', :js do
describe 'the groups dropdown' do
context 'with multiple groups to choose from' do
- let(:master) { create(:user) }
let(:project) { create(:project) }
- let(:group) { create(:group) }
background do
project.add_master(master)
sign_in(master)
- group_two = create(:group)
- group.add_owner(master)
- group_two.add_owner(master)
+ create(:group).add_owner(master)
+ create(:group).add_owner(master)
visit project_settings_members_path(project)
execute_script 'GroupsSelect.PER_PAGE = 1;'
@@ -110,17 +163,16 @@ feature 'Project > Members > Share with Group', :js do
end
context 'for a project in a nested group' do
- let(:master) { create(:user) }
let(:group) { create(:group) }
let!(:nested_group) { create(:group, parent: group) }
- let!(:another_group) { create(:group) }
+ let!(:group_to_share_with) { create(:group) }
let!(:project) { create(:project, namespace: nested_group) }
background do
project.add_master(master)
sign_in(master)
group.add_master(master)
- another_group.add_master(master)
+ group_to_share_with.add_master(master)
end
scenario 'the groups dropdown does not show ancestors', :nested_groups do
@@ -130,7 +182,7 @@ feature 'Project > Members > Share with Group', :js do
click_link 'Search for a group'
page.within '.select2-drop' do
- expect(page).to have_content(another_group.name)
+ expect(page).to have_content(group_to_share_with.name)
expect(page).not_to have_content(group.name)
end
end