unit/index.js
import chai from 'chai';
import sinon from 'sinon';
import sinonChai from 'sinon-chai';
import NprOneSDK from './../../src/index';
import Authorization from './../../src/controller/authorization';
import Action from './../../src/model/action';
import Logger from './../../src/util/logger';
const should = chai.should();
chai.use(sinonChai);
/** @test {NprOneSDK} */
describe('NprOneSDK', () => {
/** @type {NprOneSDK} */
let nprOne;
beforeEach(() => {
nprOne = new NprOneSDK();
});
/** @test {NprOneSDK.config} */
describe('config', () => {
describe('getter', () => {
it('should return an object with config related properties', () => {
NprOneSDK.config.authProxyBaseUrl.should.be.ok;
});
});
describe('setter', () => {
it('should update specific config values when set', () => {
const previousUrl = NprOneSDK.config.authProxyBaseUrl;
NprOneSDK.config = { 'authProxyBaseUrl': 'https://test' };
const newUrl = NprOneSDK.config.authProxyBaseUrl;
NprOneSDK.config.authProxyBaseUrl = previousUrl;
newUrl.should.equal('https://test');
});
it('should setup defaults if they haven\'t been set yet', () => {
NprOneSDK._config = undefined;
NprOneSDK.config = { 'test': 'value' };
NprOneSDK.config.test.should.equal('value');
});
it('should log a warning when setting deprecated properties', () => {
const stub = sinon.stub(Logger, 'warn');
const previousUrl = NprOneSDK.config.apiBaseUrl;
NprOneSDK.config = {
'apiBaseUrl': 'https://test',
'apiVersion': 'v2',
};
NprOneSDK.config.apiBaseUrl.should.equal('https://test');
NprOneSDK.config.apiVersion.should.equal('v2');
stub.should.have.been.calledTwice;
});
});
});
/** @test {NprOneSDK.accessToken} */
describe('accessToken', () => {
describe('getter', () => {
it('should return the value of the accessToken string in the hidden config object', () => {
NprOneSDK.accessToken.should.equal(NprOneSDK.config.accessToken);
});
});
describe('setter', () => {
it('should throw a TypeError if the passed-in value is not a string', () => {
chai.expect(() => {
NprOneSDK.accessToken = 1234;
}).to.throw('Value for accessToken must be a string');
});
it('should set the internal access token to the supplied string', () => {
NprOneSDK.accessToken = 'abcdefgh123456';
NprOneSDK.config.accessToken.should.equal('abcdefgh123456');
});
it('should call the registered callback if one is set', (done) => {
NprOneSDK.onAccessTokenChanged = () => {
NprOneSDK.config.accessToken.should.equal('abcdefgh123456789abced');
done();
};
NprOneSDK.accessToken = 'abcdefgh123456789abced';
});
it('but only if the new token is different from the old', () => {
NprOneSDK.onAccessTokenChanged = () => {
throw new Error('access token did not actually change, should never get here');
};
NprOneSDK.accessToken = NprOneSDK.config.accessToken;
});
});
});
/** @test {NprOneSDK.onAccessTokenChanged} */
describe('onAccessTokenChanged', () => {
describe('setter', () => {
it('should throw a TypeError if the passed-in value is not a function', () => {
chai.expect(() => {
NprOneSDK.onAccessTokenChanged = 'i_am_not_a_function';
}).to.throw('Value for onAccessTokenChanged must be a function');
});
});
});
/** @test {NprOneSDK.Action} */
describe('Action', () => {
it('should return the Action class', () => {
NprOneSDK.Action.should.equal(Action);
});
});
/** @test {NprOneSDK.Logger} */
describe('Logger', () => {
it('should return the Logger class', () => {
NprOneSDK.Logger.should.equal(Logger);
});
});
/** @test {NprOneSDK.refreshExistingAccessToken} */
describe('refreshExistingAccessToken', () => {
afterEach(() => {
Authorization.refreshExistingAccessToken.restore();
});
it('should call the correct service controller method', () => {
const stub = sinon.stub(Authorization, 'refreshExistingAccessToken');
NprOneSDK.refreshExistingAccessToken();
stub.should.have.been.calledWith();
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(Authorization, 'refreshExistingAccessToken');
NprOneSDK.refreshExistingAccessToken(3);
stub.should.have.been.calledWith(3);
});
});
/** @test {NprOneSDK#logout} */
describe('logout', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._authorization, 'logout');
nprOne.logout();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#getDeviceCode} */
describe('getDeviceCode', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._authorization, 'getDeviceCode');
nprOne.getDeviceCode();
stub.should.have.been.calledWith([]);
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._authorization, 'getDeviceCode');
nprOne.getDeviceCode(['listening.readonly']);
stub.should.have.been.calledWith(['listening.readonly']);
});
});
/** @test {NprOneSDK#pollDeviceCode} */
describe('pollDeviceCode', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._authorization, 'pollDeviceCode');
nprOne.pollDeviceCode();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#getRecommendation} */
describe('getRecommendation', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'getRecommendation');
nprOne.getRecommendation();
stub.should.have.been.calledWith('', 'npr');
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._listening, 'getRecommendation');
nprOne.getRecommendation('string1');
stub.should.have.been.calledWith('string1', 'npr');
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._listening, 'getRecommendation');
nprOne.getRecommendation('', 'string2');
stub.should.have.been.calledWith('', 'string2');
});
});
/** @test {NprOneSDK#getUpcomingFlowRecommendations} */
describe('getUpcomingFlowRecommendations', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'getUpcomingFlowRecommendations');
nprOne.getUpcomingFlowRecommendations();
stub.should.have.been.calledWith('npr');
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._listening, 'getUpcomingFlowRecommendations');
nprOne.getUpcomingFlowRecommendations('string1');
stub.should.have.been.calledWith('string1');
});
});
/** @test {NprOneSDK#getRecommendationsFromChannel} */
describe('getRecommendationsFromChannel', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'getRecommendationsFromChannel');
nprOne.getRecommendationsFromChannel();
stub.should.have.been.calledWith('recommended');
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._listening, 'getRecommendationsFromChannel');
nprOne.getRecommendationsFromChannel('string1');
stub.should.have.been.calledWith('string1');
});
});
/** @test {NprOneSDK#queueRecommendationFromChannel} */
describe('queueRecommendationFromChannel', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'queueRecommendationFromChannel');
nprOne.queueRecommendationFromChannel();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#getHistory} */
describe('getHistory', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'getHistory');
nprOne.getHistory();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#resetFlow} */
describe('resetFlow', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'resetFlow');
nprOne.resetFlow();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#resumeFlowFromRecommendation} */
describe('resumeFlowFromRecommendation', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._listening, 'resumeFlowFromRecommendation');
nprOne.resumeFlowFromRecommendation();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#getUser} */
describe('getUser', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._identity, 'getUser');
nprOne.getUser();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#setUserStation} */
describe('setUserStation', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._identity, 'setUserStation');
nprOne.setUserStation('404');
stub.should.have.been.calledWith('404');
});
});
/** @test {NprOneSDK#followShow} */
describe('followShow', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._identity, 'followShow');
nprOne.followShow('123');
stub.should.have.been.calledWith('123');
});
});
/** @test {NprOneSDK#unfollowShow} */
describe('unfollowShow', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._identity, 'unfollowShow');
nprOne.unfollowShow('456');
stub.should.have.been.calledWith('456');
});
});
/** @test {NprOneSDK#createTemporaryUser} */
describe('createTemporaryUser', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._identity, 'createTemporaryUser');
nprOne.createTemporaryUser();
stub.should.have.been.calledOnce;
});
});
/** @test {NprOneSDK#searchStations} */
describe('searchStations', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStations');
nprOne.searchStations();
stub.should.have.been.calledWith();
});
it('should call the correct service controller method with non-default param values', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStations');
nprOne.searchStations('ohio');
stub.should.have.been.calledWith('ohio');
});
});
/** @test {NprOneSDK#searchStationsByLatLongCoordinates} */
describe('searchStationsByLatLongCoordinates', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStationsByLatLongCoordinates');
nprOne.searchStationsByLatLongCoordinates('37.742', '-77.42');
stub.should.have.been.calledWith('37.742', '-77.42');
});
});
/** @test {NprOneSDK#searchStationsByCityAndState} */
describe('searchStationsByCityAndState', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStationsByCityAndState');
nprOne.searchStationsByCityAndState('fremont', 'ohio');
stub.should.have.been.calledWith('fremont', 'ohio');
});
});
/** @test {NprOneSDK#searchStationsByCity} */
describe('searchStationsByCity', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStationsByCity');
nprOne.searchStationsByCity('Toledo');
stub.should.have.been.calledWith('Toledo');
});
});
/** @test {NprOneSDK#searchStationsByState} */
describe('searchStationsByState', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'searchStationsByState');
nprOne.searchStationsByState('ohio');
stub.should.have.been.calledWith('ohio');
});
});
/** @test {NprOneSDK#getStationDetails} */
describe('getStationDetails', () => {
it('should call the correct service controller method', () => {
const stub = sinon.stub(nprOne._stationfinder, 'getStationDetails');
nprOne.getStationDetails(305);
stub.should.have.been.calledWith(305);
});
});
/** @test {NprOneSDK.getServiceUrl} */
describe('getServiceUrl', () => {
it('should return the correct API service url', () => {
const url = NprOneSDK.getServiceUrl('listening');
url.should.be.ok;
});
it('should throw if an invalid service name is specified', () => {
chai.expect(() => {
NprOneSDK.getServiceUrl('invalid');
}).to.throw('Must specify a valid service name');
});
});
});