import {test} from 'node:test';
import assert from 'node:assert/strict';
import {render, screen} from '@testing-library/react';
import Gallery from './main.jsx';
import {people} from './data.js';
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');
});
test('Vier Profile, nach Namen sortiert und ab 1 nummeriert', () => {
render(<Gallery />);
const names = screen.getAllByRole('heading', {level: 2}).map((h) => h.textContent);
assert.deepEqual(names, ['1. Alan Turing', '2. C. V. Raman', '3. Marie Skłodowska-Curie', '4. Rosalind Franklin'], 'die Profile lauten ' + JSON.stringify(names));
assert.equal(screen.getByText(/profiles$/).textContent, '4 profiles', 'die Zeile mit der Anzahl');
});
test('Jedes Profil zeigt einen Avatar mit dem Namen der Person', () => {
render(<Gallery />);
const avatars = screen.getAllByRole('img').map((img) => img.getAttribute('aria-label'));
assert.equal(avatars.length, 4, 'Avatare: ' + avatars.length);
assert.ok(avatars.includes('Alan Turing'), 'kein Avatar heißt Alan Turing');
});
test('Rendern ändert das Array in data.js nicht', () => {
render(<Gallery />);
const ids = people.map((person) => person.id);
assert.deepEqual(ids, ['msc', 'atu', 'rfr', 'cvr'], 'data.js enthält jetzt ' + JSON.stringify(ids));
});
test('Zweimal rendern ergibt dasselbe HTML', () => {
const first = render(<Gallery />).container.innerHTML;
const second = render(<Gallery />).container.innerHTML;
assert.equal(second, first, 'das zweite Rendern weicht vom ersten ab');
});