doesitarm/test/prebuild/filters.test.js
ThatGuySam 727f84e4c2 refactor(search): extract shared filter helper
Share filter parsing and provider mapping logic between Stork and upcoming search adapters.

This keeps the existing Stork API stable while adding Pagefind-oriented filter serialization under test.
2026-03-15 13:41:33 -05:00

102 lines
3.2 KiB
JavaScript

import { describe, it, expect, beforeEach } from 'vitest'
import { StorkFilters } from '~/helpers/stork/browser.js'
/**
* Tests for StorkFilters class which handles filter management and query string
* generation for Stork search
*/
describe('StorkFilters', () => {
// let filters
// beforeEach(() => {
// filters = new StorkFilters()
// })
// User Story: As a user, I want to toggle filters on/off so I can refine my search
describe('filter toggling', () => {
it('should toggle off an existing filter', () => {
const filters = new StorkFilters({
initialFilters: { test: 'yes' }
})
filters.toggleFilter('test')
expect(filters.has('test')).toBe(false)
})
it('should toggle on multiple filters', () => {
const filters = new StorkFilters({
initialFilters: { test: 'yes' }
})
// filters.toggleFilter('test', 'yes')
filters.toggleFilter('status', 'native')
expect(filters.has('test')).toBe( true )
expect(filters.asQuery).toBe('test_yes status_native')
})
it('should remove a specific filter', () => {
const filters = new StorkFilters({
initialFilters: {
test: 'yes',
status: 'native'
}
})
filters.toggleFilter('status_native')
expect(filters.asQuery).toBe('test_yes')
})
})
// User Story: As a user, I want to use complex filter values to enable detailed searching
describe('complex filter values', () => {
it('should handle values with multiple underscores', () => {
const filters = new StorkFilters({
initialFilters: {
test: 'value_with_multiple_underscores'
}
})
expect(filters.has('test_value_with_multiple_underscores')).toBe(true)
})
it('should update existing filter value', () => {
const filters = new StorkFilters({
initialFilters: {
test: 'works_no'
}
})
filters.toggleFilter('test_works_yes')
expect(filters.asQuery).toBe('test_works_yes')
})
})
// User Story: As a user, I want to set filters from a query string to restore search state
describe('filter initialization', () => {
it('should set filters from query string', () => {
const filters = new StorkFilters({
initialFilters: {
test: 'works_no'
}
})
filters.setFromString('test_works_yes')
expect(filters.asQuery).toBe('test_works_yes')
})
it('should map filters for Pagefind', () => {
const filters = new StorkFilters()
filters.setFromStringArray([
'status_native',
'category_system_tools'
])
expect(filters.asPagefindFilters).toEqual({
status: [ 'native' ],
category: [ 'system_tools' ]
})
})
})
})