Continue phase 2 device ops and dynamic QR lifecycle

This commit is contained in:
2026-05-26 21:25:07 +07:00
parent 5624b92872
commit e0b8f9af9a
22 changed files with 1050 additions and 92 deletions

View File

@ -197,6 +197,7 @@ async function reqDevice(path, opts = {}) {
await reqAdmin(`/admin/audit-logs?entity_id=${txId}`, { _label: 'GET /admin/audit-logs' });
await reqAdmin(`/admin/transactions/${txId}/heartbeats`, { _label: 'GET /admin/transactions/:id/heartbeats' });
await reqAdmin(`/admin/devices/${deviceId}/heartbeats`, { _label: 'GET /admin/devices/:id/heartbeats' });
await reqAdmin(`/admin/devices/${deviceId}`, { _label: 'GET /admin/devices/:id health summary' });
await reqAdmin('/admin/notifications/failed', { _label: 'GET /admin/notifications/failed' });
await reqAdmin(`/admin/transactions/${txId}/retry-notification`, {
method: 'POST',
@ -349,6 +350,31 @@ async function reqDevice(path, opts = {}) {
await reqAdmin(`/admin/transactions/${dynamicQr?.data?.transaction_id}`, {
_label: 'GET /admin/transactions/:id dynamic-api'
});
const dueDynamicTx = await reqAdmin('/admin/transactions', {
method: 'POST',
body: {
partner_reference: `DUE-DYN-${ts}`,
merchant_id: merchantId,
outlet_id: dynamicOutletId,
terminal_id: dynamicTerminalId,
device_id: dynamicDeviceId,
amount: 12000,
currency: 'IDR',
qr_mode: 'dynamic',
initiation_mode: 'dynamic_api',
status: 'awaiting_payment',
expired_at: new Date(Date.now() - 60_000).toISOString()
},
_label: 'POST /admin/transactions due dynamic'
});
await reqAdmin('/admin/transactions/expire-due', {
method: 'POST',
body: { limit: 10 },
_label: 'POST /admin/transactions/expire-due'
});
await reqAdmin(`/admin/transactions/${dueDynamicTx?.data?.id}`, {
_label: 'GET /admin/transactions/:id expired dynamic'
});
const mqttOutlet = await reqAdmin(`/admin/merchants/${merchantId}/outlets`, {
method: 'POST',
@ -452,6 +478,14 @@ async function reqDevice(path, opts = {}) {
_label: 'PATCH /admin/devices/:id/config'
});
const configVersion = pushedConfig?.data?.config?.config_version;
await reqAdmin(`/admin/devices/${dynamicDeviceId}/config/status`, {
_label: 'GET /admin/devices/:id/config/status pending'
});
await reqAdmin(`/admin/devices/${dynamicDeviceId}/config/retry-push`, {
method: 'POST',
body: {},
_label: 'POST /admin/devices/:id/config/retry-push'
});
await reqDevice(`/device/config?device_id=${dynamicDeviceId}`, {
_label: 'GET /device/config'
});
@ -468,9 +502,21 @@ async function reqDevice(path, opts = {}) {
await reqAdmin(`/admin/devices/${dynamicDeviceId}/config`, {
_label: 'GET /admin/devices/:id/config'
});
await reqAdmin(`/admin/devices/${dynamicDeviceId}/config/status`, {
_label: 'GET /admin/devices/:id/config/status applied'
});
await reqExpect(`/admin/devices/${dynamicDeviceId}/config/retry-push`, 409, {
method: 'POST',
headers: { Authorization: `Bearer ${ADMIN_TOKEN}` },
body: {},
_label: 'POST /admin/devices/:id/config/retry-push already applied'
});
await reqAdmin(`/admin/devices/${dynamicDeviceId}/mqtt-messages?message_type=config_push`, {
_label: 'GET /admin/devices/:id/mqtt-messages config'
});
await reqAdmin(`/admin/devices/${dynamicDeviceId}/mqtt-messages?message_type=config_ack`, {
_label: 'GET /admin/devices/:id/mqtt-messages config ack'
});
console.log(`Smoke point 4 flow done. tx=${txId} device=${deviceId}`);
})();