#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:
@@ -6,6 +6,7 @@ import { vi } from 'vitest';
|
||||
import { Issues } from './issues';
|
||||
import { IssueEntity, IssuesStore } from './issues.store';
|
||||
import { MilestoneEntity, MilestonesStore } from '../milestones/milestones.store';
|
||||
import { StatusesStore } from '../statuses/statuses.store';
|
||||
|
||||
const makeIssue = (overrides: Partial<IssueEntity> = {}): IssueEntity => ({
|
||||
id: 99,
|
||||
@@ -104,6 +105,24 @@ const makeMilestone = (overrides: Partial<MilestoneEntity> = {}): MilestoneEntit
|
||||
...overrides,
|
||||
});
|
||||
|
||||
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));
|
||||
getById = vi.fn((id: string) =>
|
||||
id === 'done'
|
||||
? { id: 'done', label: 'TERMINÉ', bg: '#dcfce7', color: '#166534', order: 3, countsAsCompleted: true }
|
||||
: undefined,
|
||||
);
|
||||
readonly statuses = signal([
|
||||
{ id: 'done', label: 'TERMINÉ', bg: '#dcfce7', color: '#166534', order: 3, countsAsCompleted: true },
|
||||
]);
|
||||
}
|
||||
|
||||
class FakeMilestonesStore {
|
||||
private _data = signal<MilestoneEntity[]>([]);
|
||||
|
||||
@@ -141,17 +160,20 @@ describe('Issues', () => {
|
||||
let fixture: ComponentFixture<Issues>;
|
||||
let store: FakeIssuesStore;
|
||||
let milestonesStore: FakeMilestonesStore;
|
||||
let statusesStore: FakeStatusesStore;
|
||||
let router: Router;
|
||||
|
||||
beforeEach(async () => {
|
||||
store = new FakeIssuesStore();
|
||||
milestonesStore = new FakeMilestonesStore();
|
||||
statusesStore = new FakeStatusesStore();
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [Issues],
|
||||
providers: [
|
||||
provideRouter([]),
|
||||
{ provide: IssuesStore, useValue: store },
|
||||
{ provide: MilestonesStore, useValue: milestonesStore },
|
||||
{ provide: StatusesStore, useValue: statusesStore },
|
||||
],
|
||||
}).compileComponents();
|
||||
|
||||
@@ -308,6 +330,15 @@ describe('Issues', () => {
|
||||
store.upsert(makeIssue({ id: 58, name: 'DepChild', dependsOnIds: [57], status: 'done' }));
|
||||
expect((component as any).getProgress(epic)).toBe(100);
|
||||
});
|
||||
|
||||
it('counts a custom countsAsCompleted status as done for an Epic', () => {
|
||||
statusesStore.setCompleted(['done', 'abandoned']);
|
||||
const epic = makeIssue({ id: 60, type: 'Epic', name: 'Custom Epic', progress: 0 });
|
||||
store.upsert(epic);
|
||||
store.upsert(makeIssue({ id: 61, name: 'Done Child', epic: 'Custom Epic', status: 'abandoned' }));
|
||||
store.upsert(makeIssue({ id: 62, name: 'Todo Child', epic: 'Custom Epic', status: 'todo' }));
|
||||
expect((component as any).getProgress(epic)).toBe(50);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getMilestoneForIssue', () => {
|
||||
|
||||
Reference in New Issue
Block a user