2017-04-05 08:43:03 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
feature 'Group empty states' do
|
2017-04-05 08:43:03 -04:00
|
|
|
let(:group) { create(:group) }
|
|
|
|
let(:user) { create(:group_member, :developer, user: create(:user), group: group ).user }
|
|
|
|
|
|
|
|
before do
|
2017-06-21 19:44:10 -04:00
|
|
|
sign_in(user)
|
2017-04-05 08:43:03 -04:00
|
|
|
end
|
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
[:issue, :merge_request].each do |issuable|
|
|
|
|
issuable_name = issuable.to_s.humanize.downcase
|
|
|
|
project_relation = issuable == :issue ? :project : :source_project
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context "for #{issuable_name}s" do
|
|
|
|
let(:path) { public_send(:"#{issuable}s_group_path", group) }
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context 'group has a project' do
|
|
|
|
let(:project) { create(:project, namespace: group) }
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
before do
|
|
|
|
project.add_master(user)
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context "the project has #{issuable_name}s" do
|
|
|
|
before do
|
|
|
|
create(issuable, project_relation => project)
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
visit path
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
it 'does not display an empty state' do
|
|
|
|
expect(page).not_to have_selector('.empty-state')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "the project has no #{issuable_name}s", :js do
|
|
|
|
before do
|
|
|
|
visit path
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays an empty state' do
|
|
|
|
expect(page).to have_selector('.empty-state')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "shows a new #{issuable_name} button" do
|
|
|
|
within '.empty-state' do
|
|
|
|
expect(page).to have_content("create #{issuable_name}")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it "the new #{issuable_name} button opens a project dropdown" do
|
|
|
|
within '.empty-state' do
|
|
|
|
find('.new-project-item-select-button').click
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
expect(page).to have_selector('.ajax-project-dropdown')
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context 'group without a project' do
|
|
|
|
context 'group has a subgroup', :nested_groups do
|
|
|
|
let(:subgroup) { create(:group, parent: group) }
|
|
|
|
let(:subgroup_project) { create(:project, namespace: subgroup) }
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context "the project has #{issuable_name}s" do
|
|
|
|
before do
|
|
|
|
create(issuable, project_relation => subgroup_project)
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
visit path
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
it 'does not display an empty state' do
|
|
|
|
expect(page).not_to have_selector('.empty-state')
|
|
|
|
end
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
|
2018-02-23 07:10:57 -05:00
|
|
|
context "the project has no #{issuable_name}s" do
|
|
|
|
before do
|
|
|
|
visit path
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays an empty state' do
|
|
|
|
expect(page).to have_selector('.empty-state')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'group has no subgroups' do
|
|
|
|
before do
|
|
|
|
visit path
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays an empty state' do
|
|
|
|
expect(page).to have_selector('.empty-state')
|
|
|
|
end
|
|
|
|
|
|
|
|
it "shows a new #{issuable_name} button" do
|
|
|
|
within '.empty-state' do
|
|
|
|
expect(page).not_to have_link("create #{issuable_name}")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2017-04-05 08:43:03 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|