callumalpass_tasknotes/tests/components/SubgroupMenuBuilder.test.ts
renatomen f54651bf8a test: add comprehensive test coverage for hierarchical subgroup functionality
- 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.
2025-09-18 10:15:08 +00:00

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');
});
});