From 9883bb3058a96ea0167d5f8956881cd1a0c18680 Mon Sep 17 00:00:00 2001
From: Zachary Cuddy <zcuddy@gitlab.com>
Date: Tue, 21 Mar 2023 10:02:46 -0500
Subject: [PATCH 1/5] Groups - README

This change adds an optional
README for Groups that will
be displayed on the Group
Overview.
---
 .../javascripts/groups/init_group_readme.js   | 26 ++++++
 .../javascripts/pages/groups/show/index.js    | 10 +++
 app/helpers/groups_helper.rb                  |  9 +++
 app/views/groups/_group_readme.html.haml      |  3 +
 app/views/groups/show.html.haml               |  2 +
 spec/features/groups_spec.rb                  | 80 +++++++++++++++++++
 6 files changed, 130 insertions(+)
 create mode 100644 app/assets/javascripts/groups/init_group_readme.js
 create mode 100644 app/views/groups/_group_readme.html.haml

diff --git a/app/assets/javascripts/groups/init_group_readme.js b/app/assets/javascripts/groups/init_group_readme.js
new file mode 100644
index 0000000000000000..d3cc3247c8dc9143
--- /dev/null
+++ b/app/assets/javascripts/groups/init_group_readme.js
@@ -0,0 +1,26 @@
+import Vue from 'vue';
+import VueApollo from 'vue-apollo';
+import apolloProvider from '~/repository/graphql';
+import FilePreview from '~/repository/components/preview/index.vue';
+
+Vue.use(VueApollo);
+
+export const initGroupReadme = () => {
+  const el = document.getElementById('js-group-readme');
+
+  if (!el) return false;
+
+  const blob = (({ webPath, name }) => ({ webPath, name }))(el.dataset);
+
+  return new Vue({
+    el,
+    apolloProvider,
+    render(createElement) {
+      return createElement(FilePreview, {
+        props: {
+          blob,
+        },
+      });
+    },
+  });
+};
diff --git a/app/assets/javascripts/pages/groups/show/index.js b/app/assets/javascripts/pages/groups/show/index.js
index 53bceb3a6f0ed4a6..d3013eb7ff4cf562 100644
--- a/app/assets/javascripts/pages/groups/show/index.js
+++ b/app/assets/javascripts/pages/groups/show/index.js
@@ -7,3 +7,13 @@ leaveByUrl('group');
 initGroupDetails();
 initGroupOverviewTabs();
 initReadMore();
+
+if (window.gon.features?.showGroupReadme) {
+  import('~/groups/init_group_readme')
+    .then(({ initGroupReadme }) => {
+      initGroupReadme();
+    })
+    .catch(() => {
+      // Fail silently
+    });
+}
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index ce64ac1f21f7567a..1ed513c7dd02178e 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -168,6 +168,15 @@ def group_overview_tabs_app_data(group)
     }
   end
 
+  def group_readme_app_data(group)
+    blob = group.group_readme&.present
+
+    {
+      web_path: blob.web_path,
+      name: blob.name
+    }
+  end
+
   def enabled_git_access_protocol_options_for_group
     case ::Gitlab::CurrentSettings.enabled_git_access_protocol
     when nil, ""
diff --git a/app/views/groups/_group_readme.html.haml b/app/views/groups/_group_readme.html.haml
new file mode 100644
index 0000000000000000..1a2c9f5891f57e4b
--- /dev/null
+++ b/app/views/groups/_group_readme.html.haml
@@ -0,0 +1,3 @@
+- return unless Feature.enabled?(:show_group_readme, @group) && @group.group_readme
+
+#js-group-readme{ data: group_readme_app_data(@group) }
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 92b5b84301949ba2..370a03ca301330ba 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -28,3 +28,5 @@
 = render_if_exists 'groups/group_activity_analytics', group: @group
 
 #js-group-overview-tabs{ data: group_overview_tabs_app_data(@group) }
+
+= render 'groups/group_readme'
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 8806d1c221917f2f..c9a8e8c981b364ef 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -512,6 +512,86 @@
     end
   end
 
