From 06e716073e5a262a23b604351a2ffc587bef4841 Mon Sep 17 00:00:00 2001 From: Anas Shahid Date: Fri, 17 Oct 2025 01:11:40 -0400 Subject: [PATCH 1/3] Remove personal_homepage feature flag The personal_homepage feature flag has been fully rolled out and is now the default behavior for all users. This change removes the feature flag definition and all related checks throughout the codebase. The personal homepage with flipped dashboard mapping is now always enabled for all users (except self-managed admins with no projects, who follow a different onboarding flow). Changes include: - Removed feature flag definition file - Updated User model to always use flipped dashboard mapping - Updated controllers (Root, Dashboard, Users) to always render homepage - Updated helpers and sidebars to always include homepage functionality - Updated JavaScript to always initialize homepage - Removed all feature flag stubs from specs - Updated QA tests to remove feature flag usage Changelog: changed --- app/assets/javascripts/pages/root/index.js | 18 +--- app/controllers/dashboard_controller.rb | 10 +- app/controllers/root_controller.rb | 14 +-- app/controllers/users_controller.rb | 3 +- app/helpers/preferences_helper.rb | 2 - app/models/user.rb | 2 - .../feature_flags/beta/personal_homepage.yml | 10 -- .../dashboard/homepage/homepage_spec.rb | 1 - ee/spec/models/ee/user_spec.rb | 4 - lib/sidebars/your_work/menus/homepage_menu.rb | 2 +- lib/sidebars/your_work/menus/projects_menu.rb | 6 +- .../project/dashboard_images_spec.rb | 8 +- spec/controllers/dashboard_controller_spec.rb | 27 +----- spec/controllers/root_controller_spec.rb | 95 ++++--------------- .../dashboard/homepage/homepage_e2e_spec.rb | 1 - .../dashboard/homepage/homepage_spec.rb | 1 - .../dashboard/homepage/todos_widget_spec.rb | 1 - spec/features/dashboard/shortcuts_spec.rb | 2 +- spec/helpers/preferences_helper_spec.rb | 31 ++---- .../your_work/menus/homepage_menu_spec.rb | 11 +-- spec/models/user_spec.rb | 77 +-------------- spec/requests/users_controller_spec.rb | 1 - spec/spec_helper.rb | 3 - 23 files changed, 51 insertions(+), 279 deletions(-) delete mode 100644 config/feature_flags/beta/personal_homepage.yml diff --git a/app/assets/javascripts/pages/root/index.js b/app/assets/javascripts/pages/root/index.js index 681291e3edddce..974b498c006d50 100644 --- a/app/assets/javascripts/pages/root/index.js +++ b/app/assets/javascripts/pages/root/index.js @@ -1,17 +1,7 @@ -// if the "projects dashboard" is a user's default dashboard, when they visit the -// instance root index, the dashboard will be served by the root controller instead -// of a dashboard controller. The root index redirects for all other default dashboards. -import '../dashboard/projects/index'; - -const isNewHomepage = gon.features.personalHomepage; - -// With the new `personal_homepage` feature flag enabled, the root_url now renders a different page. -// We can keep above import for now. It is still required for when the feature flag is disabled for -// a user. +// The root_url now renders the personal homepage. +// The homepage is initialized below. (async () => { - if (isNewHomepage) { - const { default: initHomepage } = await import('~/homepage/index'); - initHomepage(); - } + const { default: initHomepage } = await import('~/homepage/index'); + initHomepage(); })(); diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 23a4cd7a0e7a1d..546df7f07e58ad 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -39,13 +39,9 @@ class DashboardController < Dashboard::ApplicationController urgency :low, [:issues, :issues_calendar] def home - if Feature.enabled?(:personal_homepage, current_user) - track_internal_event('user_views_homepage', user: current_user) - @homepage_app_data = homepage_app_data(current_user) - render('root/index') - else - not_found - end + track_internal_event('user_views_homepage', user: current_user) + @homepage_app_data = homepage_app_data(current_user) + render('root/index') end def activity diff --git a/app/controllers/root_controller.rb b/app/controllers/root_controller.rb index 690af74d3c16cb..800efdd2fc93bb 100644 --- a/app/controllers/root_controller.rb +++ b/app/controllers/root_controller.rb @@ -17,15 +17,11 @@ class RootController < Dashboard::ProjectsController before_action :redirect_unlogged_user, if: -> { current_user.nil? } before_action :redirect_logged_user, if: -> { current_user.present? } - before_action only: [:index] do - push_frontend_feature_flag(:personal_homepage, current_user) - end - CACHE_CONTROL_HEADER = 'no-store' DASHBOARD_PATHS = { 'projects' => ->(context) { - context.dashboard_projects_path if Feature.enabled?(:personal_homepage, context.current_user) + context.dashboard_projects_path }, 'stars' => ->(context) { context.starred_dashboard_projects_path }, 'member_projects' => ->(context) { context.member_dashboard_projects_path }, @@ -47,12 +43,8 @@ class RootController < Dashboard::ProjectsController def index @homepage_app_data = homepage_app_data(current_user) - if Feature.enabled?(:personal_homepage, current_user) - track_internal_event('user_views_homepage', user: current_user) - render('root/index') && return - end - - super + track_internal_event('user_views_homepage', user: current_user) + render('root/index') && return end private diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 38de86416be16a..fb05a19986b92c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -88,8 +88,7 @@ def activity format.json do load_events - @is_personal_homepage = params[:is_personal_homepage].present? && Feature.enabled?(:personal_homepage, - current_user) + @is_personal_homepage = params[:is_personal_homepage].present? if Feature.enabled?(:profile_tabs_vue, current_user) && !@is_personal_homepage @events = if user.include_private_contributions? diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index 48431e05b1d69a..7b9f23f927ccba 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -26,8 +26,6 @@ def dashboard_choices validate_dashboard_choices!(dashboards) dashboards -= excluded_dashboard_choices - dashboards -= ['homepage'] unless Feature.enabled?(:personal_homepage, current_user) - # Move homepage to first position if it's available # For homepage rollout with flipped mapping, homepage becomes their default (value 0) dashboards.unshift('homepage') if dashboards.delete('homepage') diff --git a/app/models/user.rb b/app/models/user.rb index b4403061ddafd6..6e2edf0bd66c1a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -462,8 +462,6 @@ def dashboard_enum_mapping # Determines if this user should use flipped dashboard enum mapping def should_use_flipped_dashboard_mapping_for_rollout? - return false unless Feature.enabled?(:personal_homepage, self) - # Don't flip for SM admins who have no authorized projects as they go through different onboarding flow. return false if self_managed_admin? && !authorized_projects.exists? diff --git a/config/feature_flags/beta/personal_homepage.yml b/config/feature_flags/beta/personal_homepage.yml deleted file mode 100644 index 01f73bab151840..00000000000000 --- a/config/feature_flags/beta/personal_homepage.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: personal_homepage -description: -feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/546151 -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192774 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/561388 -milestone: '18.1' -group: group::personal productivity -type: beta -default_enabled: true diff --git a/ee/spec/features/dashboard/homepage/homepage_spec.rb b/ee/spec/features/dashboard/homepage/homepage_spec.rb index 33742515b0071e..cf596cee201b33 100644 --- a/ee/spec/features/dashboard/homepage/homepage_spec.rb +++ b/ee/spec/features/dashboard/homepage/homepage_spec.rb @@ -6,7 +6,6 @@ let_it_be(:user) { create(:user) } before do - stub_feature_flags(personal_homepage: true) sign_in user end diff --git a/ee/spec/models/ee/user_spec.rb b/ee/spec/models/ee/user_spec.rb index 5c4c9f93e6c31d..fe2a9e7d0f8d87 100644 --- a/ee/spec/models/ee/user_spec.rb +++ b/ee/spec/models/ee/user_spec.rb @@ -4130,10 +4130,6 @@ describe '#should_use_flipped_dashboard_mapping_for_rollout?' do let_it_be(:user) { create(:user) } - before do - stub_feature_flags(personal_homepage: true) - end - context 'when admin_homepage SaaS feature is disabled (self-managed)' do before do stub_saas_features(admin_homepage: false) diff --git a/lib/sidebars/your_work/menus/homepage_menu.rb b/lib/sidebars/your_work/menus/homepage_menu.rb index b61487d19991a0..c167cb786448ac 100644 --- a/lib/sidebars/your_work/menus/homepage_menu.rb +++ b/lib/sidebars/your_work/menus/homepage_menu.rb @@ -21,7 +21,7 @@ def sprite_icon override :render? def render? - !!context.current_user && Feature.enabled?(:personal_homepage, context.current_user) + !!context.current_user end override :active_routes diff --git a/lib/sidebars/your_work/menus/projects_menu.rb b/lib/sidebars/your_work/menus/projects_menu.rb index e13bc23dcf43ca..33080340168d6b 100644 --- a/lib/sidebars/your_work/menus/projects_menu.rb +++ b/lib/sidebars/your_work/menus/projects_menu.rb @@ -26,11 +26,7 @@ def render? override :active_routes def active_routes - if Feature.enabled?(:personal_homepage, context.current_user) - { controller: ['projects', 'dashboard/projects'] } - else - { controller: ['root', 'projects', 'dashboard/projects'] } - end + { controller: ['projects', 'dashboard/projects'] } end end end diff --git a/qa/qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb b/qa/qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb index 4452ace0844f1f..114c498cc9fd8d 100644 --- a/qa/qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb +++ b/qa/qa/specs/features/browser_ui/9_tenant_scale/project/dashboard_images_spec.rb @@ -1,18 +1,12 @@ # frozen_string_literal: true module QA - RSpec.describe 'Tenant Scale', feature_category: :organization, feature_flag: { - name: 'personal_homepage' - } do + RSpec.describe 'Tenant Scale', feature_category: :organization do shared_examples 'loads all images' do |admin| let(:api_client) { Runtime::API::Client.as_admin } let(:user) { create(:user, is_admin: admin, api_client: api_client) } let(:expected_text) { admin ? "Welcome to GitLab" : "Today's highlights" } - before do - Runtime::Feature.enable(:personal_homepage, user: user) - end - it do Flow::Login.sign_in(as: user) diff --git a/spec/controllers/dashboard_controller_spec.rb b/spec/controllers/dashboard_controller_spec.rb index 1e43e10ab00253..2d3141eb02cebc 100644 --- a/spec/controllers/dashboard_controller_spec.rb +++ b/spec/controllers/dashboard_controller_spec.rb @@ -16,30 +16,13 @@ end describe 'GET home' do - context 'when `personal_homepage` feature is disabled' do - it 'is not found (404)' do - get :home - expect(response).to be_not_found - end - - it 'does not track user_views_homepage event' do - expect { get :home }.not_to trigger_internal_events('user_views_homepage') - end + it 'renders the homepage' do + get :home + expect(response).to be_successful.and render_template('root/index') end - context 'when `personal_homepage` feature is enabled' do - before do - stub_feature_flags(personal_homepage: true) - end - - it 'renders the homepage' do - get :home - expect(response).to be_successful.and render_template('root/index') - end - - it 'tracks user_views_homepage event' do - expect { get :home }.to trigger_internal_events('user_views_homepage').with(user: user) - end + it 'tracks user_views_homepage event' do + expect { get :home }.to trigger_internal_events('user_views_homepage').with(user: user) end end diff --git a/spec/controllers/root_controller_spec.rb b/spec/controllers/root_controller_spec.rb index a624bf75394515..03e57b50a5c6ca 100644 --- a/spec/controllers/root_controller_spec.rb +++ b/spec/controllers/root_controller_spec.rb @@ -213,94 +213,34 @@ user.dashboard = 'homepage' end - context 'with `personal_homepage` feature flag disabled (default)' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'renders the default dashboard' do - get :index - - expect(response).to render_template 'dashboard/projects/index' - end + it 'renders the new homepage' do + # With flipped mapping, homepage users actually get routed to projects + # So we need to mock the effective_dashboard_for_routing to return homepage + allow(user).to receive(:effective_dashboard_for_routing).and_return('homepage') - it 'does not track user_views_homepage event' do - expect { get :index }.not_to trigger_internal_events('user_views_homepage') - end - - it 'passes the correct data to the view' do - get :index + get :index - expect(assigns[:homepage_app_data]).to eq({ - review_requested_path: "/dashboard/merge_requests", - activity_path: "/dashboard/activity", - assigned_merge_requests_path: "/dashboard/merge_requests", - assigned_work_items_path: "/dashboard/issues?assignee_username=#{user.username}", - authored_work_items_path: "/dashboard/issues?author_username=#{user.username}", - duo_code_review_bot_username: duo_code_review_bot.username, - merge_requests_review_requested_title: "Review requested", - merge_requests_your_merge_requests_title: "Your merge requests", - last_push_event: nil - }) - end + expect(response).to render_template 'root/index' end - context 'with `personal_homepage` feature flag enabled' do - before do - stub_feature_flags(personal_homepage: true) - end - - it 'renders the new homepage' do - # With flipped mapping, homepage users actually get routed to projects - # So we need to mock the effective_dashboard_for_routing to return homepage - allow(user).to receive(:effective_dashboard_for_routing).and_return('homepage') - - get :index + it 'tracks user_views_homepage event' do + # With flipped mapping, homepage users actually get routed to projects + # So we need to mock the effective_dashboard_for_routing to return homepage + allow(user).to receive(:effective_dashboard_for_routing).and_return('homepage') - expect(response).to render_template 'root/index' - end - - it 'tracks user_views_homepage event' do - # With flipped mapping, homepage users actually get routed to projects - # So we need to mock the effective_dashboard_for_routing to return homepage - allow(user).to receive(:effective_dashboard_for_routing).and_return('homepage') - - expect { get :index }.to trigger_internal_events('user_views_homepage').with(user: user) - end + expect { get :index }.to trigger_internal_events('user_views_homepage').with(user: user) end end context 'who uses the default dashboard setting', :aggregate_failures do - context 'with `personal_homepage` feature flag disabled (default)' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'renders the default dashboard' do - get :index - - expect(response).to render_template 'dashboard/projects/index' - end - - it 'does not track user_views_homepage event' do - expect { get :index }.not_to trigger_internal_events('user_views_homepage') - end - end - - context 'with `personal_homepage` feature flag enabled' do - before do - stub_feature_flags(personal_homepage: true) - end - - it 'redirects to the default dashboard' do - # With flipped mapping, default users (projects) get routed to homepage - # So we need to mock the effective_dashboard_for_routing to return projects - allow(user).to receive(:effective_dashboard_for_routing).and_return('projects') + it 'redirects to the default dashboard' do + # With flipped mapping, default users (projects) get routed to homepage + # So we need to mock the effective_dashboard_for_routing to return projects + allow(user).to receive(:effective_dashboard_for_routing).and_return('projects') - get :index + get :index - expect(response).to redirect_to dashboard_projects_path - end + expect(response).to redirect_to dashboard_projects_path end end @@ -314,7 +254,6 @@ context 'with flipped dashboard mapping' do before do - stub_feature_flags(personal_homepage: user) allow(user).to receive(:should_use_flipped_dashboard_mapping_for_rollout?).and_return(true) end diff --git a/spec/features/dashboard/homepage/homepage_e2e_spec.rb b/spec/features/dashboard/homepage/homepage_e2e_spec.rb index 8937b34ab4af81..087b208fbdd9ad 100644 --- a/spec/features/dashboard/homepage/homepage_e2e_spec.rb +++ b/spec/features/dashboard/homepage/homepage_e2e_spec.rb @@ -13,7 +13,6 @@ end before do - stub_feature_flags(personal_homepage: true) sign_in user end diff --git a/spec/features/dashboard/homepage/homepage_spec.rb b/spec/features/dashboard/homepage/homepage_spec.rb index fec52a2b4b796d..f9e5a33ef33ebd 100644 --- a/spec/features/dashboard/homepage/homepage_spec.rb +++ b/spec/features/dashboard/homepage/homepage_spec.rb @@ -6,7 +6,6 @@ let_it_be(:user) { create(:user) } before do - stub_feature_flags(personal_homepage: true) sign_in user end diff --git a/spec/features/dashboard/homepage/todos_widget_spec.rb b/spec/features/dashboard/homepage/todos_widget_spec.rb index 9bf0bf7584ccd3..bb2911a9c35533 100644 --- a/spec/features/dashboard/homepage/todos_widget_spec.rb +++ b/spec/features/dashboard/homepage/todos_widget_spec.rb @@ -6,7 +6,6 @@ let_it_be(:user) { create(:user, :with_namespace) } before do - stub_feature_flags(personal_homepage: true) sign_in user end diff --git a/spec/features/dashboard/shortcuts_spec.rb b/spec/features/dashboard/shortcuts_spec.rb index 6066bd57d01806..0002dc8ee43095 100644 --- a/spec/features/dashboard/shortcuts_spec.rb +++ b/spec/features/dashboard/shortcuts_spec.rb @@ -54,7 +54,7 @@ find('body').send_keys([:shift, 'H']) - check_page_title('Projects') # This will need to change when we remove the `personal_homepage` feature flag + check_page_title('Home') end end diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb index 42cd009de9dc5d..139ca1c6fd979e 100644 --- a/spec/helpers/preferences_helper_spec.rb +++ b/spec/helpers/preferences_helper_spec.rb @@ -18,7 +18,6 @@ context 'with flipped dashboard mapping for rollout' do before do - stub_feature_flags(personal_homepage: user) allow(user).to receive(:should_use_flipped_dashboard_mapping_for_rollout?).and_return(true) allow(user).to receive(:effective_dashboard_for_routing).and_return('homepage') end @@ -55,7 +54,8 @@ it 'returns expected options' do expect(helper.dashboard_choices).to match_array [ - { text: "Your Contributed Projects (default)", value: 'projects' }, + { text: "Personal homepage (default)", value: 'homepage' }, + { text: "Your Contributed Projects", value: 'projects' }, { text: "Starred Projects", value: 'stars' }, { text: "Member Projects", value: 'member_projects' }, { text: "Your Activity", value: 'your_activity' }, @@ -71,28 +71,18 @@ ] end - context 'with `personal_homepage` feature flag enabled' do + context 'with flipped dashboard mapping for rollout' do before do - stub_feature_flags(personal_homepage: true) - end - - it 'has an additional option' do - expect(helper.dashboard_choices).to include({ text: "Personal homepage (default)", value: 'homepage' }) + allow(user).to receive(:should_use_flipped_dashboard_mapping_for_rollout?).and_return(true) end - context 'with flipped dashboard mapping for rollout' do - before do - allow(user).to receive(:should_use_flipped_dashboard_mapping_for_rollout?).and_return(true) - end + it 'uses localized_dashboard_choices_for_user for text labels' do + choices = helper.dashboard_choices + homepage_choice = choices.find { |choice| choice[:value] == 'homepage' } + projects_choice = choices.find { |choice| choice[:value] == 'projects' } - it 'uses localized_dashboard_choices_for_user for text labels' do - choices = helper.dashboard_choices - homepage_choice = choices.find { |choice| choice[:value] == 'homepage' } - projects_choice = choices.find { |choice| choice[:value] == 'projects' } - - expect(homepage_choice[:text]).to eq('Personal homepage (default)') - expect(projects_choice[:text]).to eq('Your Contributed Projects') - end + expect(homepage_choice[:text]).to eq('Personal homepage (default)') + expect(projects_choice[:text]).to eq('Your Contributed Projects') end end end @@ -110,7 +100,6 @@ context 'when flipped dashboard mapping is enabled' do before do - stub_feature_flags(personal_homepage: user) allow(user).to receive(:should_use_flipped_dashboard_mapping_for_rollout?).and_return(true) end diff --git a/spec/lib/sidebars/your_work/menus/homepage_menu_spec.rb b/spec/lib/sidebars/your_work/menus/homepage_menu_spec.rb index 5c94b5169df1da..7fe6c16fe441da 100644 --- a/spec/lib/sidebars/your_work/menus/homepage_menu_spec.rb +++ b/spec/lib/sidebars/your_work/menus/homepage_menu_spec.rb @@ -11,17 +11,12 @@ subject { described_class.new(context).render? } - where(:current_user, :feature_flag_enabled, :result) do - nil | true | false - user | false | false - user | true | true + where(:current_user, :result) do + nil | false + user | true end with_them do - before do - stub_feature_flags(personal_homepage: feature_flag_enabled) - end - it { is_expected.to eq(result) } end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 4c4bfdbccc5bd5..dda4bc1df21664 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1307,10 +1307,6 @@ end context 'with flipped dashboard mapping for rollout' do - before do - stub_feature_flags(personal_homepage: user) - end - it 'uses flipped enum mapping when setting dashboard value' do user.dashboard = 'projects' # With flipped mapping, 'projects' gets stored as 'homepage' in the database @@ -1328,42 +1324,10 @@ expect(user.read_attribute(:dashboard)).to eq('stars') # stars value unchanged end end - - context 'without flipped dashboard mapping' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'uses standard enum mapping' do - user.dashboard = 'projects' - expect(user.read_attribute(:dashboard)).to eq('projects') # standard projects value - - user.dashboard = 'homepage' - expect(user.read_attribute(:dashboard)).to eq('homepage') # standard homepage value - end - end end describe '#effective_dashboard_for_routing' do - context 'without flipped dashboard mapping' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'returns the actual dashboard value' do - user.dashboard = 'projects' - expect(user.effective_dashboard_for_routing).to eq('projects') - - user.dashboard = 'stars' - expect(user.effective_dashboard_for_routing).to eq('stars') - end - end - context 'with flipped dashboard mapping for rollout' do - before do - stub_feature_flags(personal_homepage: user) - end - it 'flips projects to homepage' do user.dashboard = 'projects' # Test that the method works - the actual flipping behavior may vary @@ -1389,21 +1353,7 @@ end describe '#dashboard_enum_mapping' do - context 'without flipped dashboard mapping' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'returns standard enum mapping' do - expect(user.dashboard_enum_mapping).to eq(described_class.dashboards.with_indifferent_access) - end - end - context 'with flipped dashboard mapping for rollout' do - before do - stub_feature_flags(personal_homepage: user) - end - it 'returns flipped enum mapping for projects and homepage' do mapping = user.dashboard_enum_mapping @@ -1422,28 +1372,7 @@ end describe '#should_use_flipped_dashboard_mapping_for_rollout?' do - context 'when feature flag is disabled' do - before do - stub_feature_flags(personal_homepage: false) - end - - it 'returns false for regular user' do - expect(user.should_use_flipped_dashboard_mapping_for_rollout?).to be false - end - - it 'returns false for admin user' do - admin_user = create(:user, admin: true) - stub_feature_flags(personal_homepage: false) - - expect(admin_user.should_use_flipped_dashboard_mapping_for_rollout?).to be false - end - end - - context 'when feature flag is enabled' do - before do - stub_feature_flags(personal_homepage: user) - end - + context 'for flipped dashboard mapping' do context 'for regular users' do it 'returns true when user has no projects' do expect(user.should_use_flipped_dashboard_mapping_for_rollout?).to be true @@ -1460,10 +1389,6 @@ context 'for admin users', :enable_admin_mode do let(:admin_user) { create(:user, admin: true) } - before do - stub_feature_flags(personal_homepage: admin_user) - end - it 'returns false when admin has no projects' do expect(admin_user).not_to be_should_use_flipped_dashboard_mapping_for_rollout end diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 98f6dd2e65625c..2cca1510a77727 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -274,7 +274,6 @@ context 'when the request originates from the personal homepage' do before do - stub_feature_flags(personal_homepage: true) sign_in(user) end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 14ace0d0fb1f7d..8d1ce72ddcaf08 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -345,9 +345,6 @@ # Default false while we make them compatible stub_feature_flags(v2_approval_rules: false) - # New personal homepage is still a WIP and not functional. - stub_feature_flags(personal_homepage: false) - # New paneled view is still a WIP and not functional. stub_feature_flags(paneled_view: false) -- GitLab From eb8dc05cafba942848f918d6e86fa9164a292a33 Mon Sep 17 00:00:00 2001 From: Anas Shahid Date: Tue, 21 Oct 2025 03:52:47 -0400 Subject: [PATCH 2/3] Fix tests --- ee/spec/controllers/ee/root_controller_spec.rb | 4 ++-- spec/features/dashboard/shortcuts_spec.rb | 3 ++- spec/support/shared_contexts/navbar_structure_context.rb | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ee/spec/controllers/ee/root_controller_spec.rb b/ee/spec/controllers/ee/root_controller_spec.rb index de12d1322b9710..cb642ce4466d4d 100644 --- a/ee/spec/controllers/ee/root_controller_spec.rb +++ b/ee/spec/controllers/ee/root_controller_spec.rb @@ -90,10 +90,10 @@ stub_licensed_features(operations_dashboard: false) end - it 'renders the default dashboard' do + it 'renders the homepage' do get :index - expect(response).to render_template 'dashboard/projects/index' + expect(response).to render_template 'root/index' end end end diff --git a/spec/features/dashboard/shortcuts_spec.rb b/spec/features/dashboard/shortcuts_spec.rb index 0002dc8ee43095..0d9eff3636f35d 100644 --- a/spec/features/dashboard/shortcuts_spec.rb +++ b/spec/features/dashboard/shortcuts_spec.rb @@ -54,7 +54,8 @@ find('body').send_keys([:shift, 'H']) - check_page_title('Home') + expect(page).to have_content("Today's highlights") + wait_for_requests end end diff --git a/spec/support/shared_contexts/navbar_structure_context.rb b/spec/support/shared_contexts/navbar_structure_context.rb index 700df0024cdc76..2b106dc858f388 100644 --- a/spec/support/shared_contexts/navbar_structure_context.rb +++ b/spec/support/shared_contexts/navbar_structure_context.rb @@ -218,6 +218,10 @@ RSpec.shared_context 'dashboard navbar structure' do let(:structure) do [ + { + nav_item: _("Home"), + nav_sub_items: [] + }, { nav_item: _("Projects"), nav_sub_items: [] -- GitLab From 5941ad552a3e39dda84bebd71be96bf219c4532a Mon Sep 17 00:00:00 2001 From: Anas Shahid Date: Thu, 23 Oct 2025 02:43:13 -0400 Subject: [PATCH 3/3] Fix unit tests --- ...ser_visits_profile_preferences_page_spec.rb | 8 ++++---- spec/features/users/login_spec.rb | 18 +++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb index 0efe2df155a2b0..7f6da47aec6f08 100644 --- a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb @@ -27,10 +27,10 @@ end end - it 'sets default dashboard preference to Your Contributed Projects (default)' do + it 'sets default dashboard preference to Personal homepage (default)' do visit(profile_preferences_path) - expect(page).to have_button('Your Contributed Projects (default)') + expect(page).to have_button('Personal homepage (default)') end describe 'User changes their default dashboard', :js do @@ -39,7 +39,7 @@ end it 'creates a flash message' do - select_from_listbox 'Starred Projects', from: 'Your Contributed Projects (default)', exact_item_text: true + select_from_listbox 'Starred Projects', from: 'Personal homepage (default)', exact_item_text: true click_button 'Save changes' wait_for_requests @@ -48,7 +48,7 @@ end it 'updates their preference' do - select_from_listbox 'Starred Projects', from: 'Your Contributed Projects (default)', exact_item_text: true + select_from_listbox 'Starred Projects', from: 'Personal homepage (default)', exact_item_text: true click_button 'Save changes' wait_for_requests diff --git a/spec/features/users/login_spec.rb b/spec/features/users/login_spec.rb index 77a3376255cad6..725a82f2234d6d 100644 --- a/spec/features/users/login_spec.rb +++ b/spec/features/users/login_spec.rb @@ -237,7 +237,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) enter_code(codes.sample, only_two_factor_webauthn_enabled: only_two_factor_webauthn_enabled) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect(page).to have_current_path root_path, ignore_query: true end @@ -249,7 +249,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) expect do enter_code(codes.sample, only_two_factor_webauthn_enabled: only_two_factor_webauthn_enabled) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests end .to change { user.reload.otp_backup_codes.size }.by(-1) @@ -264,7 +264,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) random_code = codes.delete(codes.sample) expect do enter_code(random_code, only_two_factor_webauthn_enabled: only_two_factor_webauthn_enabled) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests end .to change { user.reload.otp_backup_codes.size }.by(-1) @@ -274,7 +274,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) expect do enter_code(codes.sample, only_two_factor_webauthn_enabled: only_two_factor_webauthn_enabled) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests end .to change { user.reload.otp_backup_codes.size }.by(-1) @@ -325,7 +325,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) .and increment(:user_two_factor_authenticated_counter) enter_code(user.current_otp) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect(page).not_to have_content(I18n.t('devise.failure.already_authenticated')) expect_single_session_with_authenticated_ttl @@ -348,7 +348,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) .and increment(:user_two_factor_authenticated_counter) enter_code(user.current_otp) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect_single_session_with_authenticated_ttl expect(page).to have_current_path root_path, ignore_query: true @@ -376,7 +376,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) expect(page).to have_content('Invalid two-factor code') enter_code(user.current_otp) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect_single_session_with_authenticated_ttl expect(page).to have_current_path root_path, ignore_query: true @@ -456,7 +456,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) expect(ActiveSession).to receive(:cleanup).with(user).once.and_call_original sign_in_using_saml! - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect_single_session_with_authenticated_ttl expect(page).not_to have_content(_('Enter verification code')) @@ -479,7 +479,7 @@ def enter_code(code, only_two_factor_webauthn_enabled: false) wait_for_requests enter_code(user.current_otp) - expect(page).to have_content('Welcome to GitLab') + expect(page).to have_content("Today's highlights") wait_for_requests expect_single_session_with_authenticated_ttl expect(page).to have_current_path root_path, ignore_query: true -- GitLab