// @vitest-environment jsdom
/**
* Component tests for SkillsQuotaForm (settings — skill store quotas).
*
* i18n is NOT initialized in the test env, so t() returns the raw key; we
* assert on roles/values, not labels.
*/
import '../../test/dom-setup';
import { describe, it, expect, vi } from 'vitest';
import { screen, fireEvent } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderWithProviders, renderStatefulForm } from '../../test/render-helpers';
import { SkillsQuotaForm } from './SkillsQuotaForm';
describe('SkillsQuotaForm', () => {
it('renders all five quota fields with defaults', () => {
const onChange = vi.fn();
renderWithProviders();
const numbers = screen.getAllByRole('spinbutton') as HTMLInputElement[];
expect(numbers).toHaveLength(5);
// Defaults: 50, 64, 5, 100, 2000
expect(numbers[0]).toHaveValue(50);
expect(numbers[1]).toHaveValue(64);
expect(numbers[2]).toHaveValue(5);
expect(numbers[3]).toHaveValue(100);
expect(numbers[4]).toHaveValue(2000);
});
it('writes skills.maxPerUser as a Number', async () => {
const onChange = vi.fn();
const { getConfig } = renderStatefulForm(SkillsQuotaForm, { skills: { maxPerUser: 50 } }, { onChangeSpy: onChange });
const numbers = screen.getAllByRole('spinbutton');
fireEvent.change(numbers[0], { target: { value: '12' } });
expect(getConfig().skills.maxPerUser).toBe(12);
expect(onChange).toHaveBeenCalledWith('skills.maxPerUser', 12);
});
it('serializes a cleared quota as undefined', async () => {
const onChange = vi.fn();
renderWithProviders();
const numbers = screen.getAllByRole('spinbutton');
await userEvent.clear(numbers[4]);
expect(onChange).toHaveBeenLastCalledWith('skills.maxIndexChars', undefined);
});
});