+  describe 'group README', :js do
+    describe 'with :show_group_readme FF true' do
+      before do
+        stub_feature_flags(show_group_readme: true)
+      end
+
+      context 'with gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+
+          it 'renders README block on group page' do
+            visit group_path(group)
+            wait_for_requests
+
+            expect(page).to have_text('README.md')
+          end
+        end
+
+        context 'without README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, name: 'gitlab-profile', namespace: group) }
+
+          it 'does not render README block on group page' do
+            visit group_path(group)
+            wait_for_requests
+
+            expect(page).not_to have_text('README.md')
+          end
+        end
+      end
+
+      context 'without gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, :custom_repo, name: 'not-gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+
+          it 'does not render README block on group page' do
+            visit group_path(group)
+            wait_for_requests
+
+            expect(page).not_to have_text('README.md')
+          end
+        end
+
+        context 'without README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, name: 'not-gitlab-profile', namespace: group) }
+
+          it 'does not render README block on group page' do
+            visit group_path(group)
+            wait_for_requests
+
+            expect(page).not_to have_text('README.md')
+          end
+        end
+      end
+    end
+
+    describe 'with :show_group_readme FF false' do
+      before do
+        stub_feature_flags(show_group_readme: false)
+      end
+
+      context 'with gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+
+          it 'does not render README block on group page' do
+            visit group_path(group)
+            wait_for_requests
+
+            expect(page).not_to have_text('README.md')
+          end
+        end
+      end
+    end
+  end
+
   def remove_with_confirm(button_text, confirm_with)
     click_button button_text
     fill_in 'confirm_name_input', with: confirm_with
-- 
GitLab


From 37fe7e952bd08b65e24ae7b8ec17be3cf286f189 Mon Sep 17 00:00:00 2001
From: Zachary Cuddy <zcuddy@gitlab.com>
Date: Thu, 23 Mar 2023 11:24:57 -0500
Subject: [PATCH 2/5] Changes based on @tle_gitlab feedback

- Better helper methods
- Better partials
- Faster specs
---
 app/helpers/groups_helper.rb                |  12 ++-
 app/views/groups/_group_readme.html.haml    |   4 +-
 app/views/groups/show.html.haml             |   2 +-
 config/feature_categories.yml               |   1 +
 ee/spec/views/groups/show.html.haml_spec.rb | 108 ++++++++++++++++++++
 spec/features/groups_spec.rb                |  70 +++----------
 6 files changed, 133 insertions(+), 64 deletions(-)
 create mode 100644 ee/spec/views/groups/show.html.haml_spec.rb

diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 1ed513c7dd02178e..186fb609b1bcccb4 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -168,15 +168,17 @@ def group_overview_tabs_app_data(group)
     }
   end
 
-  def group_readme_app_data(group)
-    blob = group.group_readme&.present
-
+  def group_readme_app_data(group_readme)
     {
-      web_path: blob.web_path,
-      name: blob.name
+      web_path: group_readme.present.web_path,
+      name: group_readme.present.name
     }
   end
 
+  def show_group_readme?(group)
+    Feature.enabled?(:show_group_readme, group) && group.group_readme
+  end
+
   def enabled_git_access_protocol_options_for_group
     case ::Gitlab::CurrentSettings.enabled_git_access_protocol
     when nil, ""
diff --git a/app/views/groups/_group_readme.html.haml b/app/views/groups/_group_readme.html.haml
index 1a2c9f5891f57e4b..724e82594e63153a 100644
--- a/app/views/groups/_group_readme.html.haml
+++ b/app/views/groups/_group_readme.html.haml
@@ -1,3 +1,3 @@
-- return unless Feature.enabled?(:show_group_readme, @group) && @group.group_readme
+- return unless show_group_readme?(group)
 
-#js-group-readme{ data: group_readme_app_data(@group) }
+#js-group-readme{ data: group_readme_app_data(group.group_readme) }
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 370a03ca301330ba..4e664637457d44c7 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -29,4 +29,4 @@
 
 #js-group-overview-tabs{ data: group_overview_tabs_app_data(@group) }
 
