update test

This commit is contained in:
2026-05-24 11:09:12 +02:00
parent c9f2863815
commit 264d9f1402
9 changed files with 575 additions and 138 deletions
+74 -14
View File
@@ -1,3 +1,4 @@
import { signal } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { Router } from '@angular/router';
import { provideRouter } from '@angular/router';
@@ -22,30 +23,93 @@ const makeIssue = (overrides: Partial<IssueEntity> = {}): IssueEntity => ({
...overrides,
});
class FakeIssuesStore {
private _data = signal<IssueEntity[]>([
makeIssue({ id: 1, name: 'Issue 1', progress: 0 }),
makeIssue({ id: 2, name: 'Issue 2', progress: 0 }),
makeIssue({ id: 3, name: 'Issue 3', progress: 0 }),
]);
readonly issues = this._data.asReadonly();
readonly loading = signal(false);
readonly loaded = signal(true);
getById(id: number): IssueEntity | undefined {
return this._data().find((i) => i.id === id);
}
getNextId(): number {
const ids = this._data().map((i) => i.id);
return ids.length === 0 ? 1 : Math.max(...ids) + 1;
}
load(): Promise<void> {
return Promise.resolve();
}
upsert(issue: any): Promise<IssueEntity> {
const { comments: c, estimatedTime: et, dependsOnIds: deps, dependsOnId: legacy, ...rest } = issue;
const normalized: IssueEntity = {
type: 'Story',
assignee: '',
epic: '',
name: '',
dueDate: '',
description: '',
estimatedTime: et ?? null,
comments: Array.isArray(c) ? c : [],
priority: 'Moyenne',
status: 'draft',
progress: 0,
...rest,
dependsOnIds: Array.isArray(deps)
? deps.filter((v: unknown) => typeof v === 'number')
: typeof legacy === 'number'
? [legacy]
: [],
};
this._data.update((issues) => {
const idx = issues.findIndex((i) => i.id === normalized.id);
if (idx === -1) return [...issues, normalized];
const copy = [...issues];
copy[idx] = normalized;
return copy;
});
return Promise.resolve(normalized);
}
deleteById(id: number): Promise<void> {
this._data.update((issues) =>
issues
.filter((i) => i.id !== id)
.map((i) => ({ ...i, dependsOnIds: i.dependsOnIds.filter((d) => d !== id) })),
);
return Promise.resolve();
}
}
describe('Issues', () => {
let component: Issues;
let fixture: ComponentFixture<Issues>;
let store: IssuesStore;
let store: FakeIssuesStore;
let router: Router;
beforeEach(async () => {
localStorage.clear();
store = new FakeIssuesStore();
await TestBed.configureTestingModule({
imports: [Issues],
providers: [provideRouter([])],
providers: [
provideRouter([]),
{ provide: IssuesStore, useValue: store },
],
}).compileComponents();
store = TestBed.inject(IssuesStore);
router = TestBed.inject(Router);
fixture = TestBed.createComponent(Issues);
component = fixture.componentInstance;
await fixture.whenStable();
});
afterEach(() => {
localStorage.clear();
});
it('should create', () => {
expect(component).toBeTruthy();
});
@@ -65,7 +129,6 @@ describe('Issues', () => {
it('returns empty array when no issues match the selected type', () => {
(component as any).selectedType = 'Epic';
const filtered: IssueEntity[] = (component as any).filteredIssues;
// Default store has no Epics, so this should be empty
expect(filtered.every((i) => i.type === 'Epic')).toBe(true);
});
});
@@ -97,13 +160,10 @@ describe('Issues', () => {
});
describe('createIssue', () => {
it('navigates to /issues/new with a draftId query param', async () => {
it('navigates to /issues/new', () => {
const spy = vi.spyOn(router, 'navigate').mockResolvedValue(true);
(component as any).createIssue();
expect(spy).toHaveBeenCalledWith(
['/issues/new'],
expect.objectContaining({ queryParams: expect.objectContaining({ mode: 'edit' }) }),
);
expect(spy).toHaveBeenCalledWith(['/issues/new']);
});
});