frontAnswerer/cypress/e2e/test-apology-page.cy.ts

249 lines
11 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/// <reference types="cypress" />
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("/<script>alert('xss')</script>");
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");
});
});
});
});