-= render 'groups/group_readme'
+= render_if_exists 'groups/group_readme', group: @group
diff --git a/config/feature_categories.yml b/config/feature_categories.yml
index 1a4d6e59f2d271d6..8c91d918999d5f33 100644
--- a/config/feature_categories.yml
+++ b/config/feature_categories.yml
@@ -68,6 +68,7 @@
 - gitlab_cli
 - gitlab_docs
 - global_search
+- groups
 - helm_chart_registry
 - importers
 - incident_management
diff --git a/ee/spec/views/groups/show.html.haml_spec.rb b/ee/spec/views/groups/show.html.haml_spec.rb
new file mode 100644
index 0000000000000000..ad943552733b64c8
--- /dev/null
+++ b/ee/spec/views/groups/show.html.haml_spec.rb
@@ -0,0 +1,108 @@
+# frozen_string_literal: true
+
+# rubocop:disable RSpec/FactoryBot/AvoidCreate
+
+require 'spec_helper'
+
+RSpec.describe 'groups/show', feature_category: :groups do
+  describe 'group README' do
+    describe 'with :show_group_readme FF true' do
+      before do
+        stub_feature_flags(show_group_readme: true)
+      end
+
+      context 'with gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) do
+            create(:project, :custom_repo, name: 'gitlab-profile', namespace: group,
+              files: { 'README.md' => 'Hello World' })
+          end
+
+          before do
+            assign(:group, group)
+            render
+          end
+
+          it 'renders #js-group-readme' do
+            expect(rendered).to have_selector('#js-group-readme')
+          end
+        end
+
+        context 'without README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, name: 'gitlab-profile', namespace: group) }
+
+          before do
+            assign(:group, group)
+            render
+          end
+
+          it 'does not render #js-group-readme' do
+            expect(rendered).not_to have_selector('#js-group-readme')
+          end
+        end
+      end
+
+      context 'without gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) do
+            create(:project, :custom_repo, name: 'non-gitlab-profile', namespace: group,
+              files: { 'README.md' => 'Hello World' })
+          end
+
+          before do
+            assign(:group, group)
+            render
+          end
+
+          it 'does not render #js-group-readme' do
+            expect(rendered).not_to have_selector('#js-group-readme')
+          end
+        end
+
+        context 'without README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) { create(:project, name: 'non-gitlab-profile', namespace: group) }
+
+          before do
+            assign(:group, group)
+            render
+          end
+
+          it 'does not render #js-group-readme' do
+            expect(rendered).not_to have_selector('#js-group-readme')
+          end
+        end
+      end
+    end
+
+    describe 'with :show_group_readme FF false' do
+      before do
+        stub_feature_flags(show_group_readme: false)
+      end
+
+      context 'with gitlab-profile project' do
+        context 'with README.md' do
+          let_it_be(:group) { create(:group) }
+          let_it_be(:project) do
+            create(:project, :custom_repo, name: 'gitlab-profile', namespace: group,
+              files: { 'README.md' => 'Hello World' })
+          end
+
+          before do
+            assign(:group, group)
+            render
+          end
+
+          it 'does not render #js-group-readme' do
+            expect(rendered).not_to have_selector('#js-group-readme')
+          end
+        end
+      end
+    end
+  end
+end
+
+# rubocop:enable RSpec/FactoryBot/AvoidCreate
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index c9a8e8c981b364ef..b72affa9c5bd6dc5 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -518,55 +518,15 @@
         stub_feature_flags(show_group_readme: true)
       end
 
-      context 'with gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+      context 'with gitlab-profile project and README.md' do
+        let_it_be(:group) { create(:group) }
+        let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
 
-          it 'renders README block on group page' do
-            visit group_path(group)
-            wait_for_requests
-
-            expect(page).to have_text('README.md')
-          end
-        end
-
-        context 'without README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, name: 'gitlab-profile', namespace: group) }
-
-          it 'does not render README block on group page' do
-            visit group_path(group)
-            wait_for_requests
-
-            expect(page).not_to have_text('README.md')
-          end
-        end
-      end
-
-      context 'without gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, :custom_repo, name: 'not-gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
-
-          it 'does not render README block on group page' do
-            visit group_path(group)
-            wait_for_requests
-
-            expect(page).not_to have_text('README.md')
-          end
-        end
-
-        context 'without README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, name: 'not-gitlab-profile', namespace: group) }
-
-          it 'does not render README block on group page' do
-            visit group_path(group)
-            wait_for_requests
+        it 'renders README block on group page' do
+          visit group_path(group)
+          wait_for_requests
 
