94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
decodeBusinessLocations,
|
|
emptyBusinessLocation,
|
|
encodeBusinessLocations,
|
|
hasDuplicateBusinessLocationPath,
|
|
updateBusinessLocation,
|
|
} from '../../resources/js/lib/business-locations.ts';
|
|
|
|
void test('location paths survive draft encoding and malformed drafts are ignored safely', () => {
|
|
const paths = [
|
|
{
|
|
province_id: 'province-a',
|
|
district_id: 'district-a',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
{
|
|
province_id: 'province-b',
|
|
district_id: '',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
];
|
|
assert.deepEqual(
|
|
decodeBusinessLocations(encodeBusinessLocations(paths)),
|
|
paths,
|
|
);
|
|
assert.deepEqual(decodeBusinessLocations('{invalid'), []);
|
|
assert.deepEqual(decodeBusinessLocations('null'), []);
|
|
});
|
|
|
|
void test('changing a parent clears every dependent selection in only that row', () => {
|
|
const initial = {
|
|
province_id: 'province-a',
|
|
district_id: 'district-a',
|
|
admin_post_id: 'post-a',
|
|
locality_id: 'locality-a',
|
|
};
|
|
const rows = [initial, emptyBusinessLocation()];
|
|
const updated = updateBusinessLocation(
|
|
rows,
|
|
0,
|
|
'district_id',
|
|
'district-b',
|
|
);
|
|
assert.deepEqual(updated[0], {
|
|
province_id: 'province-a',
|
|
district_id: 'district-b',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
});
|
|
assert.deepEqual(updated[1], emptyBusinessLocation());
|
|
});
|
|
|
|
void test('overlapping paths are detected while separate administrative branches remain valid', () => {
|
|
assert.equal(
|
|
hasDuplicateBusinessLocationPath([
|
|
{
|
|
province_id: 'province-a',
|
|
district_id: '',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
{
|
|
province_id: 'province-a',
|
|
district_id: 'district-a',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
]),
|
|
true,
|
|
);
|
|
assert.equal(
|
|
hasDuplicateBusinessLocationPath([
|
|
{
|
|
province_id: 'province-a',
|
|
district_id: 'district-a',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
{
|
|
province_id: 'province-a',
|
|
district_id: 'district-b',
|
|
admin_post_id: '',
|
|
locality_id: '',
|
|
},
|
|
emptyBusinessLocation(),
|
|
]),
|
|
false,
|
|
);
|
|
});
|