mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
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.
102 lines
3.2 KiB
JavaScript
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' ]
|
|
})
|
|
})
|
|
})
|
|
})
|