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('Das Profil beginnt als Text, mit einem Button Edit Profile', () => {
render(<EditProfile />);
assert.equal(boxes().length, 0, 'vor dem Bearbeiten angezeigte Textfelder: ' + boxes().length);
assert.ok(screen.getByRole('button', {name: 'Edit Profile'}), 'es gibt einen Button Edit Profile');
assert.equal(screen.getByText('Jane').tagName, 'B', 'Jane steht in einem <b>, nicht in einem ' + screen.getByText('Jane').tagName);
});
test('Edit Profile zeigt beide Felder und einen Button Save Profile', 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'], 'nach Edit Profile enthalten die Felder ' + JSON.stringify(boxes().map((box) => box.value)));
assert.ok(screen.getByRole('button', {name: 'Save Profile'}), 'nach Edit Profile gibt es einen Button Save Profile');
});
test('Save Profile zeigt den bearbeiteten Namen als 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, 'nach Save Profile angezeigte Textfelder: ' + boxes().length);
assert.equal(screen.getByText('Ada').tagName, 'B', 'Ada steht in einem <b>');
assert.equal(greeting(), 'Hello, Ada Jacobs!', 'nach dem Speichern lautet die Begrüßung ' + JSON.stringify(greeting()));
});