This commit is contained in:
@@ -16,6 +16,7 @@ import {
|
||||
} from '../../src/infrastructure/database/schema.js';
|
||||
import { createAcquisitionRepository } from '../../src/modules/acquisitions/repositories/acquisition-repository.js';
|
||||
import { createPricingRepository } from '../../src/modules/pricing/repositories/pricing-repository.js';
|
||||
import { createPricingRefreshJobRepository } from '../../src/modules/pricing/repositories/pricing-refresh-job-repository.js';
|
||||
import { createSaleRepository } from '../../src/modules/sales/repositories/sale-repository.js';
|
||||
|
||||
const connectionString = process.env.TEST_DATABASE_URL;
|
||||
@@ -31,6 +32,7 @@ if (!new URL(connectionString).pathname.endsWith('_test')) {
|
||||
const database = createDatabase(connectionString);
|
||||
const acquisitionRepository = createAcquisitionRepository(database.db);
|
||||
const pricingRepository = createPricingRepository(database.db);
|
||||
const pricingRefreshJobRepository = createPricingRefreshJobRepository(database.db);
|
||||
const saleRepository = createSaleRepository(database.db);
|
||||
|
||||
async function createFixture() {
|
||||
@@ -71,7 +73,7 @@ async function createFixture() {
|
||||
}
|
||||
|
||||
beforeEach(async () => {
|
||||
await database.db.execute(sql`TRUNCATE market_value_overrides, market_valuations, pricing_observations, sale_items, sales, acquisitions, security_audit_events, inventory_items, products, conditions, condition_profiles, categories, sellers, users CASCADE`);
|
||||
await database.db.execute(sql`TRUNCATE pricing_refresh_jobs, market_value_overrides, market_valuations, pricing_observations, sale_items, sales, acquisitions, security_audit_events, inventory_items, products, conditions, condition_profiles, categories, sellers, users CASCADE`);
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
@@ -155,3 +157,22 @@ test('persists acquisitions, valuations, multi-item sales, voids, and audit even
|
||||
const [auditEvent] = await database.db.select().from(securityAuditEvents).where(sql`event = 'SALE_VOIDED'`);
|
||||
assert.equal(auditEvent.userId, user.id);
|
||||
});
|
||||
|
||||
test('claims and completes a durable pricing refresh job', async () => {
|
||||
const { user, seller, product, condition, inventory } = await createFixture();
|
||||
const [job] = await pricingRefreshJobRepository.create({
|
||||
sellerId: seller.id,
|
||||
inventoryItemId: inventory[0].id,
|
||||
productId: product.id,
|
||||
conditionId: condition.id,
|
||||
providerId: 'integration',
|
||||
}).then((created) => [created]);
|
||||
|
||||
const claimed = await pricingRefreshJobRepository.claimNext();
|
||||
assert.equal(claimed.id, job.id);
|
||||
assert.equal(claimed.status, 'PROCESSING');
|
||||
const completed = await pricingRefreshJobRepository.complete(job.id, [{ priceMinor: 2500 }], { valueMinor: 2500 });
|
||||
assert.equal(completed.status, 'COMPLETED');
|
||||
assert.deepEqual(completed.valuation, { valueMinor: 2500 });
|
||||
assert.equal(user.email, 'transactions@example.test');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user