812fed7772
Заглушка плана заменена настоящим кодом: разметка снята в задаче 11. Прихожая — существующие кампания и группа из настроек: своей кампании у робота в этот момент ещё нет, портал ставит задание до её создания в Яндексе. Окно, не закрывшееся после Создать, провалом НЕ считается — оно может остаться открытым и после удачной загрузки. Робот закрывает его крестиком и отдаёт слова кабинета наружу, а приговор выносит портал по слепку креативов. Кнопку Сохранить изменения робот не нажимает никогда — на это есть тест-сторож. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
2.3 KiB
JavaScript
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);
|
|
});
|