159 lines
6.0 KiB
JavaScript
159 lines
6.0 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import 'dotenv/config';
|
|
import LibDashStore from '../src/index.js';
|
|
import { BetterSqlite3Provider } from '../src/providers/sqlite3/index.js';
|
|
import { MssqlProvider } from '../src/providers/mssql/index.js';
|
|
|
|
async function testProvider(name, provider) {
|
|
console.log(`\n=== Testing ${name} ===`);
|
|
await provider.initialize();
|
|
const store = await new LibDashStore(provider);
|
|
|
|
// 1. Setup company and user
|
|
const email = `test-manifest-${Date.now()}@example.com`;
|
|
const googleAuthId = await store.google_auth.add(email);
|
|
const company = await store.company.create({
|
|
name: `Test Manifest Corp ${Date.now()}`,
|
|
iso639: 'de',
|
|
taxrate: 19,
|
|
reducedtaxrate: 7,
|
|
googleAuthId,
|
|
});
|
|
await store.google_auth.setSelectedCompany(googleAuthId, company.id);
|
|
|
|
const supplier = await store.supplier.create(googleAuthId, {
|
|
name: 'Test Supplier',
|
|
});
|
|
const groups = await store.customergroup.list(googleAuthId);
|
|
const customer = await store.entity.create(googleAuthId, {
|
|
name: 'Test Customer',
|
|
customergroupId: groups[0].id,
|
|
});
|
|
|
|
// 2. Test delivery with both dates
|
|
console.log('Testing delivery creation with date and createdAt...');
|
|
const deliveryDate = '2026-10-15T12:00:00.000Z';
|
|
const customCreatedAt = '2026-09-01T08:30:00.000Z';
|
|
|
|
const createdDelivery = await store.delivery.create(googleAuthId, {
|
|
externalNumber: 'DEL-2DATES-1',
|
|
supplierId: supplier.id,
|
|
date: deliveryDate,
|
|
createdAt: customCreatedAt,
|
|
lines: [
|
|
{ name: 'Article 1', amount: 2, net: 50, taxrate: 19 },
|
|
],
|
|
});
|
|
|
|
assert(createdDelivery.id, 'Delivery should have an id');
|
|
assert(createdDelivery.date, 'Delivery should have a delivery date');
|
|
assert(createdDelivery.createdAt, 'Delivery should have createdAt');
|
|
console.log('Delivery created:', {
|
|
id: createdDelivery.id,
|
|
date: createdDelivery.date,
|
|
createdAt: createdDelivery.createdAt,
|
|
});
|
|
|
|
// Verify delivery getById
|
|
const fetchedDelivery = await store.delivery.getById(googleAuthId, createdDelivery.id);
|
|
assert.equal(new Date(fetchedDelivery.date).toISOString().slice(0, 10), '2026-10-15');
|
|
assert.equal(new Date(fetchedDelivery.createdAt).toISOString().slice(0, 10), '2026-09-01');
|
|
|
|
// Verify delivery update
|
|
const updatedDeliveryDate = '2026-11-20T12:00:00.000Z';
|
|
const updatedDelivery = await store.delivery.update(googleAuthId, createdDelivery.id, {
|
|
date: updatedDeliveryDate,
|
|
});
|
|
assert.equal(new Date(updatedDelivery.date).toISOString().slice(0, 10), '2026-11-20');
|
|
assert.equal(new Date(updatedDelivery.createdAt).toISOString().slice(0, 10), '2026-09-01');
|
|
|
|
// Verify delivery.list ledger info before booking
|
|
let listBefore = await store.delivery.list(googleAuthId);
|
|
const foundBefore = listBefore.find((d) => d.id === createdDelivery.id);
|
|
assert(foundBefore, 'Delivery should be in delivery.list');
|
|
assert.equal(foundBefore.ledger.totalPositions, 1, 'Delivery ledger should have 1 totalPosition');
|
|
assert.equal(foundBefore.ledger.completelyOnLedgerPositions, 0, 'Delivery ledger should have 0 completelyOnLedgerPositions initially');
|
|
assert.equal(foundBefore.totalPositions, undefined, 'totalPositions should not be at top level');
|
|
assert.equal(foundBefore.completelyOnLedgerPositions, undefined, 'completelyOnLedgerPositions should not be at top level');
|
|
|
|
// Book line to ledger
|
|
await store.ledger.add(googleAuthId, {
|
|
manifestarticle_id: createdDelivery.lines[0].id,
|
|
transaction_type: 'DELIVERY',
|
|
amount: 2,
|
|
transaction_text: `Lieferung ${createdDelivery.id}`,
|
|
});
|
|
|
|
// Verify delivery.list ledger info after booking
|
|
let listAfter = await store.delivery.list(googleAuthId);
|
|
const foundAfter = listAfter.find((d) => d.id === createdDelivery.id);
|
|
assert(foundAfter, 'Delivery should be in delivery.list after booking');
|
|
assert.equal(foundAfter.ledger.totalPositions, 1, 'Delivery ledger should have 1 totalPosition');
|
|
assert.equal(foundAfter.ledger.completelyOnLedgerPositions, 1, 'Delivery ledger should have 1 completelyOnLedgerPosition after booking');
|
|
console.log('✓ Verified delivery.list ledger info (unbooked -> booked):', foundAfter.ledger);
|
|
|
|
// 3. Test quote with both dates
|
|
console.log('Testing quote creation...');
|
|
const quote = await store.quote.create(googleAuthId, {
|
|
number: `Q-${Date.now()}`,
|
|
date: '2026-12-01T00:00:00.000Z',
|
|
createdAt: '2026-09-10T00:00:00.000Z',
|
|
lines: [{ name: 'Quote item', amount: 1, net: 100, taxrate: 19 }],
|
|
});
|
|
assert(quote.createdAt, 'Quote should have createdAt');
|
|
assert(quote.date, 'Quote should have date');
|
|
|
|
// 4. Test order with default createdAt
|
|
console.log('Testing order creation with default createdAt...');
|
|
const order = await store.order.create(googleAuthId, {
|
|
number: `ORD-${Date.now()}`,
|
|
date: '2026-12-15T00:00:00.000Z',
|
|
entityId: customer.id,
|
|
lines: [{ name: 'Order item', amount: 3, net: 25, taxrate: 19 }],
|
|
});
|
|
assert(order.createdAt, 'Order should have default createdAt populated');
|
|
assert(order.date, 'Order should have date');
|
|
console.log('Order created with auto createdAt:', {
|
|
id: order.id,
|
|
date: order.date,
|
|
createdAt: order.createdAt,
|
|
});
|
|
|
|
console.log(`✓ All tests passed for ${name}!`);
|
|
}
|
|
|
|
async function main() {
|
|
// Test SQLite provider with existing dashback database
|
|
const sqliteProvider = new BetterSqlite3Provider({
|
|
filename: '/home/seb/src/dashback/data/dash.db',
|
|
});
|
|
try {
|
|
await testProvider('SQLite (dash.db)', sqliteProvider);
|
|
} finally {
|
|
sqliteProvider.close();
|
|
}
|
|
|
|
// Test MSSQL provider
|
|
const mssqlConfig = {
|
|
server: process.env.MSSQL_SERVER,
|
|
database: process.env.MSSQL_DATABASE,
|
|
user: process.env.MSSQL_USER,
|
|
password: process.env.MSSQL_PASSWORD,
|
|
options: {
|
|
encrypt: false,
|
|
trustServerCertificate: true,
|
|
},
|
|
};
|
|
const mssqlProvider = new MssqlProvider(mssqlConfig);
|
|
try {
|
|
await testProvider('MSSQL (dashback)', mssqlProvider);
|
|
} finally {
|
|
await mssqlProvider.close();
|
|
}
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error('Test failed:', err);
|
|
process.exit(1);
|
|
});
|