import {test} from 'node:test';
import assert from 'node:assert/strict';
import {render, screen} from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import Draft from './main.jsx';
const heading = () => screen.getByRole('heading', {level: 2}).textContent;
const note = () => screen.getByRole('textbox', {name: 'Note'});
test('Save zeigt Saved, Edit wieder Draft', async () => {
const user = userEvent.setup();
render(<Draft />);
await user.click(screen.getByRole('button', {name: 'Save'}));
assert.equal(heading(), 'Saved', 'nach Save lautet die Überschrift ' + JSON.stringify(heading()));
await user.click(screen.getByRole('button', {name: 'Edit'}));
assert.equal(heading(), 'Draft', 'nach Edit lautet die Überschrift ' + JSON.stringify(heading()));
});
test('Die Notiz behält nach Save ihren Text', async () => {
const user = userEvent.setup();
render(<Draft />);
await user.type(note(), 'Call Ada');
await user.click(screen.getByRole('button', {name: 'Save'}));
assert.equal(note().value, 'Call Ada', 'nach Save enthält die Notiz ' + JSON.stringify(note().value));
});
test('Die Notiz ist nach Save und Edit derselbe DOM-Knoten', async () => {
const user = userEvent.setup();
render(<Draft />);
const before = note();
await user.click(screen.getByRole('button', {name: 'Save'}));
assert.ok(note() === before, 'nach Save hat React ein neues <input> auf die Seite gesetzt');
await user.click(screen.getByRole('button', {name: 'Edit'}));
assert.ok(note() === before, 'nach Edit hat React ein neues <input> auf die Seite gesetzt');
});