diff options
Diffstat (limited to 'spec/features/projects/issues')
9 files changed, 131 insertions, 8 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..8d5e99d7e2b --- /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' + +RSpec.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 diff --git a/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb b/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb index d9a72f2d5c5..f871ca60596 100644 --- a/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_paginates_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User paginates issue designs', :js do +RSpec.describe 'User paginates issue designs', :js do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb b/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb index 2238e86a47f..902a84afc83 100644 --- a/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb +++ b/spec/features/projects/issues/design_management/user_permissions_upload_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User design permissions', :js do +RSpec.describe 'User design permissions', :js do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb index d160ab95a65..66b449a9de5 100644 --- a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User uploads new design', :js do +RSpec.describe 'User uploads new design', :js do include DesignManagementTestHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_design_images_spec.rb b/spec/features/projects/issues/design_management/user_views_design_images_spec.rb index 3d0f4df55c4..4a4c33cb881 100644 --- a/spec/features/projects/issues/design_management/user_views_design_images_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_design_images_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'Users views raw design image files' do +RSpec.describe 'Users views raw design image files' do include DesignManagementTestHelpers let_it_be(:project) { create(:project, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_design_spec.rb b/spec/features/projects/issues/design_management/user_views_design_spec.rb index 707049b0068..527442d5339 100644 --- a/spec/features/projects/issues/design_management/user_views_design_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_design_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User views issue designs', :js do +RSpec.describe 'User views issue designs', :js do include DesignManagementTestHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_designs_spec.rb b/spec/features/projects/issues/design_management/user_views_designs_spec.rb index a4fb7456922..d371ae1aad7 100644 --- a/spec/features/projects/issues/design_management/user_views_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_designs_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User views issue designs', :js do +RSpec.describe 'User views issue designs', :js do include DesignManagementTestHelpers let_it_be(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb b/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb index a9e4aa899a7..5bc1271309c 100644 --- a/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb +++ b/spec/features/projects/issues/design_management/user_views_designs_with_svg_xss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'User views an SVG design that contains XSS', :js do +RSpec.describe 'User views an SVG design that contains XSS', :js do include DesignManagementTestHelpers let(:project) { create(:project_empty_repo, :public) } diff --git a/spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb b/spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb index 6c8f4b51ea0..6feefff9207 100644 --- a/spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb +++ b/spec/features/projects/issues/viewing_issues_with_external_authorization_enabled_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe 'viewing an issue with cross project references' do +RSpec.describe 'viewing an issue with cross project references' do include ExternalAuthorizationServiceHelpers include Gitlab::Routing.url_helpers |