import {test} from 'node:test';
import assert from 'node:assert/strict';
import {loadPage} from './learnrun.js';
const item = (page, n) => page.document.querySelectorAll('#list li')[n];
const texts = (page) => [...page.document.querySelectorAll('#list li span')].map((span) => span.textContent);
const done = (page) => [...page.document.querySelectorAll('#list li')].map((li) => li.classList.contains('done'));
test('Remove entfernt seinen Eintrag', async () => {
const page = await loadPage();
item(page, 1).querySelector('.remove').click();
assert.deepEqual(texts(page), ['Water the plants', 'Call Mum'], 'nach dem Entfernen von Buy bread zeigt die Liste ' + JSON.stringify(texts(page)));
});
test('Ein Klick auf den Text markiert den Eintrag als erledigt', async () => {
const page = await loadPage();
item(page, 0).querySelector('span').click();
assert.deepEqual(texts(page), ['Water the plants', 'Buy bread', 'Call Mum'], 'nach einem Klick auf einen Text zeigt die Liste ' + JSON.stringify(texts(page)));
assert.deepEqual(done(page), [true, false, false], 'nach dem Klick auf den ersten Text ist done ' + JSON.stringify(done(page)));
});
test('Ein zweiter Klick auf den Text hebt die Markierung auf', async () => {
const page = await loadPage();
item(page, 2).querySelector('span').click();
item(page, 2).querySelector('span').click();
assert.deepEqual(done(page), [false, false, false], 'nach zwei Klicks auf den letzten Text ist done ' + JSON.stringify(done(page)));
});
test('Ein Klick auf die Liste selbst ändert nichts', async () => {
const page = await loadPage();
page.document.querySelector('#list').click();
assert.deepEqual(texts(page), ['Water the plants', 'Buy bread', 'Call Mum'], 'nach einem Klick zwischen die Einträge zeigt die Liste ' + JSON.stringify(texts(page)));
const today = page.document.querySelector('#today').classList.contains('done');
assert.equal(today, false, 'der Abschnitt Today hat die Klasse done bekommen');
});
test('Entfernen funktioniert auch nach dem Neuaufbau der Liste', async () => {
const page = await loadPage();
item(page, 0).querySelector('.remove').click();
item(page, 0).querySelector('.remove').click();
assert.deepEqual(texts(page), ['Call Mum'], 'nach zweimaligem Entfernen des ersten Eintrags zeigt die Liste ' + JSON.stringify(texts(page)));
});
test('Klicks in der Liste erreichen weiter den Zähler des Abschnitts', async () => {
const page = await loadPage();
item(page, 0).querySelector('span').click();
item(page, 1).querySelector('.remove').click();
const clicks = page.document.querySelector('#clicks').textContent;
assert.equal(clicks, '2', 'nach zwei Klicks in der Liste zeigt der Zähler ' + JSON.stringify(clicks));
});