feat(P19ERP3-1,P19ERP3-2): 实现资产ERP摘要服务与建卡/流转出站联动
这个提交包含在:
@@ -167,6 +167,59 @@ describe('ERP Sync Services', () => {
|
||||
expect(result.retryable).toBe(true);
|
||||
});
|
||||
|
||||
it('returns mock asset export result when provider is mock', async () => {
|
||||
const result = await erp.exportAssetToErp(
|
||||
{ erpSyncEnabled: true, erpSyncProvider: 'mock' },
|
||||
{ assetNo: 'ZC-001', entityId: 'asset-1' },
|
||||
);
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
expect(result.code).toBe('mock_synced');
|
||||
expect(result.response.externalAssetId).toContain('ZC-001');
|
||||
expect(result.response.externalAssetNo).toContain('ZC-001');
|
||||
});
|
||||
|
||||
it('handles http asset export 4xx errors', async () => {
|
||||
global.fetch = vi.fn().mockResolvedValue({
|
||||
ok: false,
|
||||
status: 400,
|
||||
headers: { get: () => 'application/json' },
|
||||
json: vi.fn().mockResolvedValue({ code: 'bad_request' }),
|
||||
});
|
||||
|
||||
const result = await erp.exportAssetToErp(
|
||||
{
|
||||
erpSyncEnabled: true,
|
||||
erpSyncProvider: 'http',
|
||||
erpAssetExportEndpoint: 'https://example.com/assets',
|
||||
erpAssetTimeoutMs: 500,
|
||||
},
|
||||
{ exportType: 'asset_ledger_summary', assetNo: 'ZC-001' },
|
||||
);
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
expect(result.code).toBe('erp_asset_http_4xx');
|
||||
expect(result.retryable).toBe(false);
|
||||
});
|
||||
|
||||
it('handles http asset export timeout', async () => {
|
||||
global.fetch = vi.fn().mockRejectedValue({ name: 'AbortError' });
|
||||
|
||||
const result = await erp.exportAssetToErp(
|
||||
{
|
||||
erpSyncEnabled: true,
|
||||
erpSyncProvider: 'http',
|
||||
erpAssetExportEndpoint: 'https://example.com/assets',
|
||||
erpAssetTimeoutMs: 500,
|
||||
},
|
||||
{ exportType: 'asset_ledger_summary', assetNo: 'ZC-001' },
|
||||
);
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
expect(result.code).toBe('erp_asset_timeout');
|
||||
expect(result.retryable).toBe(true);
|
||||
});
|
||||
|
||||
it('returns invalid provider if unsupported', async () => {
|
||||
const result = await erp.exportJournalToErp(
|
||||
{ erpSyncEnabled: true, erpSyncProvider: 'invalid_xyz' },
|
||||
|
||||
在新工单中引用
屏蔽一个用户