feat: add product provider mappings
Quality / test (push) Canceled after 0s

This commit is contained in:
2026-09-09 12:58:02 -04:00
parent bab4efc6ad
commit 4d3af37cd7
17 changed files with 253 additions and 3 deletions
@@ -17,6 +17,7 @@ import {
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 { createProviderMappingRepository } from '../../src/modules/pricing/repositories/provider-mapping-repository.js';
import { createSaleRepository } from '../../src/modules/sales/repositories/sale-repository.js';
const connectionString = process.env.TEST_DATABASE_URL;
@@ -33,6 +34,7 @@ const database = createDatabase(connectionString);
const acquisitionRepository = createAcquisitionRepository(database.db);
const pricingRepository = createPricingRepository(database.db);
const pricingRefreshJobRepository = createPricingRefreshJobRepository(database.db);
const providerMappingRepository = createProviderMappingRepository(database.db);
const saleRepository = createSaleRepository(database.db);
async function createFixture() {
@@ -73,7 +75,7 @@ async function createFixture() {
}
beforeEach(async () => {
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`);
await database.db.execute(sql`TRUNCATE pricing_provider_mappings, 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 () => {
@@ -176,3 +178,18 @@ test('claims and completes a durable pricing refresh job', async () => {
assert.deepEqual(completed.valuation, { valueMinor: 2500 });
assert.equal(user.email, 'transactions@example.test');
});
test('persists and disables seller-owned provider mappings', async () => {
const { seller, product } = await createFixture();
const created = await providerMappingRepository.createForSeller({
productId: product.id,
providerId: 'integration',
mappingType: 'PRODUCT',
externalIdentifier: 'catalog-1',
}, seller.id);
assert.equal(created.status, 'CREATED');
assert.equal((await providerMappingRepository.listForSeller(product.id, seller.id)).length, 1);
const disabled = await providerMappingRepository.disableForSeller(created.mapping.id, seller.id);
assert.equal(disabled.status, 'DISABLED');
assert.equal((await providerMappingRepository.listForSeller(product.id, seller.id)).length, 0);
});