import {test} from 'node:test';
import assert from 'node:assert/strict';
import {loadPage} from './learnrun.js';
const text = (page, selector) => page.document.querySelector(selector).textContent;
const names = (page) => [...page.document.querySelectorAll('#rows tr')].map((row) => row.firstChild.textContent);
function submit(page, name, price, quantity) {
page.document.querySelector('#item-name').value = name;
page.document.querySelector('#item-price').value = price;
page.document.querySelector('#item-quantity').value = quantity;
page.document.querySelector('#add-form button').click();
}
function removeButton(page, name) {
const button = page.document.querySelector(`#rows button[data-name="${name}"]`);
assert.ok(button, `es gibt keinen Remove-Button für ${name}; die Zeilen sind ${JSON.stringify(names(page))}`);
return button;
}
test('Ein gültiger Artikel wird als neue Zeile hinzugefügt', async () => {
const page = await loadPage();
submit(page, 'Ruler', '1.2', '10');
assert.equal(text(page, '#message'), 'Added Ruler.', 'die Meldung lautet ' + text(page, '#message'));
assert.deepEqual(names(page), ['Pencil', 'Notebook', 'Stapler', 'Ruler'], 'die Zeilen sind ' + JSON.stringify(names(page)));
});
test('Ein negativer Preis wird abgelehnt', async () => {
const page = await loadPage();
submit(page, 'Eraser', '-1', '5');
assert.equal(text(page, '#message'), 'invalid price: -1', 'die Meldung lautet ' + text(page, '#message'));
assert.equal(names(page).length, 3, 'die Zeilen sind ' + JSON.stringify(names(page)));
});
test('Eine Menge von 2.5 wird abgelehnt', async () => {
const page = await loadPage();
submit(page, 'Glue', '1.5', '2.5');
assert.equal(text(page, '#message'), 'invalid quantity: 2.5', 'die Meldung lautet ' + text(page, '#message'));
});
test('Ein Name nur aus Leerzeichen wird abgelehnt', async () => {
const page = await loadPage();
submit(page, ' ', '1', '1');
assert.equal(text(page, '#message'), 'name must not be empty', 'die Meldung lautet ' + text(page, '#message'));
assert.equal(names(page).length, 3, 'die Zeilen sind ' + JSON.stringify(names(page)));
});