import {test} from 'node:test';
import assert from 'node:assert/strict';
import {loadPage} from './learnrun.js';
const add = (page, text) => {
page.document.querySelector('#add').elements.entry.value = text;
page.document.querySelector('#add').requestSubmit();
};
const shown = (page) => [...page.document.querySelectorAll('#list li')].map((li) => li.textContent);
const field = (page) => page.document.querySelector('#add').elements.entry;
test('Abschicken fügt den Text zur Liste hinzu', async () => {
const page = await loadPage();
add(page, 'milk');
assert.deepEqual(shown(page), ['milk'], 'die Liste zeigt ' + JSON.stringify(shown(page)));
});
test('Der Text wird getrimmt und das Feld geleert', async () => {
const page = await loadPage();
add(page, ' tea ');
assert.deepEqual(shown(page), ['tea'], 'die Liste zeigt ' + JSON.stringify(shown(page)));
assert.equal(field(page).value, '', 'nach dem Hinzufügen enthält das Feld ' + JSON.stringify(field(page).value));
});
test('Ein leerer Eintrag fügt nichts hinzu', async () => {
const page = await loadPage();
add(page, ' ');
assert.deepEqual(shown(page), [], 'die Liste zeigt ' + JSON.stringify(shown(page)));
});
test('Der submit wird mit preventDefault() abgebrochen', async () => {
const page = await loadPage();
const form = page.document.querySelector('#add');
let cancelled = false;
form.addEventListener('submit', (event) => {
cancelled = event.defaultPrevented;
});
add(page, 'milk');
assert.equal(cancelled, true, 'das submit-Event wurde nicht abgebrochen');
});
test('Escape leert das Feld', async () => {
const page = await loadPage();
field(page).value = 'oops';
field(page).dispatchEvent(new page.window.KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
assert.equal(field(page).value, '', 'nach Escape enthält das Feld ' + JSON.stringify(field(page).value));
});
test('Andere Tasten lassen das Feld in Ruhe', async () => {
const page = await loadPage();
field(page).value = 'tea';
field(page).dispatchEvent(new page.window.KeyboardEvent('keydown', { key: 'a', bubbles: true }));
assert.equal(field(page).value, 'tea', 'nach der Taste a enthält das Feld ' + JSON.stringify(field(page).value));
});