ask-cli
Version:
Alexa Skills Kit (ASK) Command Line Interfaces
286 lines (278 loc) • 12.5 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('# catalog CRUD related APIs', () => {
let httpClientStub;
beforeEach(() => {
httpClientStub = sinon.stub(httpClient, 'request').callsFake(noop);
sinon.stub(AuthorizationController.prototype, 'tokenRefreshAndRead');
});
const TEST_SKILL_ID = 'skillId';
const TEST_CATALOG_ID = 'catalogId';
const TEST_VENDOR_ID = 'vendorId';
const TEST_UPLOAD_ID = 'uploadId';
const TEST_NEXT_TOKEN = 'nextToken';
const TEST_MAX_RESULTS = 'maxResults';
const TEST_CATALOG_TYPE = 'type';
const TEST_CATALOG_USAGE = 'usage';
const TEST_CATALOG_TITLE = 'title';
const TEST_NUMBER_OF_PARTS = 'numberOfParts';
const TEST_PART_ETAG_LIST = ['list1', 'list2'];
const TEST_PROFILE = 'testProfile';
const TEST_ACCESS_TOKEN = 'access_token';
[
{
testCase: 'create-catalog',
apiFunc: smapiClient.catalog.createCatalog,
parameters: [TEST_CATALOG_TITLE, TEST_CATALOG_TYPE, TEST_CATALOG_USAGE, TEST_VENDOR_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: {
title: TEST_CATALOG_TITLE,
type: TEST_CATALOG_TYPE,
usage: TEST_CATALOG_USAGE,
vendorId: TEST_VENDOR_ID
},
json: true
}
},
{
testCase: 'get-catalog',
apiFunc: smapiClient.catalog.getCatalog,
parameters: [TEST_CATALOG_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalogs',
apiFunc: smapiClient.catalog.listCatalogs,
parameters: [TEST_VENDOR_ID, { nextToken: TEST_NEXT_TOKEN, maxResults: TEST_MAX_RESULTS }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs?nextToken=${TEST_NEXT_TOKEN}&maxResults=${TEST_MAX_RESULTS}&vendorId=${TEST_VENDOR_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalogs without next token',
apiFunc: smapiClient.catalog.listCatalogs,
parameters: [TEST_VENDOR_ID, { maxResults: TEST_MAX_RESULTS }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs?maxResults=${TEST_MAX_RESULTS}&vendorId=${TEST_VENDOR_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalogs without max results',
apiFunc: smapiClient.catalog.listCatalogs,
parameters: [TEST_VENDOR_ID, { nextToken: TEST_NEXT_TOKEN }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs?nextToken=${TEST_NEXT_TOKEN}&vendorId=${TEST_VENDOR_ID}&maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalogs without max results nor next token',
apiFunc: smapiClient.catalog.listCatalogs,
parameters: [TEST_VENDOR_ID, {}, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs?vendorId=${TEST_VENDOR_ID}&maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalogs with null query',
apiFunc: smapiClient.catalog.listCatalogs,
parameters: [TEST_VENDOR_ID, null, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs?vendorId=${TEST_VENDOR_ID}&maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'create-catalog-upload',
apiFunc: smapiClient.catalog.createCatalogUpload,
parameters: [TEST_CATALOG_ID, TEST_NUMBER_OF_PARTS, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: {
numberOfParts: TEST_NUMBER_OF_PARTS
},
json: true
}
},
{
testCase: 'get-catalog-upload',
apiFunc: smapiClient.catalog.getCatalogUpload,
parameters: [TEST_CATALOG_ID, TEST_UPLOAD_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads/${TEST_UPLOAD_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalog-uploads',
apiFunc: smapiClient.catalog.listCatalogUploads,
parameters: [TEST_CATALOG_ID, { nextToken: TEST_NEXT_TOKEN, maxResults: TEST_MAX_RESULTS }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads?nextToken=${TEST_NEXT_TOKEN}&maxResults=${TEST_MAX_RESULTS}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalog-uploads without next token',
apiFunc: smapiClient.catalog.listCatalogUploads,
parameters: [TEST_CATALOG_ID, { maxResults: TEST_MAX_RESULTS }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads?maxResults=${TEST_MAX_RESULTS}`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalog-uploads without max results',
apiFunc: smapiClient.catalog.listCatalogUploads,
parameters: [TEST_CATALOG_ID, { nextToken: TEST_NEXT_TOKEN }, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads?nextToken=${TEST_NEXT_TOKEN}&maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalog-uploads without max results nor next token',
apiFunc: smapiClient.catalog.listCatalogUploads,
parameters: [TEST_CATALOG_ID, {}, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads?maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'list-catalog-uploads with null query',
apiFunc: smapiClient.catalog.listCatalogUploads,
parameters: [TEST_CATALOG_ID, null, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads?maxResults=50`,
method: CONSTANTS.HTTP_REQUEST.VERB.GET,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'associate-catalog-with-skill',
apiFunc: smapiClient.catalog.associateCatalogWithSkill,
parameters: [TEST_SKILL_ID, TEST_CATALOG_ID, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/skills/${TEST_SKILL_ID}/catalogs/${TEST_CATALOG_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.PUT,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: null,
json: false
}
},
{
testCase: 'complete-catalog-upload',
apiFunc: smapiClient.catalog.completeCatalogUpload,
parameters: [TEST_CATALOG_ID, TEST_UPLOAD_ID, TEST_PART_ETAG_LIST, noop],
expectedOptions: {
url: `${CONSTANTS.SMAPI.ENDPOINT}/v0/catalogs/${TEST_CATALOG_ID}/uploads/${TEST_UPLOAD_ID}`,
method: CONSTANTS.HTTP_REQUEST.VERB.POST,
headers: {
authorization: TEST_ACCESS_TOKEN
},
body: {
partETags: TEST_PART_ETAG_LIST
},
json: true
}
},
].forEach(({ testCase, apiFunc, parameters, expectedOptions }) => {
it(`| call ${testCase} successfully`, (done) => {
// 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);
done();
});
});
afterEach(() => {
sinon.restore();
});
});
};