249 lines
11 KiB
TypeScript
249 lines
11 KiB
TypeScript
/// <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");
|
||
});
|
||
});
|
||
});
|
||
});
|