@buun_group/interparcel-api-sdk
Version:
Interparcel API SDK for Node.js
90 lines (77 loc) • 2.5 kB
text/typescript
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { trackParcel } from '../trackShipment';
import { TrackingResponse } from '../types';
const mock = new MockAdapter(axios);
describe('trackParcel', () => {
const apiKey = 'test-api-key';
const trackingNumber = 'TRACK123';
afterEach(() => {
mock.reset();
});
it('fetches tracking info successfully', async () => {
const mockResponse: TrackingResponse = {
status: 0,
service: 'AusPost Express',
currentStatus: 'T',
dateSent: '2024-03-20',
dateDelivered: '2024-03-21',
timeDelivered: '14:30',
signedForName: 'John Smith',
events: [
{
date: '2024-03-21',
time: '14:30',
event: 'Delivered',
location: 'Melbourne VIC',
status: 'D',
},
{
date: '2024-03-21',
time: '09:00',
event: 'Out for delivery',
location: 'Melbourne VIC',
status: 'O',
},
{
date: '2024-03-20',
time: '18:00',
event: 'In transit',
location: 'Sydney NSW',
status: 'T',
},
{
date: '2024-03-20',
time: '10:00',
event: 'Collected',
location: 'Brisbane QLD',
status: 'B',
},
],
};
mock.onGet(`https://api.interparcel.com/tracking/${trackingNumber}`).reply(200, mockResponse);
const result = await trackParcel(apiKey, trackingNumber);
expect(result).toEqual(mockResponse);
expect(mock.history.get[0].headers).toMatchObject({
Accept: 'application/json',
'Content-Type': 'application/json',
'X-Interparcel-Auth': apiKey,
'X-Interparcel-API-Version': '1',
});
});
it('handles error response correctly', async () => {
const errorResponse = {
status: 1,
errorMessage: 'Invalid tracking number',
errorCode: 'INVALID_TRACKING',
};
mock.onGet(`https://api.interparcel.com/tracking/${trackingNumber}`).reply(400, errorResponse);
await expect(trackParcel(apiKey, trackingNumber)).rejects.toThrow(
`Tracking API error: ${errorResponse.errorMessage} (${errorResponse.errorCode})`,
);
});
it('throws error on network failure', async () => {
mock.onGet(`https://api.interparcel.com/tracking/${trackingNumber}`).networkError();
await expect(trackParcel(apiKey, trackingNumber)).rejects.toThrow('Tracking API error');
});
});