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, `there is no Remove button for ${name}; the rows are ${JSON.stringify(names(page))}`);
return button;
}
test('A valid item is added as a new row', async () => {
const page = await loadPage();
submit(page, 'Ruler', '1.2', '10');
assert.equal(text(page, '#message'), 'Added Ruler.', 'the message is ' + text(page, '#message'));
assert.deepEqual(names(page), ['Pencil', 'Notebook', 'Stapler', 'Ruler'], 'the rows are ' + JSON.stringify(names(page)));
});
test('A negative price is refused', async () => {
const page = await loadPage();
submit(page, 'Eraser', '-1', '5');
assert.equal(text(page, '#message'), 'invalid price: -1', 'the message is ' + text(page, '#message'));
assert.equal(names(page).length, 3, 'the rows are ' + JSON.stringify(names(page)));
});
test('A quantity of 2.5 is refused', async () => {
const page = await loadPage();
submit(page, 'Glue', '1.5', '2.5');
assert.equal(text(page, '#message'), 'invalid quantity: 2.5', 'the message is ' + text(page, '#message'));
});
test('A name of spaces only is refused', async () => {
const page = await loadPage();
submit(page, ' ', '1', '1');
assert.equal(text(page, '#message'), 'name must not be empty', 'the message is ' + text(page, '#message'));
assert.equal(names(page).length, 3, 'the rows are ' + JSON.stringify(names(page)));
});