Skip to content

Commit 667bb87

Browse files
committed
test(utils): cover select option helpers
Signed-off-by: Vitor Mattos <1079143+vitormattos@users.noreply.github.com>
1 parent 0e30504 commit 667bb87

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// SPDX-FileCopyrightText: 2026 LibreCode coop and LibreCode contributors
2+
// SPDX-License-Identifier: AGPL-3.0-or-later
3+
4+
import { describe, expect, it } from 'vitest'
5+
6+
import {
7+
createEditableSelectOptions,
8+
extractEditableSelectOptionValues,
9+
normalizeEditableSelectOptionValue,
10+
parseEditableSelectOptionValues,
11+
moveEditableSelectOption,
12+
} from '../../utils/selectFieldOptions.ts'
13+
14+
describe('selectFieldOptions', () => {
15+
it('creates draggable options with stable ids and preserves values', () => {
16+
let nextId = 0
17+
const createId = () => `option-${nextId++}`
18+
19+
expect(createEditableSelectOptions(['Alpha', 'Beta'], createId)).toEqual([
20+
{ id: 'option-0', value: 'Alpha' },
21+
{ id: 'option-1', value: 'Beta' },
22+
])
23+
})
24+
25+
it('extracts option values for persistence', () => {
26+
expect(extractEditableSelectOptionValues([
27+
{ id: 'option-0', value: 'Alpha' },
28+
{ id: 'option-1', value: 'Beta' },
29+
])).toEqual(['Alpha', 'Beta'])
30+
})
31+
32+
it('normalizes option values for duplicate detection', () => {
33+
expect(normalizeEditableSelectOptionValue(' Alpha ')).toBe('alpha')
34+
expect(normalizeEditableSelectOptionValue('BeTa')).toBe('beta')
35+
})
36+
37+
it('parses multiple option lines and ignores blanks', () => {
38+
expect(parseEditableSelectOptionValues('Alpha\n\n Beta \n \nGamma')).toEqual(['Alpha', 'Beta', 'Gamma'])
39+
})
40+
41+
it('moves an option one position up or down', () => {
42+
const options = [
43+
{ id: 'option-0', value: 'Alpha' },
44+
{ id: 'option-1', value: 'Beta' },
45+
{ id: 'option-2', value: 'Gamma' },
46+
]
47+
48+
expect(moveEditableSelectOption(options, 1, -1).map(({ id }) => id)).toEqual(['option-1', 'option-0', 'option-2'])
49+
expect(moveEditableSelectOption(options, 1, 1).map(({ id }) => id)).toEqual(['option-0', 'option-2', 'option-1'])
50+
})
51+
52+
it('returns the original array when the move is out of bounds', () => {
53+
const options = [
54+
{ id: 'option-0', value: 'Alpha' },
55+
{ id: 'option-1', value: 'Beta' },
56+
]
57+
58+
expect(moveEditableSelectOption(options, 0, -1)).toBe(options)
59+
expect(moveEditableSelectOption(options, 1, 1)).toBe(options)
60+
})
61+
})

0 commit comments

Comments
 (0)