ask-cli
Version:
Alexa Skills Kit (ASK) Command Line Interfaces
130 lines (123 loc) • 5.31 kB
JavaScript
const { expect } = require('chai');
const sinon = require('sinon');
const httpClient = require('@src/clients/http-client');
const AuthorizationController = require('@src/controllers/authorization-controller');
const CONSTANTS = require('@src/utils/constants');
const noop = () => {};
module.exports = (smapiClient) => {
describe('# smapi client skill package APIs', () => {
let httpClientStub;
beforeEach(() => {
httpClientStub = sinon.stub(httpClient, 'request').callsFake(noop);
sinon.stub(AuthorizationController.prototype, 'tokenRefreshAndRead');
});
const TEST_SKILL_ID = 'skillId';
const TEST_VENDOR_ID = 'vendorId';
const TEST_SKILL_STAGE = 'stage';
const TEST_LOCATION = 'packageLocation';
const TEST_IMPORT_ID = 'importId';
const TEST_EXPORT_ID = 'exportId';
const TEST_PROFILE = 'testProfile';
const TEST_ACCESS_TOKEN = 'access_token';
[
{
testCase: 'create-upload',
apiFunc: smapiClient.skillPackage.createUpload,
parameters: [noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/uploads`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'import-package with skillId only',
apiFunc: smapiClient.skillPackage.importPackage,
parameters: [TEST_SKILL_ID, null, TEST_LOCATION, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/${TEST_SKILL_ID}/imports`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: { location: TEST_LOCATION },
json: true
}
},
{
testCase: 'import-package with vendorId only',
apiFunc: smapiClient.skillPackage.importPackage,
parameters: [null, TEST_VENDOR_ID, TEST_LOCATION, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/imports`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: { location: TEST_LOCATION, vendorId: TEST_VENDOR_ID },
json: true
}
},
{
testCase: 'get-import-status',
apiFunc: smapiClient.skillPackage.getImportStatus,
parameters: [TEST_IMPORT_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/imports/${TEST_IMPORT_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'export-package',
apiFunc: smapiClient.skillPackage.exportPackage,
parameters: [TEST_SKILL_ID, TEST_SKILL_STAGE, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/${TEST_SKILL_ID}/stages/${TEST_SKILL_STAGE}/exports`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'get-export-status',
apiFunc: smapiClient.skillPackage.getExportStatus,
parameters: [TEST_EXPORT_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v1/skills/exports/${TEST_EXPORT_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
].forEach(({ testCase, apiFunc, parameters, expectedOptions }) => {
it(`| call ${testCase} successfully`, () => {
// setup
AuthorizationController.prototype.tokenRefreshAndRead.callsArgWith(1, null, TEST_ACCESS_TOKEN);
// call
apiFunc(...parameters);
// verify
expect(AuthorizationController.prototype.tokenRefreshAndRead.called).equal(true);
expect(AuthorizationController.prototype.tokenRefreshAndRead.args[0][0]).equal(TEST_PROFILE);
expect(httpClientStub.args[0][0]).deep.equal(expectedOptions);
});
});
afterEach(() => {
sinon.restore();
});
});
};