@stylusapparel/opv3-merchant-api-nodejs
Version:
This is the official NodeJs wrapper for connecting to the StylusOP API V3
105 lines (101 loc) • 3.34 kB
JavaScript
const axios = require('axios');
const { __defaults } = require('../constants/url');
const __mockWrapper = require('..');
const { MOCK_SECRET_TOKEN, MOCK_MERCHANT_ID, MOCK_MERCHANT_NAME } = require('./__mocks__/auth.json');
const { MOCK_LIST_SHIPMENTS, MOCK_SHIPMENT_ID, MOCK_LIST_SHIPMENTS_RESPONSE, MOCK_GET_SHIPMENT_RESPONSE } = require('./__mocks__/shipment.json');
const { _errorConst } = require('../constants/const');
const { OAUTH_TOKEN_RESPONSE } = require('./__mocks__/auth.json');
// Set the API URL to the local API for testing in development
process.env.STYLUSOP_API_URL = 'http://localhost:3600/api/';
const _mockClient = __mockWrapper.createClient(MOCK_MERCHANT_ID, MOCK_SECRET_TOKEN, { apiVersion: __defaults.LATEST_VERSION, sandbox: true, merchantName: MOCK_MERCHANT_NAME, maxRetries: 0 });
afterEach(() => {
jest.clearAllMocks();
});
beforeEach(async () => {
axios.post.mockImplementationOnce(() =>
Promise.resolve({
data: { ...OAUTH_TOKEN_RESPONSE },
status: 200,
}),
);
await _mockClient.oauthToken();
});
describe('SHIPMENT MODULE - Validating success scenarios', () => {
it(' => stylusClient.shipments.list({MOCK_LIST_SHIPMENTS}) ', async () => {
axios.get.mockImplementationOnce(() =>
Promise.resolve({
data: { ...MOCK_LIST_SHIPMENTS_RESPONSE },
status: 200,
}),
);
const gen = await _mockClient.shipments.list(MOCK_LIST_SHIPMENTS);
expect(axios.get).toHaveBeenCalledTimes(1);
expect(gen).toEqual(MOCK_LIST_SHIPMENTS_RESPONSE.shipments);
});
it(' => stylusClient.shipments.get(MOCK_SHIPMENT_ID) ', async () => {
axios.get.mockImplementationOnce(() =>
Promise.resolve({
data: { ...MOCK_GET_SHIPMENT_RESPONSE },
status: 200,
}),
);
const gen = await _mockClient.shipments.get(MOCK_SHIPMENT_ID);
expect(axios.get).toHaveBeenCalledTimes(1);
expect(gen).toEqual(MOCK_GET_SHIPMENT_RESPONSE.shipment);
});
it(' => stylusClient.shipments.status(MOCK_SHIPMENT_ID) ', async () => {
axios.get.mockImplementationOnce(() =>
Promise.resolve({
data: { ...MOCK_GET_SHIPMENT_RESPONSE },
status: 200,
}),
);
const gen = await _mockClient.shipments.status(MOCK_SHIPMENT_ID);
expect(axios.get).toHaveBeenCalledTimes(1);
expect(gen).toEqual(MOCK_GET_SHIPMENT_RESPONSE.shipment.status);
});
});
describe('SHIPMENT MODULE - Validating failure scenarios', () => {
it(' => stylusClient.shipments.list() ', async () => {
axios.get.mockImplementationOnce(() =>
Promise.reject({
response: {
data: {
error: {
errorCode: _errorConst.UNKNOWN_ERROR,
},
},
status: 500,
},
}),
);
try {
await _mockClient.shipments.list();
expect(true).toEqual(false);
} catch (err) {
expect(axios.get).toHaveBeenCalledTimes(1);
expect(err.errorCode).toEqual(_errorConst.UNKNOWN_ERROR);
}
});
it(' => stylusClient.shipments.get(MOCK_SHIPMENT_ID) ', async () => {
axios.get.mockImplementationOnce(() =>
Promise.reject({
response: {
data: {
error: {
errorCode: 'ShipmentNotFound',
},
},
status: 404,
},
}),
);
try {
await _mockClient.shipments.get(MOCK_SHIPMENT_ID);
expect(true).toEqual(false);
} catch (err) {
expect(axios.get).toHaveBeenCalledTimes(1);
expect(err.errorCode).toEqual(_errorConst.SHIPMENT_NOT_FOUND);
}
});
});