67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { LegacyReadRepository } from '../dist/db/legacy-read-repository.js';
|
|
|
|
const calls = [];
|
|
const fakePool = {
|
|
async query(sql, parameters) {
|
|
calls.push({ sql, parameters });
|
|
return [[{
|
|
legacyId: '7',
|
|
tenantId: '2',
|
|
parentId: '3',
|
|
name: 'Room A',
|
|
code: 'A01',
|
|
status: 'OPEN',
|
|
startAt: null,
|
|
endAt: null
|
|
}], []];
|
|
}
|
|
};
|
|
|
|
const repository = new LegacyReadRepository(fakePool);
|
|
const rooms = await repository.listRooms({ tenantId: 2, parentId: 3, limit: 25 });
|
|
|
|
assert.equal(rooms.length, 1);
|
|
assert.equal(calls.length, 1);
|
|
assert.match(calls[0].sql, /FROM `member_room_info`/);
|
|
assert.match(calls[0].sql, /`tenant_id` = \?/);
|
|
assert.match(calls[0].sql, /`store_id` = \?/);
|
|
assert.match(calls[0].sql, /ORDER BY `id` ASC LIMIT \?/);
|
|
assert.deepEqual(calls[0].parameters, [2, 3, 25]);
|
|
assert.doesNotMatch(calls[0].sql, /\b(?:INSERT|UPDATE|DELETE|REPLACE)\b/i);
|
|
|
|
await assert.rejects(
|
|
() => repository.listStores({ tenantId: 2, limit: 501 }),
|
|
/between 1 and 500/
|
|
);
|
|
|
|
const unsafeRepository = new LegacyReadRepository(fakePool, {
|
|
stores: {
|
|
table: 'member_store_info; DROP TABLE users',
|
|
idColumn: 'id',
|
|
tenantColumn: 'tenant_id'
|
|
},
|
|
rooms: {
|
|
table: 'member_room_info',
|
|
idColumn: 'id',
|
|
tenantColumn: 'tenant_id'
|
|
},
|
|
orders: {
|
|
table: 'member_order_info',
|
|
idColumn: 'id',
|
|
tenantColumn: 'tenant_id'
|
|
},
|
|
devices: {
|
|
table: 'member_device_info',
|
|
idColumn: 'id',
|
|
tenantColumn: 'tenant_id'
|
|
}
|
|
});
|
|
|
|
await assert.rejects(
|
|
() => unsafeRepository.listStores({ tenantId: 2 }),
|
|
/Unsafe legacy SQL identifier/
|
|
);
|
|
|
|
console.log('PASS: legacy read-only repository contracts are present.');
|