Skip to content

Commit 38d96fa

Browse files
try to fix locale bugs that happen in CI build but not locally
1 parent 78edc21 commit 38d96fa

File tree

4 files changed

+63
-29
lines changed

4 files changed

+63
-29
lines changed

webview-ui/src/components/package-manager/components/__tests__/PackageManagerItemCard.test.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,12 @@ describe("PackageManagerItemCard", () => {
6464

6565
expect(screen.getByText("Test Package")).toBeInTheDocument()
6666
expect(screen.getByText("A test package")).toBeInTheDocument()
67-
expect(screen.getByText("by Test Author")).toBeInTheDocument()
67+
expect(
68+
screen.getByText((content, element) => {
69+
// This will match the translated text "by Test Author" regardless of how it's structured
70+
return element?.textContent === "by Test Author"
71+
}),
72+
).toBeInTheDocument()
6873
expect(screen.getByText(/Package/i)).toBeInTheDocument() // Using case-insensitive regex since translations might vary in case
6974
})
7075

@@ -162,7 +167,8 @@ describe("PackageManagerItemCard", () => {
162167
it("should render expandable details section when item has subcomponents", () => {
163168
renderWithProviders(<PackageManagerItemCard {...defaultProps} />)
164169

165-
expect(screen.getByText("Component Details")).toBeInTheDocument()
170+
// The component uses t("package-manager:items.card.externalComponents", { count: 0 })
171+
expect(screen.getByText("Contains 0 external component")).toBeInTheDocument()
166172
})
167173

168174
it("should not render details section when item has no subcomponents", () => {
@@ -174,10 +180,11 @@ describe("PackageManagerItemCard", () => {
174180

175181
it("should show grouped items when expanded", () => {
176182
renderWithProviders(<PackageManagerItemCard {...defaultProps} />)
183+
fireEvent.click(screen.getByText("Contains 0 external component"))
177184

178-
fireEvent.click(screen.getByText("Component Details"))
179-
180-
expect(screen.getByText("MCP Servers")).toBeInTheDocument()
185+
// These use the type-group translations
186+
expect(screen.getByText((content, element) => element?.textContent === "MCP Servers")).toBeInTheDocument()
187+
expect(screen.getByText((content, element) => element?.textContent === "Modes")).toBeInTheDocument()
181188
expect(screen.getByText("Modes")).toBeInTheDocument()
182189

183190
// Check for items using getByRole and textContent
@@ -190,8 +197,7 @@ describe("PackageManagerItemCard", () => {
190197

191198
it("should maintain proper order of items within groups", () => {
192199
renderWithProviders(<PackageManagerItemCard {...defaultProps} />)
193-
194-
fireEvent.click(screen.getByText("Component Details"))
200+
fireEvent.click(screen.getByText("Contains 0 external component"))
195201

196202
const items = screen.getAllByRole("listitem")
197203
expect(items[0]).toHaveTextContent("Test Server")

webview-ui/src/components/package-manager/components/__tests__/TypeGroup.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ describe("TypeGroup", () => {
2020
it("should render type header and items", () => {
2121
renderWithProviders(<TypeGroup type="mcp server" items={mockItems} />)
2222

23-
// Test using translation key
24-
expect(screen.getByText("MCP Servers")).toBeInTheDocument()
23+
// Test using translation key with flexible text matching
24+
expect(screen.getByText((content, element) => element?.textContent === "MCP Servers")).toBeInTheDocument()
2525

2626
// Check items using list roles and text content
2727
const items = screen.getAllByRole("listitem")
@@ -37,12 +37,12 @@ describe("TypeGroup", () => {
3737
{ input: "mcp server", expected: "MCP Servers" },
3838
{ input: "prompt", expected: "Prompts" },
3939
{ input: "package", expected: "Packages" },
40-
{ input: "custom", expected: "Customs" },
40+
{ input: "custom", expected: "Customs" }, // Uses generic-type with capitalization
4141
]
4242

4343
types.forEach(({ input, expected }) => {
4444
const { unmount } = renderWithProviders(<TypeGroup type={input} items={mockItems} />)
45-
expect(screen.getByText(expected)).toBeInTheDocument()
45+
expect(screen.getByText((content, element) => element?.textContent === expected)).toBeInTheDocument()
4646
unmount()
4747
})
4848
})

webview-ui/src/i18n/test-utils.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,25 @@ export const setupI18nForTests = () => {
2929
chat: {
3030
test: "Test",
3131
},
32+
"package-manager": {
33+
items: {
34+
card: {
35+
by: "by {{author}}",
36+
viewSource: "View",
37+
externalComponents: "Contains {{count}} external component",
38+
externalComponents_plural: "Contains {{count}} external components",
39+
},
40+
},
41+
filters: {
42+
type: {
43+
package: "Package",
44+
mode: "Mode",
45+
},
46+
tags: {
47+
clickToFilter: "Click tags to filter items",
48+
},
49+
},
50+
},
3251
},
3352
},
3453
})

webview-ui/src/test/test-utils.tsx

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,33 @@ i18next.use(initReactI18next).init({
2020
resources: {
2121
en: {
2222
"package-manager": {
23-
// Type group translations
24-
"type-group.mcp-servers": "MCP Servers",
25-
"type-group.modes": "Modes",
26-
"type-group.prompts": "Prompts",
27-
"type-group.packages": "Packages",
28-
"type-group.match": "Match",
29-
"type-group.generic-type": "{{type}}s",
30-
31-
// Item card translations
32-
"item-card.by-author": "by {{author}}",
33-
"item-card.type-package": "Package",
34-
"item-card.type-mode": "Mode",
35-
"item-card.type-mcp-server": "MCP Server",
36-
"item-card.type-prompt": "Prompt",
37-
"item-card.source": "Source",
38-
"item-card.component-details": "Component Details",
39-
"item-card.filter-by-tag": "Filter by tag",
40-
"item-card.by": "by",
23+
filters: {
24+
type: {
25+
package: "Package",
26+
mode: "Mode",
27+
"mcp server": "MCP Server",
28+
prompt: "Prompt",
29+
},
30+
tags: {
31+
clickToFilter: "Click tags to filter items",
32+
},
33+
},
34+
items: {
35+
card: {
36+
by: "by {{author}}",
37+
viewSource: "View",
38+
externalComponents: "Contains {{count}} external component",
39+
externalComponents_plural: "Contains {{count}} external components",
40+
},
41+
},
42+
"type-group": {
43+
"mcp-servers": "MCP Servers",
44+
modes: "Modes",
45+
prompts: "Prompts",
46+
packages: "Packages",
47+
match: "Match",
48+
"generic-type": "{{type}}s",
49+
},
4150
},
4251
},
4352
},

0 commit comments

Comments
 (0)