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 shows Saved, Edit shows Draft again', async () => {
const user = userEvent.setup();
render(<Draft />);
await user.click(screen.getByRole('button', {name: 'Save'}));
assert.equal(heading(), 'Saved', 'after Save the heading reads ' + JSON.stringify(heading()));
await user.click(screen.getByRole('button', {name: 'Edit'}));
assert.equal(heading(), 'Draft', 'after Edit the heading reads ' + JSON.stringify(heading()));
});
test('The note keeps its text after Save', 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', 'after Save the note holds ' + JSON.stringify(note().value));
});
test('The note is the same DOM node after Save and Edit', async () => {
const user = userEvent.setup();
render(<Draft />);
const before = note();
await user.click(screen.getByRole('button', {name: 'Save'}));
assert.ok(note() === before, 'after Save React put a new <input> on the page');
await user.click(screen.getByRole('button', {name: 'Edit'}));
assert.ok(note() === before, 'after Edit React put a new <input> on the page');
});