diff --git a/frontend/src/app/shared/components/header-project-select/header-project-select.component.html b/frontend/src/app/shared/components/header-project-select/header-project-select.component.html index 98601df70101..d925b5dad291 100644 --- a/frontend/src/app/shared/components/header-project-select/header-project-select.component.html +++ b/frontend/src/app/shared/components/header-project-select/header-project-select.component.html @@ -29,6 +29,7 @@ > diff --git a/spec/features/projects/favorite_spec.rb b/spec/features/projects/favorite_spec.rb index 30e5f606b39a..bc581a19456c 100644 --- a/spec/features/projects/favorite_spec.rb +++ b/spec/features/projects/favorite_spec.rb @@ -30,8 +30,8 @@ require_relative "../../../modules/my_page/spec/support/pages/my/page" RSpec.describe "Favorite projects", :js do - shared_let(:project) { create(:project, name: "My favorite!", enabled_module_names: []) } - shared_let(:other_project) { create(:project, name: "Other project", enabled_module_names: []) } + shared_let(:project) { create(:public_project, name: "My favorite!", enabled_module_names: []) } + shared_let(:other_project) { create(:public_project, name: "Other project", enabled_module_names: []) } shared_let(:user) do create(:user, member_with_permissions: { @@ -44,100 +44,116 @@ let(:my_page) do Pages::My::Page.new end + context "as a user" do + before do + login_as user + end - before do - login_as user - end + it "allows favoriting and unfavoriting projects" do + visit project_path(project) + expect(page).to have_css "a", accessible_name: "Add to favorites" - it "allows favoriting and unfavoriting projects" do - visit project_path(project) - expect(page).to have_selector 'a', accessible_name: "Add to favorites" + click_link_or_button(accessible_name: "Add to favorites") - click_link_or_button(accessible_name: "Add to favorites") + expect(page).to have_css "a", accessible_name: "Remove from favorite" - expect(page).to have_selector 'a', accessible_name: "Remove from favorite" + project.reload + expect(project).to be_favored_by(user) - project.reload - expect(project).to be_favored_by(user) + projects_page.visit! + projects_page.open_filters + projects_page.filter_by_favored "yes" - projects_page.visit! - projects_page.open_filters - projects_page.filter_by_favored "yes" + expect(page).to have_text "My favorite!" - expect(page).to have_text 'My favorite!' + projects_page.visit! + projects_page.open_filters + projects_page.filter_by_favored "no" - projects_page.visit! - projects_page.open_filters - projects_page.filter_by_favored "no" + expect(page).to have_no_text "My favorite!" + + visit home_path - expect(page).to have_no_text 'My favorite!' + expect(page).to have_text "Favorite projects" + expect(page).to have_test_selector "favorite-project", text: "My favorite!" - visit home_path + retry_block do + top_menu.toggle unless top_menu.open? + top_menu.expect_open - expect(page).to have_text 'Favorite projects' - expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' + # projects are displayed initially + top_menu.expect_result project.name + top_menu.expect_result other_project.name + end - retry_block do - top_menu.toggle unless top_menu.open? - top_menu.expect_open + top_menu.switch_mode "Favorites" - # projects are displayed initially top_menu.expect_result project.name - top_menu.expect_result other_project.name + top_menu.expect_no_result other_project.name end - top_menu.switch_mode "Favorites" + context "when project is favored" do + before do + project.add_favoring_user(user) + other_project.add_favoring_user(user) + other_project.update! active: false + end - top_menu.expect_result project.name - top_menu.expect_no_result other_project.name - end + it "does not show archived projects" do + visit home_path - context "when projct is favored" do - before do - project.add_favoring_user(user) - other_project.add_favoring_user(user) - other_project.update! active: false - end + expect(page).to have_text "Favorite projects" + expect(page).to have_test_selector "favorite-project", text: "My favorite!" + expect(page).to have_no_text "Other project" - it "does not show archived projects" do - visit home_path + my_page.visit! + my_page.add_widget(1, 1, :within, "Favorite projects") + expect(page).to have_text "My favorite!" + end + end - expect(page).to have_text 'Favorite projects' - expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' - expect(page).to have_no_text 'Other project' + context "when favoriting only one subproject" do + before do + project.update! parent: other_project + project.add_favoring_user(user) + end - my_page.visit! - my_page.add_widget(1, 1, :within, "Favorite projects") - expect(page).to have_text 'My favorite!' - end - end + it "still shows up in top menu (Regression #54729)" do + visit home_path - context "favoriting only one subproject" do - before do - project.update! parent: other_project - project.add_favoring_user(user) - end + expect(page).to have_text "Favorite projects" + expect(page).to have_test_selector "favorite-project", text: "My favorite!" - it "still shows up in top menu (Regression #54729)" do - visit home_path + retry_block do + top_menu.toggle unless top_menu.open? + top_menu.expect_open - expect(page).to have_text 'Favorite projects' - expect(page).to have_test_selector 'favorite-project', text: 'My favorite!' + # projects are displayed initially + top_menu.expect_result project.name + top_menu.expect_result other_project.name + end - retry_block do - top_menu.toggle unless top_menu.open? - top_menu.expect_open + top_menu.switch_mode "Favorites" - # projects are displayed initially top_menu.expect_result project.name + # Parent is also shown top_menu.expect_result other_project.name end + end + end - top_menu.switch_mode "Favorites" + context "as an Anonymous User with not login required", with_settings: { login_required: false } do + it "does not shows favored projects" do + visit project_path(project) - top_menu.expect_result project.name - # Parent is also shown - top_menu.expect_result other_project.name + retry_block do + top_menu.toggle unless top_menu.open? + top_menu.expect_open + + within(".op-project-list-modal--header") do + expect(page).to have_no_css("[data-test-selector=\"spot-toggle--option\"]", text: "Favorites") + end + end end end end