From a9389290377ad0ff35113fe828c7e6c1bf33cbaf Mon Sep 17 00:00:00 2001 From: Coung Ngo <cngo@gitlab.com> Date: Sat, 22 Jul 2023 00:13:44 +0000 Subject: [PATCH] Add group level work items route New /groups/<group_full_path>/-/work_items --- .../groups/work_items_controller.rb | 11 +++++ app/views/groups/work_items/index.html.haml | 1 + .../namespace_level_work_items.yml | 8 +++ config/routes/group.rb | 2 + locale/gitlab.pot | 3 ++ .../groups/work_items_controller_spec.rb | 49 +++++++++++++++++++ 6 files changed, 74 insertions(+) create mode 100644 app/controllers/groups/work_items_controller.rb create mode 100644 app/views/groups/work_items/index.html.haml create mode 100644 config/feature_flags/development/namespace_level_work_items.yml create mode 100644 spec/requests/groups/work_items_controller_spec.rb diff --git a/app/controllers/groups/work_items_controller.rb b/app/controllers/groups/work_items_controller.rb new file mode 100644 index 0000000000000..d1e15c81471ed --- /dev/null +++ b/app/controllers/groups/work_items_controller.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Groups + class WorkItemsController < Groups::ApplicationController + feature_category :team_planning + + def index + not_found unless Feature.enabled?(:namespace_level_work_items, group) + end + end +end diff --git a/app/views/groups/work_items/index.html.haml b/app/views/groups/work_items/index.html.haml new file mode 100644 index 0000000000000..9aa90b913a215 --- /dev/null +++ b/app/views/groups/work_items/index.html.haml @@ -0,0 +1 @@ +- page_title s_('WorkItem|Work items') diff --git a/config/feature_flags/development/namespace_level_work_items.yml b/config/feature_flags/development/namespace_level_work_items.yml new file mode 100644 index 0000000000000..794e56cf425ea --- /dev/null +++ b/config/feature_flags/development/namespace_level_work_items.yml @@ -0,0 +1,8 @@ +--- +name: namespace_level_work_items +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127124 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/419186 +milestone: '16.3' +type: development +group: group::project management +default_enabled: false diff --git a/config/routes/group.rb b/config/routes/group.rb index 9b346867f78ce..16371fca89e3f 100644 --- a/config/routes/group.rb +++ b/config/routes/group.rb @@ -160,6 +160,8 @@ end resources :achievements, only: [:index, :new, :edit] + + resources :work_items, only: [:index] end scope( diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 7960d24b762e3..23df88425ca01 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -52541,6 +52541,9 @@ msgstr "" msgid "WorkItem|Work item not found" msgstr "" +msgid "WorkItem|Work items" +msgstr "" + msgid "WorkItem|You're only seeing %{boldStart}other activity%{boldEnd} in the feed. To add a comment, switch to one of the following options." msgstr "" diff --git a/spec/requests/groups/work_items_controller_spec.rb b/spec/requests/groups/work_items_controller_spec.rb new file mode 100644 index 0000000000000..c47b3f03ec118 --- /dev/null +++ b/spec/requests/groups/work_items_controller_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Group Level Work Items', feature_category: :team_planning do + let_it_be(:group) { create(:group, :private) } + let_it_be(:project) { create(:project, group: group) } + let_it_be(:developer) { create(:user).tap { |u| group.add_developer(u) } } + + describe 'GET /groups/:group/-/work_items' do + let(:work_items_path) { url_for(controller: 'groups/work_items', action: :index, group_id: group.full_path) } + + before do + sign_in(current_user) + end + + context 'when the user can read the group' do + let(:current_user) { developer } + + it 'renders index' do + get work_items_path + + expect(response).to have_gitlab_http_status(:ok) + end + + context 'when the namespace_level_work_items feature flag is disabled' do + before do + stub_feature_flags(namespace_level_work_items: false) + end + + it 'returns not found' do + get work_items_path + + expect(response).to have_gitlab_http_status(:not_found) + end + end + end + + context 'when the user cannot read the group' do + let(:current_user) { create(:user) } + + it 'returns not found' do + get work_items_path + + expect(response).to have_gitlab_http_status(:not_found) + end + end + end +end -- GitLab