From b220f902ac42310c6ba33fb9367237fca3f7b7a9 Mon Sep 17 00:00:00 2001
From: Alexander Polyankin <alexander.polyankin@metabase.com>
Date: Mon, 14 Aug 2023 13:06:31 +0300
Subject: [PATCH] Fix crash in admin settings in a non-default locale (#33133)

---
 .../33035-group-translations.cy.spec.js         | 17 +++++++++++++++++
 .../selectors/data-permissions/group-sidebar.ts |  3 +++
 .../selectors/data-permissions/groups.ts        | 12 ++----------
 3 files changed, 22 insertions(+), 10 deletions(-)
 create mode 100644 e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js

diff --git a/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js b/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js
new file mode 100644
index 00000000000..bfb2d7bc3ff
--- /dev/null
+++ b/e2e/test/scenarios/admin/databases/reproductions/33035-group-translations.cy.spec.js
@@ -0,0 +1,17 @@
+import { restore } from "e2e/support/helpers";
+import { SAMPLE_DB_ID } from "e2e/support/cypress_data";
+
+describe("issue 33035", () => {
+  beforeEach(() => {
+    restore();
+    cy.signInAsAdmin();
+    cy.request("GET", "/api/user/current").then(({ body: { id: user_id } }) => {
+      cy.request("PUT", `/api/user/${user_id}`, { locale: "de" });
+    });
+  });
+
+  it("databases page should work in a non-default locale (metabase#33035)", () => {
+    cy.visit(`/admin/permissions/data/database/${SAMPLE_DB_ID}`);
+    cy.findByRole("main").findByText("Orders").should("be.visible");
+  });
+});
diff --git a/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts b/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts
index 06aac8b0f3d..6cb92d7eb0e 100644
--- a/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts
+++ b/frontend/src/metabase/admin/permissions/selectors/data-permissions/group-sidebar.ts
@@ -3,6 +3,7 @@ import { t } from "ttag";
 
 import { State } from "metabase-types/store";
 import { Group } from "metabase-types/api";
+import { getGroupNameLocalized } from "metabase/lib/groups";
 import { RawGroupRouteParams } from "../../types";
 import { getOrderedGroups } from "./groups";
 
@@ -28,11 +29,13 @@ export const getGroupsSidebar = createSelector(
 
     const pinnedGroupItems = pinnedGroups.map(group => ({
       ...group,
+      name: getGroupNameLocalized(group),
       icon: "bolt",
     }));
 
     const unpinnedGroupItems = unpinnedGroups.map(group => ({
       ...group,
+      name: getGroupNameLocalized(group),
       icon: "group",
     }));
 
diff --git a/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts b/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts
index a92bf4d276e..eb3daf7bf8c 100644
--- a/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts
+++ b/frontend/src/metabase/admin/permissions/selectors/data-permissions/groups.ts
@@ -1,14 +1,9 @@
 import { createSelector } from "@reduxjs/toolkit";
 import _ from "underscore";
-import { assoc } from "icepick";
 
 import Groups from "metabase/entities/groups";
 import { Group } from "metabase-types/api";
-import {
-  getGroupNameLocalized,
-  isAdminGroup,
-  isDefaultGroup,
-} from "metabase/lib/groups";
+import { isAdminGroup, isDefaultGroup } from "metabase/lib/groups";
 
 const isPinnedGroup = (group: Group) =>
   isAdminGroup(group) || isDefaultGroup(group);
@@ -16,10 +11,7 @@ const isPinnedGroup = (group: Group) =>
 export const getOrderedGroups = createSelector(
   Groups.selectors.getList,
   (groups: Group[]) => {
-    const translatedGroups = groups.map(group =>
-      assoc(group, "name", getGroupNameLocalized(group)),
-    );
-    return _.partition(translatedGroups, isPinnedGroup);
+    return _.partition(groups, isPinnedGroup);
   },
 );
 
-- 
GitLab