This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import {matchesProjectFilter, parseProjectFilter, projectCardGroupValue} from './repo-projects.ts';
|
||||
|
||||
const projectCard = {
|
||||
assignees: ['alice', 'bob'],
|
||||
author: 'carol',
|
||||
labels: ['bug', 'needs review'],
|
||||
milestone: 'Release 1',
|
||||
repository: 'gitea/gitea',
|
||||
state: 'open',
|
||||
status: 'In Progress',
|
||||
title: 'Fix project board',
|
||||
type: 'pull',
|
||||
};
|
||||
|
||||
describe('project card filters', () => {
|
||||
test('parses quoted OR values, aliases, repeated terms, and negation', () => {
|
||||
const parsed = parseProjectFilter('label:bug,"needs review" assignee:alice -author:dave is:pr');
|
||||
|
||||
expect(parsed.error).toBeUndefined();
|
||||
expect(parsed.terms).toEqual([
|
||||
{field: 'label', negated: false, values: ['bug', 'needs review']},
|
||||
{field: 'assignee', negated: false, values: ['alice']},
|
||||
{field: 'author', negated: true, values: ['dave']},
|
||||
{field: 'type', negated: false, values: ['pull']},
|
||||
]);
|
||||
expect(matchesProjectFilter(projectCard, parsed.terms)).toBe(true);
|
||||
expect(matchesProjectFilter(projectCard, parseProjectFilter('assignee:alice assignee:bob').terms)).toBe(true);
|
||||
});
|
||||
|
||||
test('reports malformed and unknown qualifiers without filtering cards', () => {
|
||||
expect(parseProjectFilter('unknown:value').error).toEqual({kind: 'unknown', value: 'unknown'});
|
||||
expect(parseProjectFilter('label:"unfinished').error).toEqual({kind: 'unclosed'});
|
||||
expect(parseProjectFilter('label:').error).toEqual({kind: 'malformed', value: ''});
|
||||
expect(parseProjectFilter('label:bug,').error).toEqual({kind: 'malformed', value: 'bug,'});
|
||||
expect(parseProjectFilter('state:pending').error).toEqual({kind: 'malformed', value: 'pending'});
|
||||
});
|
||||
|
||||
test('matches repository aliases, status, state, type, and unqualified titles', () => {
|
||||
expect(matchesProjectFilter(projectCard, parseProjectFilter('repository:gitea/gitea status:"In Progress" state:open type:pull board').terms)).toBe(true);
|
||||
expect(matchesProjectFilter(projectCard, parseProjectFilter('-label:bug').terms)).toBe(false);
|
||||
});
|
||||
|
||||
test('uses first multi-valued attribute for a non-duplicated group', () => {
|
||||
expect(projectCardGroupValue(projectCard, 'assignee', 'No value')).toBe('alice');
|
||||
expect(projectCardGroupValue(projectCard, 'label', 'No value')).toBe('bug');
|
||||
expect(projectCardGroupValue({...projectCard, labels: []}, 'label', 'No value')).toBe('No value');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user