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 Gallery from './main.jsx';
const likes = () => screen.getAllByRole('button', {name: /^Like/}).map((button) => button.textContent);
test('Drei Fotos, jedes mit einem Like-Button', () => {
render(<Gallery />);
const photos = screen.getAllByRole('img').length;
assert.equal(photos, 3, 'die Galerie zeigt ' + photos + ' Foto(s)');
assert.deepEqual(likes(), ['Like (0)', 'Like (0)', 'Like (0)'], 'die Like-Buttons zeigen ' + JSON.stringify(likes()));
});
test('Jeder Like-Button zählt für sich', async () => {
const user = userEvent.setup();
render(<Gallery />);
const first = screen.getAllByRole('button', {name: /^Like/})[0];
await user.click(first);
await user.click(first);
assert.deepEqual(likes(), ['Like (2)', 'Like (0)', 'Like (0)'], 'nach zwei Klicks auf den ersten: ' + JSON.stringify(likes()));
});
test('Die Likes überstehen einen Klick auf Dark mode', async () => {
const user = userEvent.setup();
render(<Gallery />);
await user.click(screen.getAllByRole('button', {name: /^Like/})[0]);
await user.click(screen.getByRole('button', {name: 'Dark mode'}));
assert.equal(likes()[0], 'Like (1)', 'nach einem Like und Dark mode zeigt der erste Button ' + JSON.stringify(likes()[0]));
});
test('React gibt keine Warnungen aus', () => {
const warnings = [];
const original = console.error;
console.error = (...args) => warnings.push(args.join(' '));
try {
render(<Gallery />);
} finally {
console.error = original;
}
assert.deepEqual(warnings, [], 'console.error beim Rendern');
});