diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-28 21:08:22 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-28 21:08:22 +0000 |
commit | d7b136d5471b5925ff784f78b9c11ec63c2a3549 (patch) | |
tree | 6c4417fb367459613e84a2d34625abccd13e6405 /spec/features/projects/issues | |
parent | 1ec60cf53bc498b12c597ff0d91434a1bdb7cba9 (diff) | |
download | gitlab-ce-d7b136d5471b5925ff784f78b9c11ec63c2a3549.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/features/projects/issues')
-rw-r--r-- | spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb b/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb new file mode 100644 index 00000000000..bb9f902833d --- /dev/null +++ b/spec/features/projects/issues/design_management/user_links_to_designs_in_issue_spec.rb @@ -0,0 +1,123 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'viewing issues with design references' do + include DesignManagementTestHelpers + + let_it_be(:public_project) { create(:project_empty_repo, :public) } + let_it_be(:private_project) { create(:project_empty_repo) } + + let(:user) { create(:user) } + let(:design_issue) { create(:issue, project: project) } + let(:design_a) { create(:design, :with_file, issue: design_issue) } + let(:design_b) { create(:design, :with_file, issue: design_issue) } + let(:issue_ref) { design_issue.to_reference(public_project) } + let(:design_ref_a) { design_a.to_reference(public_project) } + let(:design_ref_b) { design_b.to_reference(public_project) } + let(:design_tab_ref) { "#{issue_ref} (designs)" } + + let(:description) do + <<~MD + The designs I mentioned: + + * #{url_for_designs(design_issue)} + * #{url_for_design(design_a)} + * #{url_for_design(design_b)} + MD + end + + def visit_page_with_design_references + public_issue = create(:issue, project: public_project, description: description) + visit project_issue_path(public_issue.project, public_issue) + end + + shared_examples 'successful use of design link references' do + before do + enable_design_management + end + + it 'shows the issue description and design references', :aggregate_failures do + visit_page_with_design_references + + expect(page).to have_text('The designs I mentioned') + expect(page).to have_link(design_tab_ref) + expect(page).to have_link(design_ref_a) + expect(page).to have_link(design_ref_b) + end + end + + context 'the user has access to a public project' do + let(:project) { public_project } + + it_behaves_like 'successful use of design link references' + end + + context 'the user does not have access to a private project' do + let(:project) { private_project } + + it 'redacts inaccessible design references', :aggregate_failures do + visit_page_with_design_references + + expect(page).to have_text('The designs I mentioned') + expect(page).not_to have_link(issue_ref) + expect(page).not_to have_link(design_tab_ref) + expect(page).not_to have_link(design_ref_a) + expect(page).not_to have_link(design_ref_b) + end + end + + context 'the user has access to a private project' do + let(:project) { private_project } + + before do + project.add_developer(user) + sign_in(user) + end + + it_behaves_like 'successful use of design link references' + + context 'design management is entirely disabled' do + it 'processes design links as issue references', :aggregate_failures do + enable_design_management(false) + + visit_page_with_design_references + + expect(page).to have_text('The designs I mentioned') + expect(page).to have_link(issue_ref) + expect(page).not_to have_link(design_tab_ref) + expect(page).not_to have_link(design_ref_a) + expect(page).not_to have_link(design_ref_b) + end + end + + context 'design management is enabled, but the filter is disabled globally' do + before do + enable_design_management + stub_feature_flags( + Banzai::Filter::DesignReferenceFilter::FEATURE_FLAG => false + ) + end + + it 'processes design tab links successfully, and design references as issue references', :aggregate_failures do + visit_page_with_design_references + + expect(page).to have_text('The designs I mentioned') + expect(page).to have_link(design_tab_ref) + expect(page).to have_link(issue_ref) + expect(page).not_to have_link(design_ref_a) + expect(page).not_to have_link(design_ref_b) + end + end + + context 'design management is enabled, and the filter is enabled for the current project' do + before do + stub_feature_flags( + Banzai::Filter::DesignReferenceFilter::FEATURE_FLAG => public_project + ) + end + + it_behaves_like 'successful use of design link references' + end + end +end |