diff --git a/ee/spec/features/issuables/related_issues_spec.rb b/ee/spec/features/issuables/related_issues_spec.rb index c5f9d76f78bf8f3f11dc3e405a71a03829f2c7d3..8c38b19f8fb8e7fe96974ed91b4bc52d4f11f655 100644 --- a/ee/spec/features/issuables/related_issues_spec.rb +++ b/ee/spec/features/issuables/related_issues_spec.rb @@ -3,45 +3,42 @@ require 'spec_helper' RSpec.describe 'Related issues', :js do - let(:user) { create(:user) } - let(:project) { create(:project_empty_repo, :public) } - let(:project_b) { create(:project_empty_repo, :public) } - let(:project_unauthorized) { create(:project_empty_repo, :public) } - let(:issue_a) { create(:issue, project: project) } - let(:issue_b) { create(:issue, project: project) } - let(:issue_c) { create(:issue, project: project) } - let(:issue_d) { create(:issue, project: project) } - let(:issue_project_b_a) { create(:issue, project: project_b) } - let(:issue_project_unauthorized_a) { create(:issue, project: project_unauthorized) } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project_empty_repo, :public) } + let_it_be(:project_b) { create(:project_empty_repo, :public) } + let_it_be(:project_unauthorized) { create(:project_empty_repo, :public) } + let_it_be(:issue_a) { create(:issue, project: project) } + let_it_be(:issue_b) { create(:issue, project: project) } + let_it_be(:issue_c) { create(:issue, project: project) } + let_it_be(:issue_d) { create(:issue, project: project) } + let_it_be(:issue_project_b_a) { create(:issue, project: project_b) } + let_it_be(:issue_project_unauthorized_a) { create(:issue, project: project_unauthorized) } context 'widget visibility' do + let_it_be(:issue, reload: true) { create(:issue, project: project) } + let_it_be(:project_private) { create(:project_empty_repo, :private) } + let_it_be(:project_internal) { create(:project_empty_repo, :internal) } + let_it_be(:issue_private) { create(:issue, project: project_private) } + let_it_be(:issue_internal) { create(:issue, project: project_internal) } + before do stub_licensed_features(blocked_issues: true) end context 'when not logged in' do it 'does not show widget when internal project' do - project = create :project_empty_repo, :internal - issue = create :issue, project: project - - visit project_issue_path(project, issue) + visit project_issue_path(project_internal, issue_internal) expect(page).not_to have_css('.related-issues-block') end it 'does not show widget when private project' do - project = create :project_empty_repo, :private - issue = create :issue, project: project - - visit project_issue_path(project, issue) + visit project_issue_path(project_private, issue_private) expect(page).not_to have_css('.related-issues-block') end it 'shows widget when public project' do - project = create :project_empty_repo, :public - issue = create :issue, project: project - visit project_issue_path(project, issue) expect(page).to have_css('.related-issues-block') @@ -55,28 +52,19 @@ end it 'shows widget when internal project' do - project = create :project_empty_repo, :internal - issue = create :issue, project: project - - visit project_issue_path(project, issue) + visit project_issue_path(project_internal, issue_internal) expect(page).to have_css('.related-issues-block') expect(page).not_to have_selector('.js-issue-count-badge-add-button') end it 'does not show widget when private project' do - project = create :project_empty_repo, :private - issue = create :issue, project: project - - visit project_issue_path(project, issue) + visit project_issue_path(project_private, issue_private) expect(page).not_to have_css('.related-issues-block') end it 'shows widget when public project' do - project = create :project_empty_repo, :public - issue = create :issue, project: project - visit project_issue_path(project, issue) expect(page).to have_css('.related-issues-block') @@ -84,8 +72,7 @@ end it 'shows widget on their own public issue' do - project = create :project_empty_repo, :public - issue = create :issue, project: project, author: user + issue.update!(author: user) visit project_issue_path(project, issue) @@ -96,36 +83,27 @@ context 'when logged in and a guest' do before do + project_internal.add_guest(user) + project_private.add_guest(user) + project.add_guest(user) gitlab_sign_in(user) end it 'shows widget when internal project' do - project = create :project_empty_repo, :internal - issue = create :issue, project: project - project.add_guest(user) - - visit project_issue_path(project, issue) + visit project_issue_path(project_internal, issue_internal) expect(page).to have_css('.related-issues-block') expect(page).not_to have_selector('.js-issue-count-badge-add-button') end it 'shows widget when private project' do - project = create :project_empty_repo, :private - issue = create :issue, project: project - project.add_guest(user) - - visit project_issue_path(project, issue) + visit project_issue_path(project_private, issue_private) expect(page).to have_css('.related-issues-block') expect(page).not_to have_selector('.js-issue-count-badge-add-button') end it 'shows widget when public project' do - project = create :project_empty_repo, :public - issue = create :issue, project: project - project.add_guest(user) - visit project_issue_path(project, issue) expect(page).to have_css('.related-issues-block') @@ -135,36 +113,28 @@ context 'when logged in and a reporter' do before do + project_internal.add_reporter(user) + project_private.add_reporter(user) + project.add_reporter(user) + gitlab_sign_in(user) end it 'shows widget when internal project' do - project = create :project_empty_repo, :internal - issue = create :issue, project: project - project.add_reporter(user) - - visit project_issue_path(project, issue) + visit project_issue_path(project_internal, issue_internal) expect(page).to have_css('.related-issues-block') expect(page).to have_selector('.js-issue-count-badge-add-button') end it 'shows widget when private project' do - project = create :project_empty_repo, :private - issue = create :issue, project: project - project.add_reporter(user) - - visit project_issue_path(project, issue) + visit project_issue_path(project_private, issue_private) expect(page).to have_css('.related-issues-block') expect(page).to have_selector('.js-issue-count-badge-add-button') end it 'shows widget when public project' do - project = create :project_empty_repo, :public - issue = create :issue, project: project - project.add_reporter(user) - visit project_issue_path(project, issue) expect(page).to have_css('.related-issues-block') @@ -172,9 +142,7 @@ end it 'shows widget on their own public issue' do - project = create :project_empty_repo, :public - issue = create :issue, project: project, author: user - project.add_reporter(user) + issue.update!(author: user) visit project_issue_path(project, issue) @@ -185,8 +153,8 @@ end context 'when user has no permission to manage related issues' do - let!(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } - let!(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } + let_it_be(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } + let_it_be(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } before do stub_licensed_features(blocked_issues: true) @@ -225,8 +193,8 @@ end context 'with related_issues disabled' do - let!(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } - let!(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } + let_it_be(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } + let_it_be(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } before do visit project_issue_path(project, issue_a) @@ -340,8 +308,8 @@ end context 'with existing related issues' do - let!(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } - let!(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } + let_it_be(:issue_link_b) { create :issue_link, source: issue_a, target: issue_b } + let_it_be(:issue_link_c) { create :issue_link, source: issue_a, target: issue_c } before do visit project_issue_path(project, issue_a)