update test
This commit is contained in:
@@ -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']);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user