/// import "../support/commands"; describe("Проверка apology page", () => { // Конфигурация тестов для разных языков const localeConfigs = [ { locale: "ru", urlPrefix: "", // русский по умолчанию description: "русский (по умолчанию)", }, { locale: "ru", urlPrefix: "/ru", description: "русский (явно указан)", }, { locale: "en", urlPrefix: "/en", description: "английский", }, { locale: "uz", urlPrefix: "/uz", description: "узбекский", }, ]; // Тестовые случаи с ожидаемыми ошибками const testCases = [ { name: "неопубликованный квиз", path: "/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659", expectedError: "quiz is inactive", }, { name: "опубликованный квиз без вопросов", path: "/228df092-1f9b-4c04-b08d-08726f0ef223", expectedError: "no questions found", }, { name: "пустой qid", path: "/", expectedError: "no quiz id", }, { name: "некорректный qid", path: "/invalid-quiz-id-12345", expectedError: "invalid request data", }, { name: "несуществующий qid", path: "/00000000-0000-0000-0000-000000000000", expectedError: "invalid request data", }, { name: "qid с неправильным форматом", path: "/not-a-valid-uuid", expectedError: "invalid request data", }, ]; // Базовые тесты без проверки текста (для всех случаев) describe("Базовые проверки отображения apology page", () => { it("необходимо проверить, что apology page отображает свои ошибки", () => { cy.visit("/apology-page"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для неопубликованного квиза", () => { cy.visit("/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для опубликованного квиза без вопросов", () => { cy.visit("/228df092-1f9b-4c04-b08d-08726f0ef223"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для пустого qid", () => { cy.visit("/"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для некорректного qid", () => { cy.visit("/invalid-quiz-id-12345"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для несуществующего qid", () => { cy.visit("/00000000-0000-0000-0000-000000000000"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с неправильным форматом", () => { cy.visit("/not-a-valid-uuid"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с пустой строкой", () => { cy.visit("/ "); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с null значением", () => { cy.visit("/null"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с undefined значением", () => { cy.visit("/undefined"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с пустой строкой в URL", () => { cy.visit("/%20"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с специальными символами", () => { cy.visit("/!@#$%^&*()"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с очень длинной строкой", () => { cy.visit("/" + "a".repeat(1000)); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с SQL инъекцией", () => { cy.visit("/'; DROP TABLE quizzes; --"); cy.get("#test-apology-page").should("be.visible"); }); it("должен показать apology page для qid с XSS попыткой", () => { cy.visit("/"); cy.get("#test-apology-page").should("be.visible"); }); }); // Параметризованные тесты с проверкой локализации localeConfigs.forEach(({ locale, urlPrefix, description }) => { describe(`Локализация: ${description}`, () => { testCases.forEach(({ name, path, expectedError }) => { it(`показывает правильную ошибку для "${name}" на ${description}`, () => { const fullUrl = `${urlPrefix}${path}`; cy.visit(fullUrl); cy.get("#test-apology-page").should("be.visible"); // Проверяем что отображается правильный текст ошибки с использованием кешированных переводов cy.shouldHaveTranslation("#test-apology-page", expectedError, locale); }); }); // Специальные тесты для разных типов ошибок it(`показывает ошибку неактивного квиза на ${description}`, () => { cy.visit(`${urlPrefix}/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659`); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "quiz is inactive", locale); }); it(`показывает ошибку отсутствия вопросов на ${description}`, () => { cy.visit(`${urlPrefix}/228df092-1f9b-4c04-b08d-08726f0ef223`); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "no questions found", locale); }); it(`показывает ошибку отсутствия quiz id на ${description}`, () => { cy.visit(`${urlPrefix}/`); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "no quiz id", locale); }); it(`показывает ошибку невалидных данных на ${description}`, () => { cy.visit(`${urlPrefix}/invalid-quiz-id-12345`); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "invalid request data", locale); }); }); }); // Дополнительные тесты для проверки приоритета локалей describe("Приоритет выбора локали", () => { it("использует русскую локаль по умолчанию когда язык не указан", () => { cy.visit("/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659"); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "quiz is inactive", "ru"); }); it("использует явно указанную русскую локаль", () => { cy.visit("/ru/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659"); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "quiz is inactive", "ru"); }); it("использует английскую локаль когда указан /en", () => { cy.visit("/en/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659"); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "quiz is inactive", "en"); }); it("использует узбекскую локаль когда указан /uz", () => { cy.visit("/uz/b0d3c6d1-49b8-4cf8-bb4c-bde05eebb659"); cy.get("#test-apology-page").should("be.visible"); cy.shouldHaveTranslation("#test-apology-page", "quiz is inactive", "uz"); }); }); // Тесты для проверки доступности файлов переводов describe("Доступность файлов переводов", () => { it("файл перевода ru.json доступен и содержит все ключи", () => { cy.loadTranslations("ru").then((translations) => { expect(translations).to.have.property("quiz is inactive"); expect(translations).to.have.property("no_questions_found"); expect(translations).to.have.property("quiz is empty"); expect(translations).to.have.property("quiz already completed"); expect(translations).to.have.property("no quiz id"); expect(translations).to.have.property("quiz data is null"); expect(translations).to.have.property("invalid request data"); }); }); it("файл перевода en.json доступен и содержит все ключи", () => { cy.loadTranslations("en").then((translations) => { expect(translations).to.have.property("quiz_is_inactive"); expect(translations).to.have.property("no_questions_found"); expect(translations).to.have.property("quiz_is_empty"); expect(translations).to.have.property("quiz_already_completed"); expect(translations).to.have.property("no_quiz_id"); expect(translations).to.have.property("quiz_data_is_null"); expect(translations).to.have.property("invalid_request_data"); }); }); it("файл перевода uz.json доступен и содержит все ключи", () => { cy.loadTranslations("uz").then((translations) => { expect(translations).to.have.property("quiz_is_inactive"); expect(translations).to.have.property("no_questions_found"); expect(translations).to.have.property("quiz_is_empty"); expect(translations).to.have.property("quiz_already_completed"); expect(translations).to.have.property("no_quiz_id"); expect(translations).to.have.property("quiz_data_is_null"); expect(translations).to.have.property("invalid_request_data"); }); }); }); });