Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {
InsightsMessages,
getTranslations,
replaceTemplate,
escapeRegex,
} from './utils/translations.js';
import {
visitComponent,
Expand Down Expand Up @@ -249,20 +250,26 @@ test.describe(() => {
const panel = getPanel(
page,
new RegExp(
replaceTemplate(translations.searches.totalCount, { count: '[1,2]' }),
escapeRegex(
replaceTemplate(translations.searches.totalCount, { count: '' }),
).replace('', '[1,2]'),
),
);
await panel.scrollIntoViewIfNeeded();
await expect(panel.locator('.recharts-surface')).toBeVisible();
const averageTextContent = replaceTemplate(
translations.searches.averageText,
{
count: '[1,2]',
count: '__COUNT__',
period: translations.searches.hour,
},
);
const averageText = `${translations.searches.averagePrefix} ${averageTextContent}${translations.searches.averageSuffix}`;
await expect(panel).toContainText(new RegExp(averageText));
const escapedAverageText = escapeRegex(averageText).replace(
'__COUNT__',
'[1,2]',
);
await expect(panel).toContainText(new RegExp(escapedAverageText));
});

test('New data shows in top templates', async ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,24 @@
*/
import { Page, expect } from '@playwright/test';

/**
* Mapping of locale codes to their native display names
*/
const LOCALE_DISPLAY_NAMES: Record<string, string> = {
en: 'English',
fr: 'Français',
it: 'Italiano',
ja: '日本語',
};

/**
* Get the display name for a locale code
*/
function getLocaleDisplayName(locale: string): string {
const baseLocale = locale.split('-')[0];
return LOCALE_DISPLAY_NAMES[baseLocale] || locale;
}

/**
* Navigate to a page using the navigation link text
*/
Expand Down Expand Up @@ -79,10 +97,14 @@ export async function switchToLocale(
page: Page,
locale: string,
): Promise<void> {
await page.getByRole('link', { name: 'Settings' }).click();
await page.getByRole('button', { name: 'English' }).click();
await page.getByRole('option', { name: locale }).click();
await page.locator('a').filter({ hasText: 'Home' }).click();
const baseLocale = locale.split('-')[0];
if (baseLocale !== 'en') {
const displayName = getLocaleDisplayName(locale);
await page.getByRole('link', { name: 'Settings' }).click();
await page.getByRole('button', { name: 'English' }).click();
await page.getByRole('option', { name: displayName }).click();
await page.locator('a').filter({ hasText: 'Home' }).click();
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
/* eslint-disable @backstage/no-relative-monorepo-imports */
import { adoptionInsightsMessages } from '../../../../plugins/adoption-insights/src/translations/ref.js';
import adoptionInsightsTranslationDe from '../../../../plugins/adoption-insights/src/translations/de.js';
import adoptionInsightsTranslationFr from '../../../../plugins/adoption-insights/src/translations/fr.js';
import adoptionInsightsTranslationEs from '../../../../plugins/adoption-insights/src/translations/es.js';
import adoptionInsightsTranslationFr from '../../../../plugins/adoption-insights/src/translations/fr.js';
import adoptionInsightsTranslationIt from '../../../../plugins/adoption-insights/src/translations/it.js';
import adoptionInsightsTranslationJa from '../../../../plugins/adoption-insights/src/translations/ja.js';
/* eslint-enable @backstage/no-relative-monorepo-imports */

export type InsightsMessages = typeof adoptionInsightsMessages;
Expand All @@ -44,14 +45,16 @@ export function getTranslations(locale: string) {
switch (locale) {
case 'en':
return adoptionInsightsMessages;
case 'fr':
return transform(adoptionInsightsTranslationFr.messages);
case 'de':
return transform(adoptionInsightsTranslationDe.messages);
case 'es':
return transform(adoptionInsightsTranslationEs.messages);
case 'fr':
return transform(adoptionInsightsTranslationFr.messages);
case 'it':
return transform(adoptionInsightsTranslationIt.messages);
case 'ja':
return transform(adoptionInsightsTranslationJa.messages);
default:
return adoptionInsightsMessages;
}
Expand All @@ -73,3 +76,12 @@ export function replaceTemplate(
}
return result;
}

/**
* Escape special regex characters in a string
* @param str - String to escape
* @returns String with regex special characters escaped
*/
export function escapeRegex(str: string): string {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
16 changes: 16 additions & 0 deletions workspaces/adoption-insights/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,21 @@ export default defineConfig({
locale: 'fr',
},
},
{
name: 'it',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'it',
},
},
{
name: 'ja',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'ja',
},
},
],
});
4 changes: 2 additions & 2 deletions workspaces/bulk-import/packages/app/e2e-tests/app.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ test.describe('Bulk Import', () => {
// Wait for the sidebar to be visible before navigating
await expect(sharedPage.getByText('My Company Catalog')).toBeVisible();
// Wait for catalog to load - use English text since we haven't switched locale yet
await expect(sharedPage.getByText('All Components (1)')).toBeVisible({
await expect(sharedPage.getByText('All Components (0)')).toBeVisible({
timeout: waitTimeout,
});

Expand Down Expand Up @@ -257,7 +257,7 @@ test.describe('Bulk Import', () => {
.getByRole('button', { name: translations.common.import })
.click();
await expect(
sharedPage.getByText(translations.status.imported),
sharedPage.locator('tbody').getByText(translations.status.imported),
).toBeVisible();
await expect(sharedPage.locator('tbody')).toMatchAriaSnapshot(`
- cell "${translations.status.waitingForApproval} ${translations.repositories.pr} , Opens in a new window":
Expand Down
26 changes: 23 additions & 3 deletions workspaces/bulk-import/packages/app/e2e-tests/utils/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,39 @@
import AxeBuilder from '@axe-core/playwright';
import { expect, Page, TestInfo } from '@playwright/test';

/**
* Mapping of locale codes to their native display names
*/
const LOCALE_DISPLAY_NAMES: Record<string, string> = {
en: 'English',
fr: 'Français',
it: 'Italiano',
ja: '日本語',
};

/**
* Get the display name for a locale code
*/
export function getLocaleDisplayName(locale: string): string {
const baseLocale = locale.split('-')[0];
return LOCALE_DISPLAY_NAMES[baseLocale] || locale;
}

/**
* Switch to a different locale in the application settings
* @param page - Playwright page object
* @param locale - The locale to switch to (e.g., 'en', 'fr', 'de', 'es')
* @param locale - The locale to switch to (e.g., 'en', 'fr', 'it', 'ja')
*/
export async function switchToLocale(
page: Page,
locale: string,
): Promise<void> {
if (locale !== 'en') {
const baseLocale = locale.split('-')[0];
if (baseLocale !== 'en') {
const displayName = getLocaleDisplayName(locale);
await page.getByRole('link', { name: 'Settings' }).click();
await page.getByRole('button', { name: 'English' }).click();
await page.getByRole('option', { name: locale }).click();
await page.getByRole('option', { name: displayName }).click();
await page.locator('a').filter({ hasText: 'Home' }).click();
// Wait for page to settle after locale switch and reload
await page.waitForLoadState('networkidle');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
/* eslint-disable @backstage/no-relative-monorepo-imports */
import { bulkImportMessages } from '../../../../plugins/bulk-import/src/translations/ref.js';
import bulkImportTranslationDe from '../../../../plugins/bulk-import/src/translations/de.js';
import bulkImportTranslationFr from '../../../../plugins/bulk-import/src/translations/fr.js';
import bulkImportTranslationEs from '../../../../plugins/bulk-import/src/translations/es.js';
import bulkImportTranslationFr from '../../../../plugins/bulk-import/src/translations/fr.js';
import bulkImportTranslationIt from '../../../../plugins/bulk-import/src/translations/it.js';
import bulkImportTranslationJa from '../../../../plugins/bulk-import/src/translations/ja.js';
/* eslint-enable @backstage/no-relative-monorepo-imports */

export type BulkImportMessages = typeof bulkImportMessages;
Expand All @@ -43,12 +45,16 @@ export function getTranslations(locale: string): BulkImportMessages {
switch (locale) {
case 'en':
return bulkImportMessages;
case 'fr':
return transform(bulkImportTranslationFr.messages);
case 'de':
return transform(bulkImportTranslationDe.messages);
case 'es':
return transform(bulkImportTranslationEs.messages);
case 'fr':
return transform(bulkImportTranslationFr.messages);
case 'it':
return transform(bulkImportTranslationIt.messages);
case 'ja':
return transform(bulkImportTranslationJa.messages);
default:
return bulkImportMessages;
}
Expand Down
16 changes: 16 additions & 0 deletions workspaces/bulk-import/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,21 @@ export default defineConfig({
locale: 'fr',
},
},
{
name: 'it',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'it',
},
},
{
name: 'ja',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'ja',
},
},
],
});
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,24 @@ import { runAccessibilityTests } from './utils/accessibility';
import { ExtensionHelper } from './utils/helper';
import { ExtensionsMessages, getTranslations } from './utils/translations';

/**
* Mapping of locale codes to their native display names
*/
const LOCALE_DISPLAY_NAMES: Record<string, string> = {
en: 'English',
fr: 'Français',
it: 'Italiano',
ja: '日本語',
};

/**
* Get the display name for a locale code
*/
function getLocaleDisplayName(locale: string): string {
const baseLocale = locale.split('-')[0];
return LOCALE_DISPLAY_NAMES[baseLocale] || locale;
}

test.describe('Admin > Extensions', () => {
let extensions: Extensions;
let extensionHelper: ExtensionHelper;
Expand All @@ -28,9 +46,13 @@ test.describe('Admin > Extensions', () => {
let sharedContext: BrowserContext;

async function switchToLocale(page: Page, locale: string): Promise<void> {
const baseLocale = locale.split('-')[0];
if (baseLocale === 'en') return;

const displayName = getLocaleDisplayName(locale);
await page.getByRole('link', { name: 'Settings' }).click();
await page.getByRole('button', { name: 'English' }).click();
await page.getByRole('option', { name: locale }).click();
await page.getByRole('option', { name: displayName }).click();
await page.locator('a').filter({ hasText: 'Home' }).click();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ export class Extensions {
const navLink = this.page.getByRole('link', { name: `${navText}` }).first();
await navLink.waitFor({ state: 'visible', timeout: 15_000 });
await navLink.dispatchEvent('click');
await this.page.waitForTimeout(10000);
await this.page
.getByRole('heading', { name: navText })
.first()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
/* eslint-disable @backstage/no-relative-monorepo-imports */
import { extensionsMessages } from '../../../../plugins/extensions/src/translations/ref.js';
import extensionsTranslationDe from '../../../../plugins/extensions/src/translations/de.js';
import extensionsTranslationFr from '../../../../plugins/extensions/src/translations/fr.js';
import extensionsTranslationEs from '../../../../plugins/extensions/src/translations/es.js';
import extensionsTranslationFr from '../../../../plugins/extensions/src/translations/fr.js';
import extensionsTranslationIt from '../../../../plugins/extensions/src/translations/it.js';
import extensionsTranslationJa from '../../../../plugins/extensions/src/translations/ja.js';
/* eslint-enable @backstage/no-relative-monorepo-imports */

export type ExtensionsMessages = typeof extensionsMessages;
Expand All @@ -44,14 +45,16 @@ export function getTranslations(locale: string) {
switch (locale) {
case 'en':
return extensionsMessages;
case 'fr':
return transform(extensionsTranslationFr.messages);
case 'de':
return transform(extensionsTranslationDe.messages);
case 'es':
return transform(extensionsTranslationEs.messages);
case 'fr':
return transform(extensionsTranslationFr.messages);
case 'it':
return transform(extensionsTranslationIt.messages);
case 'ja':
return transform(extensionsTranslationJa.messages);
default:
return extensionsMessages;
}
Expand Down
16 changes: 16 additions & 0 deletions workspaces/extensions/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,21 @@ export default defineConfig({
locale: 'fr',
},
},
{
name: 'it',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'it',
},
},
{
name: 'ja',
testDir: 'packages/app/e2e-tests',
use: {
channel: 'chrome',
locale: 'ja',
},
},
],
});
Loading
Loading