48 lines
2.0 KiB
TypeScript
48 lines
2.0 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
moveCategoryBy,
|
|
moveToolBy,
|
|
moveToolToCategory,
|
|
relocateTool,
|
|
reorderCategory,
|
|
} from '../src/lib/navigationOrder'
|
|
import type { NavigationConfig } from '../src/types'
|
|
|
|
const navigation: NavigationConfig = {
|
|
version: 1,
|
|
categories: [
|
|
{ id: 'one', tools: ['a', 'b', 'c'] },
|
|
{ id: 'two', tools: ['d', 'e'] },
|
|
{ id: 'three', tools: [] },
|
|
],
|
|
}
|
|
|
|
describe('navigation ordering', () => {
|
|
it('moves categories upward and downward without mutating the input', () => {
|
|
expect(moveCategoryBy(navigation, 0, 1).categories.map(({ id }) => id)).toEqual(['two', 'one', 'three'])
|
|
expect(reorderCategory(navigation, 2, 0).categories.map(({ id }) => id)).toEqual(['three', 'one', 'two'])
|
|
expect(navigation.categories.map(({ id }) => id)).toEqual(['one', 'two', 'three'])
|
|
})
|
|
|
|
it('moves tools upward and downward within a category', () => {
|
|
expect(moveToolBy(navigation, 0, 0, 1).categories[0].tools).toEqual(['b', 'a', 'c'])
|
|
expect(moveToolBy(navigation, 0, 2, -1).categories[0].tools).toEqual(['a', 'c', 'b'])
|
|
})
|
|
|
|
it('moves tools across categories and appends them at the end', () => {
|
|
const crossList = relocateTool(navigation, { categoryIndex: 0, toolIndex: 1 }, { categoryIndex: 1, toolIndex: 1 })
|
|
expect(crossList.categories[0].tools).toEqual(['a', 'c'])
|
|
expect(crossList.categories[1].tools).toEqual(['d', 'b', 'e'])
|
|
|
|
const appended = moveToolToCategory(navigation, 'a', 0, 'three')
|
|
expect(appended.categories[0].tools).toEqual(['b', 'c'])
|
|
expect(appended.categories[2].tools).toEqual(['a'])
|
|
})
|
|
|
|
it('clamps end insertion and ignores invalid source positions', () => {
|
|
expect(relocateTool(navigation, { categoryIndex: 0, toolIndex: 0 }, { categoryIndex: 1, toolIndex: 99 }).categories[1].tools).toEqual(['d', 'e', 'a'])
|
|
expect(relocateTool(navigation, { categoryIndex: 9, toolIndex: 0 }, { categoryIndex: 1, toolIndex: 0 })).toEqual(navigation)
|
|
expect(moveCategoryBy(navigation, 0, -1)).toEqual(navigation)
|
|
})
|
|
})
|