-            expect(page).not_to have_text('README.md')
-          end
+          expect(page).to have_text('README.md')
         end
       end
     end
@@ -576,17 +536,15 @@
         stub_feature_flags(show_group_readme: false)
       end
 
-      context 'with gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+      context 'with gitlab-profile project and README.md' do
+        let_it_be(:group) { create(:group) }
+        let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
 
-          it 'does not render README block on group page' do
-            visit group_path(group)
-            wait_for_requests
+        it 'does not render README block on group page' do
+          visit group_path(group)
+          wait_for_requests
 
-            expect(page).not_to have_text('README.md')
-          end
+          expect(page).not_to have_text('README.md')
         end
       end
     end
-- 
GitLab


From 3764dc4534f43d0ddbf093fcfeb0271abf640f6b Mon Sep 17 00:00:00 2001
From: Zachary Cuddy <zcuddy@gitlab.com>
Date: Tue, 28 Mar 2023 11:37:22 -0500
Subject: [PATCH 3/5] Addl changes based on @tle_gitlab feedback

- Projects factory
- build_stubbed in spec
- Revert feature category
---
 config/feature_categories.yml               |   1 -
 ee/spec/views/groups/show.html.haml_spec.rb | 116 +++++++-------------
 spec/factories/projects.rb                  |   7 ++
 spec/features/groups_spec.rb                |   4 +-
 4 files changed, 50 insertions(+), 78 deletions(-)

diff --git a/config/feature_categories.yml b/config/feature_categories.yml
index 8c91d918999d5f33..1a4d6e59f2d271d6 100644
--- a/config/feature_categories.yml
+++ b/config/feature_categories.yml
@@ -68,7 +68,6 @@
 - gitlab_cli
 - gitlab_docs
 - global_search
-- groups
 - helm_chart_registry
 - importers
 - incident_management
diff --git a/ee/spec/views/groups/show.html.haml_spec.rb b/ee/spec/views/groups/show.html.haml_spec.rb
index ad943552733b64c8..8a98986aabb44baa 100644
--- a/ee/spec/views/groups/show.html.haml_spec.rb
+++ b/ee/spec/views/groups/show.html.haml_spec.rb
@@ -1,79 +1,42 @@
 # frozen_string_literal: true
 
-# rubocop:disable RSpec/FactoryBot/AvoidCreate
-
 require 'spec_helper'
 
-RSpec.describe 'groups/show', feature_category: :groups do
+RSpec.describe 'groups/show', feature_category: :projects do
   describe 'group README' do
+    let_it_be(:group) { build_stubbed(:group) }
+    let_it_be(:readme_project) { build_stubbed(:project, :readme) }
+
+    before do
+      assign(:group, group)
+    end
+
     describe 'with :show_group_readme FF true' do
       before do
         stub_feature_flags(show_group_readme: true)
       end
 
-      context 'with gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) do
-            create(:project, :custom_repo, name: 'gitlab-profile', namespace: group,
-              files: { 'README.md' => 'Hello World' })
-          end
-
-          before do
-            assign(:group, group)
-            render
-          end
-
-          it 'renders #js-group-readme' do
-            expect(rendered).to have_selector('#js-group-readme')
-          end
+      context 'with readme project' do
+        before do
+          allow(group).to receive(:group_readme).and_return(readme_project)
         end
 
-        context 'without README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, name: 'gitlab-profile', namespace: group) }
+        it 'renders #js-group-readme' do
+          render
 
-          before do
-            assign(:group, group)
-            render
-          end
-
-          it 'does not render #js-group-readme' do
-            expect(rendered).not_to have_selector('#js-group-readme')
-          end
+          expect(rendered).to have_selector('#js-group-readme')
         end
       end
 
