#62 Ajoute d'une configuration pour les status à considérer comme terminé
Signed-off-by: Gato <cedric@goutailler-olivier.fr>
This commit is contained in:
@@ -5,6 +5,7 @@ import { vi } from 'vitest';
|
||||
import { Dashboard } from './dashboard';
|
||||
import { IssueEntity, IssuesStore } from '../issues/issues.store';
|
||||
import { MilestoneEntity, MilestonesStore } from '../milestones/milestones.store';
|
||||
import { StatusesStore } from '../statuses/statuses.store';
|
||||
|
||||
const makeIssue = (overrides: Partial<IssueEntity> = {}): IssueEntity => ({
|
||||
id: 1,
|
||||
@@ -43,6 +44,16 @@ class FakeIssuesStore {
|
||||
deleteById = vi.fn();
|
||||
}
|
||||
|
||||
class FakeStatusesStore {
|
||||
private completedIds = new Set<string>(['done']);
|
||||
|
||||
setCompleted(ids: string[]): void {
|
||||
this.completedIds = new Set(ids);
|
||||
}
|
||||
|
||||
isCompleted = vi.fn((statusId: string) => this.completedIds.has(statusId));
|
||||
}
|
||||
|
||||
class FakeMilestonesStore {
|
||||
private _data = signal<MilestoneEntity[]>([]);
|
||||
readonly milestones = this._data.asReadonly();
|
||||
@@ -63,11 +74,13 @@ describe('Dashboard', () => {
|
||||
let fixture: ComponentFixture<Dashboard>;
|
||||
let issuesStore: FakeIssuesStore;
|
||||
let milestonesStore: FakeMilestonesStore;
|
||||
let statusesStore: FakeStatusesStore;
|
||||
let router: Router;
|
||||
|
||||
beforeEach(async () => {
|
||||
issuesStore = new FakeIssuesStore();
|
||||
milestonesStore = new FakeMilestonesStore();
|
||||
statusesStore = new FakeStatusesStore();
|
||||
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [Dashboard],
|
||||
@@ -75,6 +88,7 @@ describe('Dashboard', () => {
|
||||
provideRouter([]),
|
||||
{ provide: IssuesStore, useValue: issuesStore },
|
||||
{ provide: MilestonesStore, useValue: milestonesStore },
|
||||
{ provide: StatusesStore, useValue: statusesStore },
|
||||
],
|
||||
}).compileComponents();
|
||||
|
||||
@@ -123,6 +137,17 @@ describe('Dashboard', () => {
|
||||
]);
|
||||
expect((component as any).completionRate()).toBe(50);
|
||||
});
|
||||
|
||||
it('compte un statut personnalisé countsAsCompleted comme terminé', () => {
|
||||
statusesStore.setCompleted(['done', 'abandoned']);
|
||||
issuesStore.seed([
|
||||
makeIssue({ id: 1, status: 'done' }),
|
||||
makeIssue({ id: 2, status: 'abandoned' }),
|
||||
makeIssue({ id: 3, status: 'todo' }),
|
||||
makeIssue({ id: 4, status: 'todo' }),
|
||||
]);
|
||||
expect((component as any).completionRate()).toBe(50);
|
||||
});
|
||||
});
|
||||
|
||||
describe('statusCounts', () => {
|
||||
@@ -180,6 +205,12 @@ describe('Dashboard', () => {
|
||||
expect((component as any).highPriorityIssues().length).toBe(0);
|
||||
});
|
||||
|
||||
it('exclut les issues avec un statut personnalisé countsAsCompleted', () => {
|
||||
statusesStore.setCompleted(['done', 'abandoned']);
|
||||
issuesStore.seed([makeIssue({ priority: 'TRES_HAUTE', status: 'abandoned' })]);
|
||||
expect((component as any).highPriorityIssues().length).toBe(0);
|
||||
});
|
||||
|
||||
it('limite à 6 résultats', () => {
|
||||
issuesStore.seed(
|
||||
Array.from({ length: 10 }, (_, i) =>
|
||||
|
||||
Reference in New Issue
Block a user