From 31e4575dfa2fcf1e170062dd5a37afb4b320293c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anna=20Szcz=C4=99ch?= <30683248+szczecha@users.noreply.github.com> Date: Mon, 18 Mar 2024 08:49:34 +0000 Subject: [PATCH] [E2E] Add tests for translations (#4723) * add changeset * add ttest for add and edit translation * add test for celaring translation --- .changeset/sharp-cobras-obey.md | 5 +++ playwright/data/e2eTestData.ts | 18 ++++++++++ playwright/pages/translationsPage.ts | 28 +++++++++++++-- playwright/tests/translations.spec.ts | 49 +++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 .changeset/sharp-cobras-obey.md create mode 100644 playwright/tests/translations.spec.ts diff --git a/.changeset/sharp-cobras-obey.md b/.changeset/sharp-cobras-obey.md new file mode 100644 index 00000000000..e59a087483b --- /dev/null +++ b/.changeset/sharp-cobras-obey.md @@ -0,0 +1,5 @@ +--- +"saleor-dashboard": patch +--- + +add playwright test for translations diff --git a/playwright/data/e2eTestData.ts b/playwright/data/e2eTestData.ts index e5f18cb2f00..c8d484086e8 100644 --- a/playwright/data/e2eTestData.ts +++ b/playwright/data/e2eTestData.ts @@ -380,3 +380,21 @@ export const APPS = { info: "App used in delete app test", } } + +export const TRANSLATIONS = { + translationsToBeAdded: { + id: "Q2F0ZWdvcnk6NTEy", + name: "CategoryToTranslate", + info: "Category used to add translation test", + }, + translationsToBeEdited: { + id: "UHJvZHVjdDo3OA==", + name: "Green Juice", + info: "Product used to edit translation test", + }, + translationsToBeCleared: { + id: "Q29sbGVjdGlvbjox", + name: "Summer collection", + info: "Translation used in clear translation test", + } +} \ No newline at end of file diff --git a/playwright/pages/translationsPage.ts b/playwright/pages/translationsPage.ts index e07f14ddfed..7ac9e48879a 100644 --- a/playwright/pages/translationsPage.ts +++ b/playwright/pages/translationsPage.ts @@ -1,9 +1,33 @@ import type { Page } from "@playwright/test"; +import { URL_LIST } from "@data/url"; +import { BasePage } from "@pages/basePage"; -export class TranslationsPage { +export class TranslationsPage extends BasePage { readonly page: Page; + readonly basePage: BasePage; - constructor(page: Page) { + + constructor(page: Page, + readonly translationPl_PL = page.getByTestId("PL_PL"), + readonly editTranslationNameButton = page.getByTestId("edit-name"), + readonly translationInput = page.getByTestId("translation-field").locator("input"), + readonly translationRichText = page + .getByTestId("rich-text-editor-translation") + .locator("[contenteditable]"), + readonly editTranslationDescriptionButton = page.getByTestId("edit-description"), + ) { + super(page); this.page = page; + this.basePage = new BasePage(page); + } + + async gotoTranslationsPage() { + await this.page.goto(URL_LIST.translations); } + + async goToDirectTranslationPage(translationCode: string, translatedObjectType: string, translatedObjectId: string,) { + const translationUrl = URL_LIST.translations + translationCode + "/" + translatedObjectType + "/" + translatedObjectId; + await this.page.goto(translationUrl) + } + } diff --git a/playwright/tests/translations.spec.ts b/playwright/tests/translations.spec.ts new file mode 100644 index 00000000000..f01640c6b98 --- /dev/null +++ b/playwright/tests/translations.spec.ts @@ -0,0 +1,49 @@ +import { TRANSLATIONS } from "@data/e2eTestData"; +import { expect, test } from "@playwright/test"; +import { TranslationsPage } from "@pages/translationsPage"; + +test.use({ storageState: "playwright/.auth/admin.json" }); +let translationsPage: TranslationsPage; +test.beforeEach(({ page }) => { + translationsPage = new TranslationsPage(page); +}); + +test("TC: SALEOR_121 Should be able to add translation @e2e @translations", async () => { + await translationsPage.gotoTranslationsPage(); + await translationsPage.translationPl_PL.click(); + await translationsPage.page.getByText("CategoryToTranslate").click(); + await expect(translationsPage.page.getByText("Translation Category \"CategoryToTranslate\" - PL_PL")).toBeVisible(); + await translationsPage.editTranslationNameButton.click(); + await translationsPage.translationInput.fill("Kategoria do Translacji"); + await translationsPage.saveButton.click(); + await expect(translationsPage.successBanner).toBeVisible(); + await expect(translationsPage.page.getByText("Kategoria do Translacji")).toBeVisible(); +}); + +test("TC: SALEOR_122 Should be able to edit translation @e2e @translations", async () => { + const newDescription = "Brukselka, szpinak, groszek, jarmuż, sałata, kapusta, cukinia, więcej brukselki. Wszystkie warzywa, jakich będziesz potrzebować, w jednym pysznym soku." + + await translationsPage.goToDirectTranslationPage("PL_PL", "products", TRANSLATIONS.translationsToBeEdited.id); + await expect(translationsPage.page.getByText("Translation Product \"Green Juice\" - PL_PL")).toBeVisible(); + await expect(translationsPage.page.getByText("Brukselka, szpinak")).toBeVisible(); + await translationsPage.editTranslationDescriptionButton.click(); + await translationsPage.translationRichText.clear(); + await translationsPage.translationRichText.type(newDescription); + + await translationsPage.saveButton.click(); + await expect(translationsPage.successBanner).toBeVisible(); + await expect(translationsPage.page.getByText(newDescription)).toBeVisible(); +}); + +test("TC: SALEOR_123 Should be able to clear translation @e2e @translations", async () => { + const description = "Letnia kolekcja Saleor obejmuje gamę produktów, które cieszą się popularnością na rynku.Sklep demonstracyjny na każdą porę roku.Saleor uchwycił słońce open source, e-commerce." + + await translationsPage.goToDirectTranslationPage("PL_PL", "collections", TRANSLATIONS.translationsToBeCleared.id); + await expect(translationsPage.page.getByText("Translation Collection \"Summer collection\" - PL_PL")).toBeVisible(); + await expect(translationsPage.page.getByText(description)).toBeVisible(); + await translationsPage.editTranslationDescriptionButton.click(); + await translationsPage.translationRichText.clear(); + await translationsPage.saveButton.click(); + await expect(translationsPage.successBanner).toBeVisible(); + await expect(translationsPage.page.getByText(description)).not.toBeVisible(); +});