Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,59 @@
|
||||
// Generated, do not edit. sha256:ade336b7bb05d651a613138854c9a018ee8f1d1702e7f4ffe8b66a1fb63b515b
|
||||
import { describe, it } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { seedValues, normalizeOptions, loadOptions } from '../../client/ui/table-edit-values.js';
|
||||
|
||||
const columns = [
|
||||
{ key: 'name', edit: { type: 'text' } },
|
||||
{ key: 'amount', edit: { type: 'number', value: r => (r ? r.amount * 2 : 'leeg') } },
|
||||
{ key: 'shown' },
|
||||
{ key: 'kind', edit: { type: 'select', options: ['a', { value: 'b', label: 'B' }] } },
|
||||
{ key: 'acc', edit: { type: 'select', options: async vals => [{ value: vals.kind, label: 'from ' + vals.kind }] } },
|
||||
];
|
||||
|
||||
describe('seedValues', () => {
|
||||
it('an existing row: edit.value over the raw field, only editable columns, no defaults', () => {
|
||||
assert.deepEqual(seedValues(columns, { name: 'n', amount: 2, shown: 's', kind: 'a', acc: 1 }, { name: 'default' }),
|
||||
{ name: 'n', amount: 4, kind: 'a', acc: 1 });
|
||||
});
|
||||
|
||||
it('a new row: edit.value gets null, the rest undefined, and newDefaults go on top', () => {
|
||||
const v = seedValues(columns, null, { kind: 'b', extra: 1 });
|
||||
assert.deepEqual(v, { name: undefined, amount: 'leeg', kind: 'b', acc: undefined, extra: 1 });
|
||||
});
|
||||
|
||||
it('a new row without defaults', () => {
|
||||
assert.deepEqual(Object.keys(seedValues(columns, null)), ['name', 'amount', 'kind', 'acc']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('normalizeOptions', () => {
|
||||
it('a plain value becomes value and label; an object stays as it is; nothing is an empty list', () => {
|
||||
assert.deepEqual(normalizeOptions(['x', 2, { value: 'y', label: 'Y' }]), [
|
||||
{ value: 'x', label: 'x' }, { value: 2, label: 2 }, { value: 'y', label: 'Y' },
|
||||
]);
|
||||
assert.deepEqual(normalizeOptions(null), []);
|
||||
assert.deepEqual(normalizeOptions(undefined), []);
|
||||
});
|
||||
});
|
||||
|
||||
describe('loadOptions', () => {
|
||||
it('fills the cache for every column with options, awaiting a callback with the current values', async () => {
|
||||
const cache = await loadOptions(columns, { kind: 'z' }, new Map());
|
||||
assert.deepEqual([...cache.keys()], ['kind', 'acc']);
|
||||
assert.deepEqual(cache.get('kind'), [{ value: 'a', label: 'a' }, { value: 'b', label: 'B' }]);
|
||||
assert.deepEqual(cache.get('acc'), [{ value: 'z', label: 'from z' }]);
|
||||
});
|
||||
|
||||
it('empties the cache first, so a list of an earlier row does not linger', async () => {
|
||||
const cache = new Map([['old', [{ value: 1, label: 1 }]], ['kind', []]]);
|
||||
await loadOptions(columns, {}, cache);
|
||||
assert.equal(cache.has('old'), false);
|
||||
assert.equal(cache.get('kind').length, 2);
|
||||
});
|
||||
|
||||
it('a callback that returns nothing gives an empty list, not a missing one', async () => {
|
||||
const cache = await loadOptions([{ key: 'k', edit: { options: async () => null } }], {}, new Map());
|
||||
assert.deepEqual(cache.get('k'), []);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user