Files
boilerplate/apps/frontend/src/app/features/items/items.page.spec.ts
Bastian Wagner c03b2e17f5 bump
2026-07-16 15:23:53 +02:00

72 lines
2.4 KiB
TypeScript

import { TestBed } from '@angular/core/testing';
import { of } from 'rxjs';
import { ApiClientService } from '@boilerplate/api-client';
import { ItemsPageComponent } from './items.page';
describe('ItemsPageComponent', () => {
it('keeps the save button disabled while the typed form is invalid', async () => {
await TestBed.configureTestingModule({
imports: [ItemsPageComponent],
providers: [
{
provide: ApiClientService,
useValue: {
items: () => of({ items: [], total: 0, page: 1, pageSize: 20 }),
},
},
],
}).compileComponents();
const fixture = TestBed.createComponent(ItemsPageComponent);
fixture.detectChanges();
expect(fixture.componentInstance.form.invalid).toBe(true);
fixture.componentInstance.form.controls.name.setValue('Neues Item');
expect(fixture.componentInstance.form.valid).toBe(true);
});
it('loads items with pagination parameters and changes pages', async () => {
const calls: { search?: string; page?: number; pageSize?: number }[] = [];
await TestBed.configureTestingModule({
imports: [ItemsPageComponent],
providers: [
{
provide: ApiClientService,
useValue: {
items: (query: { search?: string; page?: number; pageSize?: number } = {}) => {
calls.push(query);
return of({
items: [
{
id: `item-${query.page ?? 1}`,
name: 'Item',
description: null,
status: 'active',
version: 1,
createdAt: '2026-07-16T08:00:00.000Z',
updatedAt: '2026-07-16T08:00:00.000Z',
deletedAt: null,
},
],
total: 30,
page: query.page ?? 1,
pageSize: query.pageSize ?? 20,
});
},
},
},
],
}).compileComponents();
const fixture = TestBed.createComponent(ItemsPageComponent);
fixture.detectChanges();
expect(calls[0]).toEqual({ search: '', page: 1, pageSize: 20 });
fixture.componentInstance.goToPage(2);
fixture.detectChanges();
expect(calls[1]).toEqual({ search: '', page: 2, pageSize: 20 });
expect(fixture.componentInstance.page()).toBe(2);
expect((fixture.nativeElement as HTMLElement).textContent).toContain('Seite 2 von 2');
});
});