diff --git a/app/controllers/groups/work_items_controller.rb b/app/controllers/groups/work_items_controller.rb index ab1e1d50d9cf733439ff76469a2758ee53aabe97..badf4819580e76402bf7dc18c3705cc8c3a7d807 100644 --- a/app/controllers/groups/work_items_controller.rb +++ b/app/controllers/groups/work_items_controller.rb @@ -31,7 +31,7 @@ def show private def namespace_work_items_enabled? - group&.namespace_work_items_enabled? + group&.namespace_work_items_enabled?(current_user) end def show_params diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 7a6b683d1ea6002408762717241b2280e07535f1..78bfca4c2c6481c65085e9ea36ec9cef9f728173 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -42,7 +42,7 @@ class GroupsController < Groups::ApplicationController push_force_frontend_feature_flag(:work_items_alpha, group.work_items_alpha_feature_flag_enabled?) push_frontend_feature_flag(:issues_grid_view) push_frontend_feature_flag(:group_multi_select_tokens, group) - push_force_frontend_feature_flag(:namespace_level_work_items, group.namespace_work_items_enabled?) + push_force_frontend_feature_flag(:namespace_level_work_items, group.namespace_work_items_enabled?(current_user)) end before_action only: :merge_requests do diff --git a/app/finders/work_items/work_items_finder.rb b/app/finders/work_items/work_items_finder.rb index 672566f17d68a8d5fe563a2da2f714fb9466a9df..339ad1aa7be2ca759859e9c2aed3dae4d40056c0 100644 --- a/app/finders/work_items/work_items_finder.rb +++ b/app/finders/work_items/work_items_finder.rb @@ -130,7 +130,7 @@ def project_namespaces end def include_namespace_level_work_items? - params.group? && params.group.namespace_work_items_enabled? + params.group? && params.group.namespace_work_items_enabled?(current_user) end def include_descendants? diff --git a/app/graphql/resolvers/namespaces/work_item_resolver.rb b/app/graphql/resolvers/namespaces/work_item_resolver.rb index 345fc9951f722e85e0796b97d86fb5b59138c649..5c8bdac7b5cfae714b4c698baba8b0535521ad7a 100644 --- a/app/graphql/resolvers/namespaces/work_item_resolver.rb +++ b/app/graphql/resolvers/namespaces/work_item_resolver.rb @@ -8,7 +8,7 @@ class WorkItemResolver < Resolvers::BaseResolver argument :iid, GraphQL::Types::String, required: true, description: 'IID of the work item.' def ready?(**args) - return false if resource_parent.is_a?(Group) && !resource_parent.namespace_work_items_enabled? + return false if resource_parent.is_a?(Group) && !resource_parent.namespace_work_items_enabled?(current_user) super end diff --git a/app/graphql/resolvers/namespaces/work_items_resolver.rb b/app/graphql/resolvers/namespaces/work_items_resolver.rb index 2b0acb91b76008725b9b1b31ba896996cffc10c4..a08969e3ad3572bd449204199092e555e08e43bf 100644 --- a/app/graphql/resolvers/namespaces/work_items_resolver.rb +++ b/app/graphql/resolvers/namespaces/work_items_resolver.rb @@ -15,7 +15,7 @@ class WorkItemsResolver < ::Resolvers::WorkItemsResolver description: 'Include work items from descendant groups and projects.' def ready?(**args) - super && resource_parent.namespace_work_items_enabled? + super && resource_parent.namespace_work_items_enabled?(current_user) end private diff --git a/app/models/group.rb b/app/models/group.rb index a04771e27f01022565d2d8633c68e46bec4ce623..1bb8a516869b42d8ad830d10ba6f0c2c5575f0f8 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -952,7 +952,7 @@ def work_items_rolledup_dates_feature_flag_enabled? end # Note: this method is overridden in EE to check the work_item_epics feature flag which also enables this feature - def namespace_work_items_enabled? + def namespace_work_items_enabled?(_user = nil) ::Feature.enabled?(:namespace_level_work_items, self, type: :development) end diff --git a/app/services/groups/autocomplete_service.rb b/app/services/groups/autocomplete_service.rb index 9dcd73d2a3549b7afa94271c70406be1181a1241..79feec246c008ea42fb21a403c1764dfb405fa22 100644 --- a/app/services/groups/autocomplete_service.rb +++ b/app/services/groups/autocomplete_service.rb @@ -11,7 +11,7 @@ def issues(confidential_only: false, issue_types: nil) finder_params[:issue_types] = issue_types if issue_types.present? finder_class = - if group.namespace_work_items_enabled? + if group.namespace_work_items_enabled?(current_user) finder_params[:include_descendants] = true WorkItems::WorkItemsFinder else diff --git a/ee/app/controllers/ee/groups/work_items_controller.rb b/ee/app/controllers/ee/groups/work_items_controller.rb index 17423196a77b2f4760ce25962d2df9e9375e2eb1..6ece12c1a464ea823f0d19763d846bd90266615f 100644 --- a/ee/app/controllers/ee/groups/work_items_controller.rb +++ b/ee/app/controllers/ee/groups/work_items_controller.rb @@ -20,18 +20,26 @@ module WorkItemsController include DescriptionDiffActions end - private + def show + # Once we rollout epic work items, links to `/work_items/:iid` might be already used. However there could be the + # scenario where we rollback the feature flag to enable epic work items. In this case, we want users to still + # see their epics and therefore redirect them to `/epics/:iid`. + return redirect_to group_epic_path(group, issuable.iid) if epic_work_item? && !namespace_work_items_enabled? - override :namespace_work_items_enabled? - def namespace_work_items_enabled? - super && ::Feature.enabled?(:work_item_epics_rollout, current_user) + super end + private + def issuable ::WorkItem.find_by_namespace_and_iid!(group, params[:iid]) end strong_memoize_attr :issuable + def epic_work_item? + issuable.work_item_type == ::WorkItems::Type.default_by_type(:epic) + end + def authorize_read_work_item! access_denied! unless can?(current_user, :read_work_item, issuable) end diff --git a/ee/app/controllers/groups/epics_controller.rb b/ee/app/controllers/groups/epics_controller.rb index 53bef6b1d4427db6d9a0d3a5c53b2d6c716d5a4e..6ad7f69327d4b817ac16509772d3bcffd0c81fb6 100644 --- a/ee/app/controllers/groups/epics_controller.rb +++ b/ee/app/controllers/groups/epics_controller.rb @@ -19,7 +19,6 @@ class Groups::EpicsController < Groups::ApplicationController before_action do push_frontend_feature_flag(:notifications_todos_buttons, current_user) - push_frontend_feature_flag(:namespace_level_work_items, @group) push_force_frontend_feature_flag(:namespace_level_work_items, epic_work_items_enabled?) end @@ -69,7 +68,7 @@ def create private def epic_work_items_enabled? - @group&.namespace_work_items_enabled? && ::Feature.enabled?(:work_item_epics_rollout, current_user) + !!@group&.namespace_work_items_enabled?(current_user) end # rubocop: disable CodeReuse/ActiveRecord diff --git a/ee/app/helpers/ee/nav/new_dropdown_helper.rb b/ee/app/helpers/ee/nav/new_dropdown_helper.rb index 826380ec5c8059f519a8c68d156c955694da0637..72b5cda1780be24f2daeda03dc9dc6e6914d21ef 100644 --- a/ee/app/helpers/ee/nav/new_dropdown_helper.rb +++ b/ee/app/helpers/ee/nav/new_dropdown_helper.rb @@ -10,7 +10,7 @@ module NewDropdownHelper override :create_epic_menu_item def create_epic_menu_item(group) if can?(current_user, :create_epic, group) - if group.namespace_work_items_enabled? && ::Feature.enabled?(:work_item_epics_rollout, current_user) + if group.namespace_work_items_enabled?(current_user) ::Gitlab::Nav::TopNavMenuItem.build( id: 'create_epic', title: _('New epic'), diff --git a/ee/app/models/ee/group.rb b/ee/app/models/ee/group.rb index 6675779ce6afe376bbf6043701f05e28ad573d6e..2b4d9bc4d5200172db10bf490f494ef7f8590552 100644 --- a/ee/app/models/ee/group.rb +++ b/ee/app/models/ee/group.rb @@ -271,8 +271,12 @@ def licensed_ai_features_available? end override :namespace_work_items_enabled? - def namespace_work_items_enabled? - super || (::Feature.enabled?(:work_item_epics, self, type: :beta) && licensed_feature_available?(:epics)) + def namespace_work_items_enabled?(user = nil) + super || ( + ::Feature.enabled?(:work_item_epics, self, type: :beta) && + ::Feature.enabled?(:work_item_epics_rollout, user) && + licensed_feature_available?(:epics) + ) end class_methods do diff --git a/ee/spec/controllers/groups/epics_controller_spec.rb b/ee/spec/controllers/groups/epics_controller_spec.rb index 406e13f9ea331f866171039080c61f6487156993..a95472858cebd67b70dfd4dd859c702dad9a6774 100644 --- a/ee/spec/controllers/groups/epics_controller_spec.rb +++ b/ee/spec/controllers/groups/epics_controller_spec.rb @@ -158,7 +158,7 @@ def show_epic(format = :html) context 'when work_item_epics_rollout is true' do before do - stub_feature_flags(work_item_epics_rollout: user) + stub_feature_flags(work_item_epics_rollout: user, namespace_level_work_items: false) end it 'renders work item template' do @@ -177,7 +177,7 @@ def show_epic(format = :html) context 'when work_item_epics_rollout is false' do before do - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) end it 'renders work item template' do diff --git a/ee/spec/features/discussion_comments/epic_quick_actions_spec.rb b/ee/spec/features/discussion_comments/epic_quick_actions_spec.rb index eb4bdb4992739d236cc7206d2ff3c5d3f1ea1d93..3812808bffc08589511ad1d59a78eda0c6feea7c 100644 --- a/ee/spec/features/discussion_comments/epic_quick_actions_spec.rb +++ b/ee/spec/features/discussion_comments/epic_quick_actions_spec.rb @@ -11,7 +11,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) group.add_developer(user) sign_in(user) diff --git a/ee/spec/features/discussion_comments/epic_spec.rb b/ee/spec/features/discussion_comments/epic_spec.rb index 64ae01e188619c59a9750f9f8d182ed1505c03e5..977d4a4e37381ac562f54ef11bd2854e834d9a69 100644 --- a/ee/spec/features/discussion_comments/epic_spec.rb +++ b/ee/spec/features/discussion_comments/epic_spec.rb @@ -8,7 +8,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) epic.group.add_maintainer(user) sign_in(user) diff --git a/ee/spec/features/epics/abuse_report_spec.rb b/ee/spec/features/epics/abuse_report_spec.rb index a38bc4886f71f0ab15d15fe821311dba0b8ff582..103c72360d9e84b8497a33d8f7cb773ffc15fda0 100644 --- a/ee/spec/features/epics/abuse_report_spec.rb +++ b/ee/spec/features/epics/abuse_report_spec.rb @@ -10,7 +10,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) sign_in(reporter1) end diff --git a/ee/spec/features/epics/confidential_notes_spec.rb b/ee/spec/features/epics/confidential_notes_spec.rb index eb9311efad24f154ae0ad5f7009ed9cd63de6b6f..417eb889408c4ba62543d3982418058223797984 100644 --- a/ee/spec/features/epics/confidential_notes_spec.rb +++ b/ee/spec/features/epics/confidential_notes_spec.rb @@ -5,7 +5,7 @@ RSpec.describe "Confidential notes on epics", :js, feature_category: :portfolio_management do before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) end it_behaves_like 'confidential notes on issuables' do diff --git a/ee/spec/features/epics/epic_issues_spec.rb b/ee/spec/features/epics/epic_issues_spec.rb index 04746d04e87b2e92a563d828fed8b22fd56b7470..dca06bc9e3a62b4234006d308c60e2a59ef805f5 100644 --- a/ee/spec/features/epics/epic_issues_spec.rb +++ b/ee/spec/features/epics/epic_issues_spec.rb @@ -30,7 +30,7 @@ end before do - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) stub_licensed_features(epics: true, subepics: true) end diff --git a/ee/spec/features/epics/epic_labels_spec.rb b/ee/spec/features/epics/epic_labels_spec.rb index b39380876335562ef258a8f548a012bc7b220f62..230869def02b8071c5c0ec28e281fb4df97c437b 100644 --- a/ee/spec/features/epics/epic_labels_spec.rb +++ b/ee/spec/features/epics/epic_labels_spec.rb @@ -10,7 +10,7 @@ before do group.add_developer(user) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) stub_licensed_features(epics: true) sign_in(user) diff --git a/ee/spec/features/epics/epic_related_epics_spec.rb b/ee/spec/features/epics/epic_related_epics_spec.rb index 959d8d86baa46bc7e38cf23ac3e2d594f94a8bf0..a52490362a5eeeb70892000387d3a4b7013d7703 100644 --- a/ee/spec/features/epics/epic_related_epics_spec.rb +++ b/ee/spec/features/epics/epic_related_epics_spec.rb @@ -13,7 +13,7 @@ def visit_epic(related_epics: true) group.add_developer(user) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) stub_licensed_features(epics: true, related_epics: related_epics) sign_in(user) visit group_epic_path(group, epic1) diff --git a/ee/spec/features/epics/epic_show_spec.rb b/ee/spec/features/epics/epic_show_spec.rb index 7838c9ca9a7da06e94e5e333e4a97b69719f0c41..c4cd895aa0946775b6b28b7ac765032b2cc2a205 100644 --- a/ee/spec/features/epics/epic_show_spec.rb +++ b/ee/spec/features/epics/epic_show_spec.rb @@ -32,7 +32,7 @@ before do group.add_developer(user) stub_licensed_features(epics: true, subepics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) sign_in(user) end diff --git a/ee/spec/features/epics/epic_work_item_sync_spec.rb b/ee/spec/features/epics/epic_work_item_sync_spec.rb index 4769e962d2834381cffb02f10f4ef4ced24ee799..3f9bd480d46214f805729d4b2852a9cfbb6318b6 100644 --- a/ee/spec/features/epics/epic_work_item_sync_spec.rb +++ b/ee/spec/features/epics/epic_work_item_sync_spec.rb @@ -24,7 +24,7 @@ end before do - stub_feature_flags(work_item_epics: true, work_item_epics_rollout: false) + stub_feature_flags(work_item_epics: true, work_item_epics_rollout: false, namespace_level_work_items: false) stub_licensed_features(epics: true, subepics: true, epic_colors: true) sign_in(user) diff --git a/ee/spec/features/epics/gfm_autocomplete_spec.rb b/ee/spec/features/epics/gfm_autocomplete_spec.rb index 1bcbf7d920e7b2d30b6b63444352afa3cdef4433..8b3c06db62d31f34d43ca296aa16512176e18a20 100644 --- a/ee/spec/features/epics/gfm_autocomplete_spec.rb +++ b/ee/spec/features/epics/gfm_autocomplete_spec.rb @@ -11,7 +11,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) sign_in(user) end @@ -47,6 +47,10 @@ context 'issuables' do let(:project) { create(:project, :repository, namespace: group) } + before do + stub_feature_flags(work_item_epics_rollout: true) + end + context 'issues' do it 'shows issues of group' do issue_1 = create(:issue, project: project) diff --git a/ee/spec/features/epics/referencing_epics_spec.rb b/ee/spec/features/epics/referencing_epics_spec.rb index bc64a7337511df340791b7e4a46223a7504b8ca0..56519d607e40d30d57efb59a7ec81f50c00a79ec 100644 --- a/ee/spec/features/epics/referencing_epics_spec.rb +++ b/ee/spec/features/epics/referencing_epics_spec.rb @@ -97,7 +97,7 @@ let(:note_text) { "Check #{epic.to_reference(full: true)}" } before do - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) visit project_issue_path(project, issue) fill_in 'note[note]', with: note_text diff --git a/ee/spec/features/epics/shortcuts_epic_spec.rb b/ee/spec/features/epics/shortcuts_epic_spec.rb index c067984263402f3e74e89b2f21b878dc068795f8..e3b887f004aae65d463d148f6a6ac68c9b3fc7f8 100644 --- a/ee/spec/features/epics/shortcuts_epic_spec.rb +++ b/ee/spec/features/epics/shortcuts_epic_spec.rb @@ -20,7 +20,7 @@ before do group.add_developer(user) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) stub_licensed_features(epics: true) sign_in(user) diff --git a/ee/spec/features/epics/todo_spec.rb b/ee/spec/features/epics/todo_spec.rb index 4119e336e120ca66fc2309332a57b2f52ecada6b..1e0f37730f30290ea9b45dd81e1d8a898fd0bebf 100644 --- a/ee/spec/features/epics/todo_spec.rb +++ b/ee/spec/features/epics/todo_spec.rb @@ -12,7 +12,8 @@ context 'with notifications_todos_buttons feature flag disabled' do before do stub_licensed_features(epics: true) - stub_feature_flags(notifications_todos_buttons: false, work_item_epics_rollout: false) + stub_feature_flags(notifications_todos_buttons: false, work_item_epics_rollout: false, + namespace_level_work_items: false) sign_in(user) visit group_epic_path(group, epic) @@ -55,7 +56,8 @@ context 'with notifications_todos_buttons feature flag enabled' do before do stub_licensed_features(epics: true) - stub_feature_flags(notifications_todos_buttons: true, work_item_epics_rollout: false) + stub_feature_flags(notifications_todos_buttons: true, work_item_epics_rollout: false, + namespace_level_work_items: false) sign_in(user) visit group_epic_path(group, epic) diff --git a/ee/spec/features/epics/update_epic_spec.rb b/ee/spec/features/epics/update_epic_spec.rb index 9901be270a87f9159033ba011e3113956309ed38..4e6c6cefb0a5e16d2e065e23c252e9e75435f800 100644 --- a/ee/spec/features/epics/update_epic_spec.rb +++ b/ee/spec/features/epics/update_epic_spec.rb @@ -20,7 +20,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) end context 'when user who is not a group member displays the epic' do diff --git a/ee/spec/features/epics/user_comments_on_epic_spec.rb b/ee/spec/features/epics/user_comments_on_epic_spec.rb index 6b894a7bf101cd051dd28683f3012ba99326a6f7..1d9346720d8722be9b26e9daae7e8333bf379523 100644 --- a/ee/spec/features/epics/user_comments_on_epic_spec.rb +++ b/ee/spec/features/epics/user_comments_on_epic_spec.rb @@ -12,7 +12,7 @@ before do stub_licensed_features(epics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) sign_in(user) visit group_epic_path(group, epic) diff --git a/ee/spec/features/epics/user_uses_quick_actions_spec.rb b/ee/spec/features/epics/user_uses_quick_actions_spec.rb index 7f68bfede6345fb9fc3f8b81e2629060bad07d9c..e861403207d844ef9058a55dc615dca24c0bb155 100644 --- a/ee/spec/features/epics/user_uses_quick_actions_spec.rb +++ b/ee/spec/features/epics/user_uses_quick_actions_spec.rb @@ -15,7 +15,7 @@ before do stub_licensed_features(epics: true, subepics: true) - stub_feature_flags(work_item_epics_rollout: false) + stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) sign_in(reporter) end diff --git a/ee/spec/helpers/nav/new_dropdown_helper_spec.rb b/ee/spec/helpers/nav/new_dropdown_helper_spec.rb index aab88b91ac20ba6045b2f5c1cc3c4d51acaca3df..344e00dc7f8a4e8d3340ce322108c55597ad56da 100644 --- a/ee/spec/helpers/nav/new_dropdown_helper_spec.rb +++ b/ee/spec/helpers/nav/new_dropdown_helper_spec.rb @@ -64,12 +64,26 @@ stub_licensed_features(epics: true) end + context 'when namespace_level_work_items flags is enabled' do + before do + stub_feature_flags(work_item_epics: false, work_item_epics_rollout: false, namespace_level_work_items: true) + end + + it_behaves_like 'work item menu' + end + context 'when work_item_epics and namespace_level_work_items flags are disabled' do before do stub_feature_flags(work_item_epics: false, namespace_level_work_items: false) end - it_behaves_like 'legacy epic menu' + context 'and work_item_epics_rollout flag is enabled' do + before do + stub_feature_flags(work_item_epics_rollout: user) + end + + it_behaves_like 'legacy epic menu' + end context 'and work_item_epics_rollout flag is disabled' do before do @@ -80,12 +94,18 @@ end end - context 'when work_item_epics and namespace_level_work_items flags are enabled' do + context 'when work_item_epics is enabled and namespace_level_work_items is disabled' do before do - stub_feature_flags(work_item_epics: true, namespace_level_work_items: true) + stub_feature_flags(work_item_epics: true, namespace_level_work_items: false) end - it_behaves_like 'work item menu' + context 'and work_item_epics_rollout flag is enabled' do + before do + stub_feature_flags(work_item_epics_rollout: user) + end + + it_behaves_like 'work item menu' + end context 'and work_item_epics_rollout flag is disabled' do before do diff --git a/ee/spec/models/ee/group_spec.rb b/ee/spec/models/ee/group_spec.rb index a7a3c13ce8f1711372f760d7e8f499b167073ccb..d4dddf92bec011ab1e93b85b8b1865f0d5ea47a7 100644 --- a/ee/spec/models/ee/group_spec.rb +++ b/ee/spec/models/ee/group_spec.rb @@ -3839,12 +3839,13 @@ def webhook_headers describe '#namespace_work_items_enabled?' do let_it_be(:group) { create(:group) } + let_it_be(:current_user) { create(:user) } - subject { group.namespace_work_items_enabled? } + subject { group.namespace_work_items_enabled?(current_user) } - context 'when namespace_level_work_items and work_item_epics feature flags are enabled' do + context 'when all feature flags are enabled' do before do - stub_feature_flags(work_item_epics: true, namespace_level_work_items: true) + stub_feature_flags(work_item_epics: true, namespace_level_work_items: true, work_item_epics_rollout: true) end it { is_expected.to eq(true) } @@ -3860,7 +3861,21 @@ def webhook_headers stub_licensed_features(epics: true) end - it { is_expected.to eq(true) } + context 'when work_item_epics_rollout is enabled' do + before do + stub_feature_flags(work_item_epics_rollout: current_user) + end + + it { is_expected.to eq(true) } + end + + context 'when work_item_epics_rollout is disabled' do + before do + stub_feature_flags(work_item_epics_rollout: false) + end + + it { is_expected.to eq(false) } + end end context 'when epics are not available' do @@ -3874,7 +3889,7 @@ def webhook_headers context 'when namespace_level_work_items is enabled and work_item_epics is disabled' do before do - stub_feature_flags(work_item_epics: false, namespace_level_work_items: true) + stub_feature_flags(work_item_epics: false, namespace_level_work_items: true, work_item_epics_rollout: false) end it { is_expected.to eq(true) } @@ -3882,7 +3897,7 @@ def webhook_headers context 'when namespace_level_work_items and work_item_epics feature flags are disabled' do before do - stub_feature_flags(work_item_epics: false, namespace_level_work_items: false) + stub_feature_flags(work_item_epics: false, namespace_level_work_items: false, work_item_epics_rollout: false) end it { is_expected.to eq(false) } diff --git a/ee/spec/requests/ee/groups/work_items_controller_spec.rb b/ee/spec/requests/ee/groups/work_items_controller_spec.rb index 121b0f0110f0e7f54d8a55738120788950cfef0f..0a4b71060cc935f5f30eea88f25e1740dcce0930 100644 --- a/ee/spec/requests/ee/groups/work_items_controller_spec.rb +++ b/ee/spec/requests/ee/groups/work_items_controller_spec.rb @@ -35,10 +35,22 @@ stub_feature_flags(work_item_epics_rollout: false, namespace_level_work_items: false) end - it 'returns not found' do - show + context 'when work item type is epic' do + it 'redirects to /epic/:iid' do + show + + expect(response).to redirect_to(group_epic_path(group, work_item.iid)) + end + end + + context 'when work item type is not epic' do + let_it_be(:work_item) { create(:work_item, :issue, namespace: group) } + + it 'returns not found' do + show - expect(response).to have_gitlab_http_status(:not_found) + expect(response).to have_gitlab_http_status(:not_found) + end end end @@ -47,10 +59,22 @@ stub_feature_flags(work_item_epics: false, namespace_level_work_items: false) end - it 'returns not found' do - show + context 'when work item type is epic' do + it 'redirects to /epic/:iid' do + show + + expect(response).to redirect_to(group_epic_path(group, work_item.iid)) + end + end + + context 'when work item type is not epic' do + let_it_be(:work_item) { create(:work_item, :issue, namespace: group) } + + it 'returns not found' do + show - expect(response).to have_gitlab_http_status(:not_found) + expect(response).to have_gitlab_http_status(:not_found) + end end end end diff --git a/ee/spec/requests/groups/epics_controller_spec.rb b/ee/spec/requests/groups/epics_controller_spec.rb index 5d5a00fab4c7c0126d53d8b9c20055bfceb2d67d..a2c07b5094aa1effef342b2d7d14abc276db05b2 100644 --- a/ee/spec/requests/groups/epics_controller_spec.rb +++ b/ee/spec/requests/groups/epics_controller_spec.rb @@ -84,7 +84,7 @@ context 'when feature flag is false' do before do - stub_feature_flags(work_item_epics: false, work_item_epics_rollout: false) + stub_feature_flags(work_item_epics: false, work_item_epics_rollout: false, namespace_level_work_items: false) end it 'exposes the workItemEpics flag' do