feat(domains): Domain registrieren mit Schutz vor Doppelbestellung, Aufträge, Changelog und Anleitung
- Verfügbarkeitsprüfung über DomainStudio, Entwurf mit Kontakten und Nameservern, Zusammenfassung mit System und Preis - Verbindliches Abschicken: atomarer Anspruch DRAFT -> SUBMITTING vor dem Netzaufruf, genau ein POST /domain ohne Wiederholung, unklarer Ausgang als UNKNOWN, Bindung an das System - Aufträge: Stand aus dem AutoDNS-Auftrag, Abgleich unklarer Aufträge, Verwerfen erst nach Abgleich - Reiter Registrieren und Aufträge, Changelog, Anwender- und Administrationshandbuch, Mandantenschutz-Inventar Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,8 @@ const mockListDomains = vi.fn();
|
||||
const mockAssignContacts = vi.fn();
|
||||
const mockCreateCustomer = vi.fn();
|
||||
const mockDeleteCustomer = vi.fn();
|
||||
const mockListOrders = vi.fn();
|
||||
const mockRefreshOrders = vi.fn();
|
||||
|
||||
vi.mock('@/lib/domains-api', async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import('@/lib/domains-api')>();
|
||||
@@ -52,6 +54,8 @@ vi.mock('@/lib/domains-api', async (importOriginal) => {
|
||||
assignContacts: (...args: unknown[]) => mockAssignContacts(...args),
|
||||
createCustomer: (...args: unknown[]) => mockCreateCustomer(...args),
|
||||
deleteCustomer: (...args: unknown[]) => mockDeleteCustomer(...args),
|
||||
listOrders: (...args: unknown[]) => mockListOrders(...args),
|
||||
refreshOrders: (...args: unknown[]) => mockRefreshOrders(...args),
|
||||
};
|
||||
});
|
||||
|
||||
@@ -185,6 +189,8 @@ beforeEach(() => {
|
||||
mockAssignContacts.mockReset().mockResolvedValue({ assigned: 1, removed: 0 });
|
||||
mockCreateCustomer.mockReset().mockResolvedValue(CUSTOMERS[1]);
|
||||
mockDeleteCustomer.mockReset().mockResolvedValue({ deleted: true });
|
||||
mockListOrders.mockReset().mockResolvedValue([]);
|
||||
mockRefreshOrders.mockReset().mockResolvedValue([]);
|
||||
mockGetStatus.mockReset().mockResolvedValue(status());
|
||||
mockGetSettings.mockReset().mockResolvedValue(settings());
|
||||
mockSaveSettings.mockReset().mockImplementation(async () => settings());
|
||||
@@ -517,3 +523,38 @@ describe('Reiter Domains, Kontakte und Kunden', () => {
|
||||
expect(mockListDomains).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Reiter Registrieren und Aufträge', () => {
|
||||
it('Verwalter sieht beide Reiter in der festen Reihenfolge', async () => {
|
||||
render(<DomainsPage />);
|
||||
await screen.findByRole('button', { name: 'Einstellungen' });
|
||||
const wanted = ['Domains', 'Kontakte', 'Kunden', 'Registrieren', 'Aufträge', 'Einstellungen'];
|
||||
const names = screen
|
||||
.getAllByRole('button')
|
||||
.map((b) => b.textContent ?? '')
|
||||
.filter((x) => wanted.includes(x));
|
||||
expect(names).toEqual(wanted);
|
||||
});
|
||||
|
||||
it('Benutzer ohne Verwalten sieht Aufträge, aber weder Registrieren noch Einstellungen', async () => {
|
||||
mockCanManage = false;
|
||||
render(<DomainsPage />);
|
||||
await screen.findByTestId('domains-environment-badge');
|
||||
expect(screen.getByRole('button', { name: 'Aufträge' })).toBeTruthy();
|
||||
expect(screen.queryByRole('button', { name: 'Registrieren' })).toBeNull();
|
||||
expect(screen.queryByRole('button', { name: 'Einstellungen' })).toBeNull();
|
||||
});
|
||||
|
||||
it('der Reiter Aufträge gleicht beim Öffnen mit AutoDNS ab', async () => {
|
||||
mockCanManage = false;
|
||||
render(<DomainsPage />);
|
||||
fireEvent.click(await screen.findByRole('button', { name: 'Aufträge' }));
|
||||
await waitFor(() => expect(mockRefreshOrders).toHaveBeenCalledTimes(1));
|
||||
});
|
||||
|
||||
it('der Reiter Registrieren zeigt die Domain-Eingabe', async () => {
|
||||
render(<DomainsPage />);
|
||||
fireEvent.click(await screen.findByRole('button', { name: 'Registrieren' }));
|
||||
expect(await screen.findByRole('button', { name: 'Verfügbarkeit prüfen' })).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user