mirror of
https://github.com/callumalpass/tasknotes.git
synced 2026-07-22 12:50:26 +00:00
- Add HierarchicalGroupingService sorting tests * Test "No <field>" positioning for ascending and descending order * Verify type-aware sorting behavior for user fields * Validate subgroup key ordering consistency - Add FilterBar subgroup menu integration tests * Test subgroup header and options in sort/group context menu * Verify subgroup reset behavior when primary group changes * Use dependency injection approach for reliable test execution - Enhance test infrastructure for subgroup testing * Implement direct method testing instead of DOM manipulation * Add mock resolver functions for user field value resolution * Create reusable test helpers for subgroup scenarios Provides robust test coverage for subgroup sorting logic, menu integration, and cross-view consistency to ensure reliable hierarchical grouping behavior.
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import { SubgroupMenuBuilder } from '../../src/components/SubgroupMenuBuilder';
|
|
import { FilterOptions, TaskGroupKey } from '../../src/types';
|
|
|
|
describe('SubgroupMenuBuilder', () => {
|
|
const baseOptions: FilterOptions = {
|
|
statuses: [] as any,
|
|
priorities: [] as any,
|
|
contexts: [],
|
|
projects: [],
|
|
tags: [],
|
|
folders: [],
|
|
userProperties: [
|
|
{ id: 'user:assignee', label: 'Assignee', valueInputType: 'text', supportedOperators: [] } as any,
|
|
{ id: 'user:effort', label: 'Effort', valueInputType: 'number', supportedOperators: [] } as any,
|
|
],
|
|
};
|
|
|
|
it('builds options including None and excluding the primary key (built-ins)', () => {
|
|
const options = SubgroupMenuBuilder.buildOptions('status', baseOptions);
|
|
expect(options['none']).toBe('None');
|
|
expect(options['status']).toBeUndefined();
|
|
expect(options['priority']).toBe('Priority');
|
|
expect(options['context']).toBe('Context');
|
|
expect(options['project']).toBe('Project');
|
|
expect(options['due']).toBe('Due Date');
|
|
expect(options['scheduled']).toBe('Scheduled Date');
|
|
expect(options['tags']).toBe('Tags');
|
|
});
|
|
|
|
it('includes user properties except when equal to primary', () => {
|
|
const options = SubgroupMenuBuilder.buildOptions('user:assignee' as TaskGroupKey, baseOptions);
|
|
expect(options['user:assignee']).toBeUndefined();
|
|
expect(options['user:effort']).toBe('Effort');
|
|
});
|
|
});
|
|
|