diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..2b9639e
Binary files /dev/null and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 83df913..bd615d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,5 @@ node_modules/
allure-results/
allure-report/
test-results/
-playwright-report/
+playwright-report
.env
\ No newline at end of file
diff --git a/package.json b/package.json
index 4b3ca5d..c1b3e90 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "index.js",
"scripts": {
"test": "npx playwright test",
- "test:clean": "rm -rf allure-results allure-report",
+ "test:clean": "rm -rf allure-results allure-report playwright-report",
"test:ui": "npx playwright test tests/ui",
"test:api": "npx playwright test tests/api",
"report": "npx playwright show-report",
diff --git a/page-objects/RegisterPage.ts b/page-objects/RegisterPage.ts
index 4585a69..f479184 100644
--- a/page-objects/RegisterPage.ts
+++ b/page-objects/RegisterPage.ts
@@ -9,6 +9,7 @@ export class RegisterPage {
this.page = page;
}
+ // --- Этап 1: Общие поля ---
async goto() {
await this.page.goto('/registration');
}
@@ -49,7 +50,47 @@ export class RegisterPage {
await this.page.locator('span.Checkmark_checkmark__58fWm').click();
}
+ async clickNextButton() {
+ await this.page.locator('button[type="submit"]', { hasText: 'Далее' }).click();
+ }
+
+ async submitGraduate() {
+ await this.page.locator('button[type="submit"]', { hasText: 'Зарегистрироваться' }).click();
+ }
+
async submit() {
await this.page.locator('button[data-testid="btn-save"]').click();
}
+
+ // --- Этап 2: Образование выпускника ---
+ async selectGraduateRole() {
+ await this.page.locator('button.Registration_button_menu__AfPox', { hasText: 'Выпускник' }).click();
+ }
+
+ async selectDepartment() {
+ await this.page.locator('input[name="department"]').click();
+ await this.page.getByText('Институт компьютерных технологий и информационной безопасности', { exact: true }).scrollIntoViewIfNeeded();
+ await this.page.getByText('Институт компьютерных технологий и информационной безопасности', { exact: true }).click();
+ }
+
+ async selectEducationLevel() {
+ await this.page.locator('input[name="educationLevel"]').click();
+ await this.page.getByText('Специалитет', { exact: true }).click();
+ }
+
+ async selectSpeciality() {
+ await this.page.locator('input[name="speciality"]').click();
+ await this.page.getByText('Применение и эксплуатация автоматизированных систем специального назначения', { exact: true }).scrollIntoViewIfNeeded();
+ await this.page.getByText('Применение и эксплуатация автоматизированных систем специального назначения', { exact: true }).click();
+ }
+
+ async selectProgram() {
+ await this.page.locator('input[name="program"]').click();
+ await this.page.getByText('Автоматизированные системы обработки информации и управления', { exact: true }).first().click();
+ }
+
+ async selectEducationForm() {
+ await this.page.locator('input[name="educationForm"]').click();
+ await this.page.getByText('Очная', { exact: true }).click();
+ }
}
diff --git a/playwright-report/index.html b/playwright-report/index.html
deleted file mode 100644
index d9bfee8..0000000
--- a/playwright-report/index.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
-
- Playwright Test Report
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/tests/api/registration/register-applicant.api.spec.ts b/tests/api/registration/register-applicant.api.spec.ts
index cc29b66..c2f688e 100644
--- a/tests/api/registration/register-applicant.api.spec.ts
+++ b/tests/api/registration/register-applicant.api.spec.ts
@@ -41,6 +41,9 @@ test('API: регистрация абитуриента + подтвержде
const registerRes = await axios.post(`${BASE_URL}/auth/register`, registerPayload);
expect(registerRes.status).toBe(201);
+ const userId = registerRes.data.id;
+ console.log('🆔 ID зарегистрированного пользователя:', userId);
+
} catch (error: any) {
console.error('❌ Ошибка регистрации:', error.response?.data || error.message);
throw error;
diff --git a/tests/api/registration/register-graduate.api.spec.ts b/tests/api/registration/register-graduate.api.spec.ts
new file mode 100644
index 0000000..7a6fd8d
--- /dev/null
+++ b/tests/api/registration/register-graduate.api.spec.ts
@@ -0,0 +1,65 @@
+import { test, expect } from '@playwright/test';
+import axios from 'axios';
+import {
+ createTempEmail,
+ waitForConfirmationCode
+} from '../../../utils/mailTmApi';
+import {
+ generateFirstName,
+ generateLastName,
+ generateMiddleName,
+ generateLogin,
+ generatePhone,
+} from '../../../utils/userGenerator';
+
+const BASE_URL = 'https://rumc.dev.rdcenter.ru/api';
+
+test('API: регистрация выпускника + подтверждение почты', async () => {
+ const { email, token: mailToken } = await createTempEmail();
+
+ const surname = generateLastName();
+ const name = generateFirstName();
+ const patronymic = generateMiddleName();
+ const fullName = `${surname} ${name} ${patronymic}`;
+ const login = generateLogin();
+ const phone = '+7 (900) 000-00-00';
+
+ const registerPayload = {
+ type: 'INDIVIDUAL',
+ programId: 'a0d11741-eeae-11ef-b5b3-00155d011a8e',
+ educationForm: 'Очная',
+ educationLevel: 'Специалитет',
+ login,
+ fullName,
+ email,
+ password: '!Test123456',
+ phone,
+ approval: true
+ };
+
+ try {
+ const registerRes = await axios.post(`${BASE_URL}/auth/register/graduate`, registerPayload);
+ expect(registerRes.status).toBe(200);
+
+ const userId = registerRes.data.userId;
+ console.log('🆔 ID зарегистрированного пользователя:', userId);
+
+} catch (error: any) {
+ console.error('❌ Ошибка регистрации:', error.response?.data || error.message);
+ throw error;
+}
+
+ console.log('📬 Ожидание письма с кодом подтверждения...');
+ const code = await waitForConfirmationCode(mailToken, 60000);
+ console.log('✅ Код получен:', code);
+
+ const confirmPayload = {
+ email,
+ code
+ };
+
+ const confirmRes = await axios.post(`${BASE_URL}/auth/confirm`, confirmPayload);
+ expect(confirmRes.status).toBe(200);
+
+ console.log('🎉 Почта подтверждена успешно');
+});
diff --git a/tests/ui/registration/register-graduate.spec.ts b/tests/ui/registration/register-graduate.spec.ts
new file mode 100644
index 0000000..d10cd5a
--- /dev/null
+++ b/tests/ui/registration/register-graduate.spec.ts
@@ -0,0 +1,55 @@
+import { test, expect } from '@playwright/test';
+import { RegisterPage } from '../../../page-objects/RegisterPage';
+import {
+ generateFirstName,
+ generateLastName,
+ generateMiddleName,
+ generateLogin,
+ generatePhone,
+} from '../../../utils/userGenerator';
+import { createTempEmail, waitForConfirmationCode } from '../../../utils/mailTmApi';
+
+test('Полная регистрация выпускника с подтверждением почты', async ({ page }) => {
+ // Создаём временный email
+ const { email, token } = await createTempEmail();
+
+ const firstName = generateFirstName();
+ const lastName = generateLastName();
+ const middleName = generateMiddleName();
+ const login = generateLogin();
+ const phone = generatePhone();
+ const password = '!Test123456';
+
+ const registerPage = new RegisterPage(page);
+ await registerPage.goto();
+ await registerPage.selectGraduateRole();
+
+ // Заполняем 1 этап регистрации
+ await registerPage.fillLastName(lastName);
+ await registerPage.fillFirstName(firstName);
+ await registerPage.fillMiddleName(middleName);
+ await registerPage.fillEmail(email);
+ await registerPage.fillLogin(login);
+ await registerPage.fillPhone(phone);
+ await registerPage.fillPassword(password);
+ await registerPage.fillPasswordRepeat(password);
+ await registerPage.clickNextButton();
+
+ // Заполняем 2 этап: образовательные данные
+ await registerPage.selectDepartment();
+ await registerPage.selectEducationLevel();
+ await registerPage.selectSpeciality();
+ await registerPage.selectProgram();
+ await registerPage.selectEducationForm();
+ await registerPage.checkConsentCheckbox();
+ await registerPage.submitGraduate();
+
+ await page.waitForTimeout(5000);
+ await expect(page).toHaveURL(/confirmation-code/);
+ const code = await waitForConfirmationCode(token, 60000);
+
+ await page.fill('input[name="code"]', code);
+ await page.click('button.RecoverPassword_button__5QDxM');
+
+ await expect(page).toHaveURL('https://rumc.dev.rdcenter.ru');
+});