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 EditProfile from './main.jsx';
const boxes = () => screen.queryAllByRole('textbox');
const greeting = () => screen.getByText(/^Hello,/).textContent;
test('The profile starts as text, with an Edit Profile button', () => {
render(<EditProfile />);
assert.equal(boxes().length, 0, 'before editing, textboxes shown: ' + boxes().length);
assert.ok(screen.getByRole('button', {name: 'Edit Profile'}), 'there is an Edit Profile button');
assert.equal(screen.getByText('Jane').tagName, 'B', 'Jane is shown in a <b>, not in a ' + screen.getByText('Jane').tagName);
});
test('Edit Profile shows both fields and a Save Profile button', async () => {
const user = userEvent.setup();
render(<EditProfile />);
await user.click(screen.getByRole('button', {name: 'Edit Profile'}));
assert.deepEqual(boxes().map((box) => box.value), ['Jane', 'Jacobs'], 'after Edit Profile, the fields hold ' + JSON.stringify(boxes().map((box) => box.value)));
assert.ok(screen.getByRole('button', {name: 'Save Profile'}), 'after Edit Profile, there is a Save Profile button');
});
test('Save Profile shows the edited name as text', async () => {
const user = userEvent.setup();
render(<EditProfile />);
await user.click(screen.getByRole('button', {name: 'Edit Profile'}));
await user.clear(boxes()[0]);
await user.type(boxes()[0], 'Ada');
await user.click(screen.getByRole('button', {name: 'Save Profile'}));
assert.equal(boxes().length, 0, 'after Save Profile, textboxes shown: ' + boxes().length);
assert.equal(screen.getByText('Ada').tagName, 'B', 'Ada is shown in a <b>');
assert.equal(greeting(), 'Hello, Ada Jacobs!', 'after saving, the greeting reads ' + JSON.stringify(greeting()));
});