Files
portal/bots/yandex-creatives/test/session.test.js
T
Дмитрий 812fed7772 feat робот креативов: браузер, проверка входа и загрузка креативов по живой разметке кабинета
Заглушка плана заменена настоящим кодом: разметка снята в задаче 11.

Прихожая — существующие кампания и группа из настроек: своей кампании у робота
в этот момент ещё нет, портал ставит задание до её создания в Яндексе.

Окно, не закрывшееся после Создать, провалом НЕ считается — оно может остаться
открытым и после удачной загрузки. Робот закрывает его крестиком и отдаёт слова
кабинета наружу, а приговор выносит портал по слепку креативов.

Кнопку Сохранить изменения робот не нажимает никогда — на это есть тест-сторож.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 18:18:39 +03:00

58 lines
2.3 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { isLoggedIn } from '../src/session.js';
const config = { cabinetUrl: 'https://direct.yandex.ru', cabinetLogin: 'nash-login' };
/**
* Поддельная страница браузера: помнит, куда ходили, и делает вид, что на ней есть
* только перечисленные элементы. Настоящий браузер для этих проверок не нужен.
*/
function fakePage({ landsOn = 'https://direct.yandex.ru/wizard/overview/', present = [] } = {}) {
const visited = [];
return {
visited,
async goto(url) { visited.push(url); },
url: () => landsOn,
locator: (selector) => ({
async waitFor() {
if (!present.includes(selector)) throw new Error(`нет элемента ${selector}`);
},
}),
};
}
test('вход жив, когда виден блок баланса', async () => {
const page = fakePage({ present: ['[data-testid="Sidebar.BalanceExpanded"]'] });
assert.equal(await isLoggedIn(page, config), true);
assert.equal(page.visited[0], 'https://direct.yandex.ru/wizard/overview/?ulogin=nash-login');
});
test('вход жив, если баланс скрыт, но видна карточка пользователя', async () => {
const page = fakePage({ present: ['[data-testid="SidebarUserControl"]'] });
assert.equal(await isLoggedIn(page, config), true);
});
test('вход слетел, когда кабинет перебросил на страницу входа', async () => {
const page = fakePage({
landsOn: 'https://passport.yandex.ru/auth?retpath=...',
present: ['[data-testid="Sidebar.BalanceExpanded"]'],
});
assert.equal(await isLoggedIn(page, config), false);
});
test('вход слетел, когда страница отдалась, но кабинета на ней нет', async () => {
assert.equal(await isLoggedIn(fakePage({ present: [] }), config), false);
});
test('не падает, если страница вообще не открылась', async () => {
const page = fakePage();
page.goto = async () => { throw new Error('сеть недоступна'); };
assert.equal(await isLoggedIn(page, config), false);
});