Files
opsxshell/test/utils/sessionGroupsOrder.test.ts

59 lines
2.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { compareBySortOrder, groupSessionsInDisplayOrder } from '../../src/utils/sessionGroups'
import type { Session } from '../../src/stores/sessionStore'
function session(id: string, sortOrder?: number, group?: string): Session {
return {
id,
name: id,
host: `${id}.example.com`,
port: 22,
username: 'root',
authType: 'key',
...(sortOrder !== undefined ? { sortOrder } : {}),
...(group !== undefined ? { group } : {}),
}
}
describe('compareBySortOrder', () => {
it('sorts explicit sortOrder ascending', () => {
const rows = [{ sortOrder: 2 }, { sortOrder: 0 }, { sortOrder: 1 }]
expect([...rows].sort(compareBySortOrder).map((r) => r.sortOrder)).toEqual([0, 1, 2])
})
it('keeps rows without sortOrder after ordered rows', () => {
const rows = [{ sortOrder: undefined }, { sortOrder: 0 }, {}, { sortOrder: 1 }]
const sorted = [...rows].sort(compareBySortOrder)
expect(sorted.map((r) => r.sortOrder ?? null)).toEqual([0, 1, null, null])
})
})
describe('groupSessionsInDisplayOrder', () => {
it('filters one group and orders by manual order with legacy rows last', () => {
const sessions = [
session('legacy-a'),
session('ordered-b', 1, 'prod'),
session('ordered-a', 0, 'prod'),
session('legacy-b'),
session('other', 0, 'staging'),
]
expect(groupSessionsInDisplayOrder(sessions, 'prod').map((s) => s.id)).toEqual(['ordered-a', 'ordered-b'])
expect(groupSessionsInDisplayOrder(sessions, 'default').map((s) => s.id)).toEqual(['legacy-a', 'legacy-b'])
})
it('preserves storage order among legacy rows (stable sort)', () => {
const sessions = [session('first'), session('second'), session('third')]
expect(groupSessionsInDisplayOrder(sessions, 'default').map((s) => s.id)).toEqual(['first', 'second', 'third'])
})
it('rewriting 0..n-1 makes the manual order authoritative', () => {
const sessions = [session('a'), session('b'), session('c')]
const reordered = ['c', 'a', 'b']
const rewritten = reordered.map((id, index) => ({
...sessions.find((s) => s.id === id)!,
sortOrder: index,
}))
expect(rewritten.sort(compareBySortOrder).map((s) => s.id)).toEqual(['c', 'a', 'b'])
})
})