import assert from 'node:assert/strict'; import { mkdtempSync, rmSync } from 'node:fs'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; import LibDashStore from '../src/index.js'; import { BetterSqlite3Provider } from '../src/providers/sqlite3/index.js'; async function run() { console.log('--- Testing Carrier Store API ---'); const tempDir = mkdtempSync(join(tmpdir(), 'test-carrier-')); const dbFile = join(tempDir, 'test.db'); const storageDir = join(tempDir, 'storage'); const provider = new BetterSqlite3Provider({ filename: dbFile, storageDir, }); await provider.initialize(); const store = await new LibDashStore(provider); try { const googleAuthId = await store.google_auth.add('carrier-test@example.com'); const company = await store.company.create({ name: 'Carrier Test Corp', iso639: 'de', taxrate: 19, reducedtaxrate: 7, googleAuthId, }); await store.google_auth.setSelectedCompany(googleAuthId, company.id); // 1. Create carrier with defaults const c1 = await store.carrier.create(googleAuthId, { name: 'DHL' }); assert.equal(c1.name, 'DHL'); assert.equal(c1.sort, 0); assert.equal(c1.hasPackages, false); assert.equal(c1.isReverse, false); console.log('PASS: Carrier 1 created with defaults'); // 2. Create carrier with full flags const c2 = await store.carrier.create(googleAuthId, { name: 'UPS', sort: 5, hasPackages: true, isReverse: true, }); assert.equal(c2.name, 'UPS'); assert.equal(c2.sort, 5); assert.equal(c2.hasPackages, true); assert.equal(c2.isReverse, true); console.log('PASS: Carrier 2 created with custom flags'); // 3. Auto-increment sort const c3 = await store.carrier.create(googleAuthId, { name: 'DPD', hasPackages: true, }); assert.equal(c3.name, 'DPD'); assert.equal(c3.sort, 6); assert.equal(c3.hasPackages, true); assert.equal(c3.isReverse, false); console.log('PASS: Carrier 3 auto-incremented sort'); // 4. Duplicate name validation await assert.rejects( () => store.carrier.create(googleAuthId, { name: 'DHL' }), { message: 'Carrier already exists' }, ); console.log('PASS: Duplicate carrier rejected'); // 5. Empty name validation await assert.rejects( () => store.carrier.create(googleAuthId, { name: ' ' }), { message: 'Name required' }, ); console.log('PASS: Empty carrier name rejected'); // 6. getById const fetched = await store.carrier.getById(googleAuthId, c2.id); assert.deepEqual(fetched, c2); const notFound = await store.carrier.getById(googleAuthId, 9999); assert.equal(notFound, undefined); console.log('PASS: getById fetched carrier correctly'); // 7. list const list = await store.carrier.list(googleAuthId); assert.equal(list.length, 3); assert.equal(list[0].name, 'DHL'); assert.equal(list[1].name, 'UPS'); assert.equal(list[2].name, 'DPD'); console.log('PASS: list returned sorted carriers'); // 8. update const updated = await store.carrier.update(googleAuthId, c1.id, { name: 'DHL Express', hasPackages: true, isReverse: false, }); assert.equal(updated.name, 'DHL Express'); assert.equal(updated.hasPackages, true); console.log('PASS: update modified carrier'); // 9. reorder const ordered = await store.carrier.order(googleAuthId, { carrierIds: [c3.id, c2.id, c1.id], }); assert.deepEqual(ordered.carrierIds, [c3.id, c2.id, c1.id]); const listAfterOrder = await store.carrier.list(googleAuthId); assert.equal(listAfterOrder[0].id, c3.id); assert.equal(listAfterOrder[0].sort, 0); assert.equal(listAfterOrder[1].id, c2.id); assert.equal(listAfterOrder[1].sort, 1); assert.equal(listAfterOrder[2].id, c1.id); assert.equal(listAfterOrder[2].sort, 2); console.log('PASS: order successfully reordered carriers'); // 10. delete await store.carrier.delete(googleAuthId, c3.id); const listAfterDelete = await store.carrier.list(googleAuthId); assert.equal(listAfterDelete.length, 2); console.log('PASS: delete removed carrier'); await assert.rejects( () => store.carrier.delete(googleAuthId, c3.id), { message: 'Carrier not found' }, ); console.log('PASS: delete non-existent carrier rejected'); console.log('--- ALL CARRIER TESTS PASSED! ---'); } finally { try { rmSync(tempDir, { recursive: true, force: true }); } catch {} } } run().catch((err) => { console.error(err); process.exit(1); });