-      context 'without gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) do
-            create(:project, :custom_repo, name: 'non-gitlab-profile', namespace: group,
-              files: { 'README.md' => 'Hello World' })
-          end
-
-          before do
-            assign(:group, group)
-            render
-          end
-
-          it 'does not render #js-group-readme' do
-            expect(rendered).not_to have_selector('#js-group-readme')
-          end
+      context 'without readme project' do
+        before do
+          allow(group).to receive(:group_readme).and_return(nil)
         end
 
-        context 'without README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) { create(:project, name: 'non-gitlab-profile', namespace: group) }
-
-          before do
-            assign(:group, group)
-            render
-          end
+        it 'does not render #js-group-readme' do
+          render
 
-          it 'does not render #js-group-readme' do
-            expect(rendered).not_to have_selector('#js-group-readme')
-          end
+          expect(rendered).not_to have_selector('#js-group-readme')
         end
       end
     end
@@ -83,26 +46,29 @@
         stub_feature_flags(show_group_readme: false)
       end
 
-      context 'with gitlab-profile project' do
-        context 'with README.md' do
-          let_it_be(:group) { create(:group) }
-          let_it_be(:project) do
-            create(:project, :custom_repo, name: 'gitlab-profile', namespace: group,
-              files: { 'README.md' => 'Hello World' })
-          end
-
-          before do
-            assign(:group, group)
-            render
-          end
-
-          it 'does not render #js-group-readme' do
-            expect(rendered).not_to have_selector('#js-group-readme')
-          end
+      context 'with readme project' do
+        before do
+          allow(group).to receive(:group_readme).and_return(readme_project)
+        end
+
+        it 'does not render #js-group-readme' do
+          render
+
+          expect(rendered).not_to have_selector('#js-group-readme')
+        end
+      end
+
+      context 'without readme project' do
+        before do
+          allow(group).to receive(:group_readme).and_return(nil)
+        end
+
+        it 'does not render #js-group-readme' do
+          render
+
+          expect(rendered).not_to have_selector('#js-group-readme')
         end
       end
     end
   end
 end
-
-# rubocop:enable RSpec/FactoryBot/AvoidCreate
diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb
index 299dd165807b95da..c078514514b0193e 100644
--- a/spec/factories/projects.rb
+++ b/spec/factories/projects.rb
@@ -535,4 +535,11 @@
   trait :in_subgroup do
     namespace factory: [:group, :nested]
   end
+
+  trait :readme do
+    custom_repo
+
+    name { 'gitlab-profile' }
+    files { { 'README.md' => 'Hello World' } }
+  end
 end
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index b72affa9c5bd6dc5..f86db6674208f4c7 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -520,7 +520,7 @@
 
       context 'with gitlab-profile project and README.md' do
         let_it_be(:group) { create(:group) }
-        let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+        let_it_be(:project) { create(:project, :readme, namespace: group) }
 
         it 'renders README block on group page' do
           visit group_path(group)
@@ -538,7 +538,7 @@
 
       context 'with gitlab-profile project and README.md' do
         let_it_be(:group) { create(:group) }
-        let_it_be(:project) { create(:project, :custom_repo, name: 'gitlab-profile', namespace: group, files: { 'README.md' => 'Hello World' }) }
+        let_it_be(:project) { create(:project, :readme, namespace: group) }
 
         it 'does not render README block on group page' do
           visit group_path(group)
-- 
GitLab


From 0d70101d59c0783c4cd645cefeacafcb6a83fa9d Mon Sep 17 00:00:00 2001
From: Zachary Cuddy <zcuddy@gitlab.com>
Date: Tue, 28 Mar 2023 11:54:31 -0500
Subject: [PATCH 4/5] Changes based on @fernando-c feedback

- More readabile dataset variables
---
 app/assets/javascripts/groups/init_group_readme.js | 4 ++--
 app/assets/javascripts/pages/groups/show/index.js  | 4 +---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/app/assets/javascripts/groups/init_group_readme.js b/app/assets/javascripts/groups/init_group_readme.js
