Filtre sur les issues

This commit is contained in:
2026-05-26 18:26:18 +02:00
parent 65576f627c
commit ef76055339
5 changed files with 214 additions and 49 deletions
+70 -22
View File
@@ -114,48 +114,96 @@ describe('Issues', () => {
expect(component).toBeTruthy();
});
const mockEvent = { stopPropagation: () => {} } as unknown as Event;
describe('filteredIssues', () => {
it('returns all issues when no type is selected', () => {
(component as any).selectedType = null;
it('returns all issues when no types are selected', () => {
(component as any).selectedTypes = new Set();
expect((component as any).filteredIssues.length).toBe(store.issues().length);
});
it('returns only issues matching the selected type', () => {
(component as any).selectedType = 'Bug';
(component as any).selectedTypes = new Set(['Bug']);
const filtered: IssueEntity[] = (component as any).filteredIssues;
expect(filtered.every((i) => i.type === 'Bug')).toBe(true);
});
it('returns empty array when no issues match the selected type', () => {
(component as any).selectedType = 'Epic';
it('returns empty array when no issues match the selected types', () => {
(component as any).selectedTypes = new Set(['Epic']);
const filtered: IssueEntity[] = (component as any).filteredIssues;
expect(filtered.every((i) => i.type === 'Epic')).toBe(true);
});
it('returns issues matching any of multiple selected types', () => {
(component as any).selectedTypes = new Set(['Bug', 'Story']);
const filtered: IssueEntity[] = (component as any).filteredIssues;
expect(filtered.every((i) => i.type === 'Bug' || i.type === 'Story')).toBe(true);
});
it('filters by status when selectedStatuses is set', () => {
(component as any).selectedStatuses = new Set(['done']);
const filtered: IssueEntity[] = (component as any).filteredIssues;
expect(filtered.every((i) => i.status === 'done')).toBe(true);
});
it('filters by search query on issue name', () => {
(component as any).searchQuery = 'Issue 1';
const filtered: IssueEntity[] = (component as any).filteredIssues;
expect(filtered.length).toBe(1);
expect(filtered[0].name).toBe('Issue 1');
});
});
describe('selectType', () => {
it('sets selectedType when none is active', () => {
(component as any).selectedType = null;
(component as any).selectType('Bug');
expect((component as any).selectedType).toBe('Bug');
describe('toggleType', () => {
it('adds a type when not already selected', () => {
(component as any).selectedTypes = new Set();
(component as any).toggleType('Bug', mockEvent);
expect((component as any).selectedTypes.has('Bug')).toBe(true);
});
it('clears selectedType when the same type is selected again (toggle off)', () => {
(component as any).selectedType = 'Bug';
(component as any).selectType('Bug');
expect((component as any).selectedType).toBeNull();
it('removes a type when already selected (toggle off)', () => {
(component as any).selectedTypes = new Set(['Bug']);
(component as any).toggleType('Bug', mockEvent);
expect((component as any).selectedTypes.has('Bug')).toBe(false);
});
it('switches to a different type', () => {
(component as any).selectedType = 'Bug';
(component as any).selectType('Story');
expect((component as any).selectedType).toBe('Story');
it('can select multiple types simultaneously', () => {
(component as any).selectedTypes = new Set();
(component as any).toggleType('Bug', mockEvent);
(component as any).toggleType('Story', mockEvent);
expect((component as any).selectedTypes.size).toBe(2);
expect((component as any).selectedTypes.has('Bug')).toBe(true);
expect((component as any).selectedTypes.has('Story')).toBe(true);
});
});
describe('clearTypes', () => {
it('empties the type selection', () => {
(component as any).selectedTypes = new Set(['Bug', 'Story']);
(component as any).clearTypes(mockEvent);
expect((component as any).selectedTypes.size).toBe(0);
});
});
describe('toggleStatus', () => {
it('adds a status when not already selected', () => {
(component as any).selectedStatuses = new Set();
(component as any).toggleStatus('done', mockEvent);
expect((component as any).selectedStatuses.has('done')).toBe(true);
});
it('selectType(null) clears the filter', () => {
(component as any).selectedType = 'Bug';
(component as any).selectType(null);
expect((component as any).selectedType).toBeNull();
it('removes a status when already selected (toggle off)', () => {
(component as any).selectedStatuses = new Set(['done']);
(component as any).toggleStatus('done', mockEvent);
expect((component as any).selectedStatuses.has('done')).toBe(false);
});
});
describe('clearStatuses', () => {
it('empties the status selection', () => {
(component as any).selectedStatuses = new Set(['todo', 'done']);
(component as any).clearStatuses(mockEvent);
expect((component as any).selectedStatuses.size).toBe(0);
});
});