///
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");
});
});
});
});