index d3cc3247c8dc9143..7cde64fed4da15eb 100644
--- a/app/assets/javascripts/groups/init_group_readme.js
+++ b/app/assets/javascripts/groups/init_group_readme.js
@@ -10,7 +10,7 @@ export const initGroupReadme = () => {
 
   if (!el) return false;
 
-  const blob = (({ webPath, name }) => ({ webPath, name }))(el.dataset);
+  const { webPath, name } = el.dataset;
 
   return new Vue({
     el,
@@ -18,7 +18,7 @@ export const initGroupReadme = () => {
     render(createElement) {
       return createElement(FilePreview, {
         props: {
-          blob,
+          blob: { webPath, name },
         },
       });
     },
diff --git a/app/assets/javascripts/pages/groups/show/index.js b/app/assets/javascripts/pages/groups/show/index.js
index d3013eb7ff4cf562..85afdaaf0d832078 100644
--- a/app/assets/javascripts/pages/groups/show/index.js
+++ b/app/assets/javascripts/pages/groups/show/index.js
@@ -13,7 +13,5 @@ if (window.gon.features?.showGroupReadme) {
     .then(({ initGroupReadme }) => {
       initGroupReadme();
     })
-    .catch(() => {
-      // Fail silently
-    });
+    .catch(() => {});
 }
-- 
GitLab


From 1700c20c38c4f8b04d6b30ac7223e4daf3dc37c1 Mon Sep 17 00:00:00 2001
From: Zachary Cuddy <zcuddy@gitlab.com>
Date: Thu, 30 Mar 2023 10:26:22 -0500
Subject: [PATCH 5/5] Changes based on reviewer feedback

- Remove dynamic import
- Use render partial
- Proper spec file location
- Proper feature category
---
 app/assets/javascripts/pages/groups/show/index.js     | 10 ++--------
 app/views/groups/show.html.haml                       |  2 +-
 {ee/spec => spec}/views/groups/show.html.haml_spec.rb |  2 +-
 3 files changed, 4 insertions(+), 10 deletions(-)
 rename {ee/spec => spec}/views/groups/show.html.haml_spec.rb (96%)

diff --git a/app/assets/javascripts/pages/groups/show/index.js b/app/assets/javascripts/pages/groups/show/index.js
index 85afdaaf0d832078..f6a4ca0f360e2ea2 100644
--- a/app/assets/javascripts/pages/groups/show/index.js
+++ b/app/assets/javascripts/pages/groups/show/index.js
@@ -1,5 +1,6 @@
 import leaveByUrl from '~/namespaces/leave_by_url';
 import { initGroupOverviewTabs } from '~/groups/init_overview_tabs';
+import { initGroupReadme } from '~/groups/init_group_readme';
 import initReadMore from '~/read_more';
 import initGroupDetails from '../shared/group_details';
 
@@ -7,11 +8,4 @@ leaveByUrl('group');
 initGroupDetails();
 initGroupOverviewTabs();
 initReadMore();
-
-if (window.gon.features?.showGroupReadme) {
-  import('~/groups/init_group_readme')
-    .then(({ initGroupReadme }) => {
-      initGroupReadme();
-    })
-    .catch(() => {});
-}
+initGroupReadme();
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 4e664637457d44c7..8d7a7dd6b1b95b84 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -29,4 +29,4 @@
 
 #js-group-overview-tabs{ data: group_overview_tabs_app_data(@group) }
 
-= render_if_exists 'groups/group_readme', group: @group
+= render partial: 'groups/group_readme', locals: { group: @group }
diff --git a/ee/spec/views/groups/show.html.haml_spec.rb b/spec/views/groups/show.html.haml_spec.rb
similarity index 96%
rename from ee/spec/views/groups/show.html.haml_spec.rb
rename to spec/views/groups/show.html.haml_spec.rb
index 8a98986aabb44baa..9c876f56771cdb7b 100644
--- a/ee/spec/views/groups/show.html.haml_spec.rb
+++ b/spec/views/groups/show.html.haml_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe 'groups/show', feature_category: :projects do
+RSpec.describe 'groups/show', feature_category: :subgroups do
   describe 'group README' do
     let_it_be(:group) { build_stubbed(:group) }
     let_it_be(:readme_project) { build_stubbed(:project, :readme) }
-- 
GitLab