diff --git a/src/commands/hook/CreateHookCommand.js b/src/commands/hook/CreateHookCommand.js index df85ee8..e132073 100644 --- a/src/commands/hook/CreateHookCommand.js +++ b/src/commands/hook/CreateHookCommand.js @@ -22,6 +22,9 @@ function getEventType(program) { if(program.deviceDataChange) { return 'DEVICE_DATA_CHANGE'; } + if(program.devicePackageChange) { + return 'DEVICE_PACKAGE_CHANGE'; + } } function getGoogleClientSecret(program) { @@ -29,9 +32,10 @@ function getGoogleClientSecret(program) { } function hasValidEventType(program) { - return (!program.ping && program.enrollment && !program.deviceDataChange || - program.ping && !program.enrollment && !program.deviceDataChange || - !program.ping && !program.enrollment && program.deviceDataChange); + return (!program.ping && program.enrollment && !program.deviceDataChange && !program.devicePackageChange || + program.ping && !program.enrollment && !program.deviceDataChange && !program.devicePackageChange || + !program.ping && !program.enrollment && program.deviceDataChange && !program.devicePackageChange || + !program.ping && !program.enrollment && !program.deviceDataChange && program.devicePackageChange); } function hasValidHookTypeAndArguments(program) { @@ -47,6 +51,7 @@ class CreateHookCommand extends BarracksCommand { .option('--ping', 'To create a hook triggered by the ping of a device.') .option('--enrollment', 'To create a hook for the first ping of a device.') .option('--deviceDataChange', 'To create a hook triggered when a device pings with new custom client data.') + .option('--devicePackageChange', 'To create a hook triggered when a device pings with new packages.') .option('--web', 'To create a web hook') .option('--googleAnalytics', 'To create a Google Analytics hook') .option('--bigquery', 'To create a BigQuery hook') diff --git a/tests/commands/hook/CreateHookCommand.spec.js b/tests/commands/hook/CreateHookCommand.spec.js index 38061fa..e7defff 100644 --- a/tests/commands/hook/CreateHookCommand.spec.js +++ b/tests/commands/hook/CreateHookCommand.spec.js @@ -118,7 +118,7 @@ describe('CreateHookCommand', () => { expect(result).to.be.true; }); - it('should return true when event type is enrollment', () => { + it('should return true when event type is deviceDataChange', () => { // Given const program = Object.assign({}, programWithValidOptions, { ping: false, deviceDataChange:true }); // When @@ -127,6 +127,16 @@ describe('CreateHookCommand', () => { expect(result).to.be.true; }); + it('should return true when event type is devicePackageChange', () => { + // Given + const program = Object.assign({}, programWithValidOptions, { ping: false, devicePackageChange:true }); + // When + const result = createHookCommand.validateCommand(program); + // Then + expect(result).to.be.true; + }); + + it('should return false when event type is missing', () => { // Given const program = Object.assign({}, programWithValidOptions, { ping: undefined }); @@ -163,6 +173,15 @@ describe('CreateHookCommand', () => { expect(result).to.be.false; }); + it('should return false when devicePackageChange and deviceDataChange', () => { + // Given + const program = Object.assign({}, programWithValidOptions, { ping:false, deviceDataChange: true, devicePackageChange:true }); + // When + const result = createHookCommand.validateCommand(program); + // Then + expect(result).to.be.false; + }); + it('should return false when web and GA', () => { // Given const program = Object.assign({}, programWithValidOptions, { web:true, googleAnalytics: true }); @@ -255,12 +274,6 @@ describe('CreateHookCommand', () => { it('should return the created hook when the request was successful and event type is ping', done => { // Given - const spyReadObjectFromFile = sinon.spy(); - proxyReadObjectFromFile = (file) => { - spyReadObjectFromFile(file); - return undefined; - }; - createHookCommand.getAuthenticationToken = sinon.stub().returns(Promise.resolve(token)); createHookCommand.barracks = { createHook: sinon.stub().returns(Promise.resolve(createdHook)) @@ -288,12 +301,6 @@ describe('CreateHookCommand', () => { it('should return the created hook when the request was successful and event type is enrollment', done => { // Given - const spyReadObjectFromFile = sinon.spy(); - proxyReadObjectFromFile = (file) => { - spyReadObjectFromFile(file); - return undefined; - }; - const program = Object.assign({}, programWithValidOptions, { ping: false, enrollment:true }); createHookCommand.getAuthenticationToken = sinon.stub().returns(Promise.resolve(token)); createHookCommand.barracks = { @@ -322,12 +329,6 @@ describe('CreateHookCommand', () => { it('should return the created hook when the request was successful and event type is deviceDataChange', done => { // Given - const spyReadObjectFromStdin = sinon.spy(); - proxyReadObjectFromStdin = () => { - spyReadObjectFromStdin(); - return undefined; - }; - const program = Object.assign({}, programWithValidOptions, { ping: false, deviceDataChange:true }); createHookCommand.getAuthenticationToken = sinon.stub().returns(Promise.resolve(token)); createHookCommand.barracks = { @@ -354,14 +355,36 @@ describe('CreateHookCommand', () => { }); }); - it('should return the created hook when the request was successful and hook type is google analytics', done => { + it('should return the created hook when the request was successful and event type is devicePackageChange', done => { // Given - const spyReadObjectFromFile = sinon.spy(); - proxyReadObjectFromFile = (file) => { - spyReadObjectFromFile(file); - return undefined; + const program = Object.assign({}, programWithValidOptions, { ping: false, devicePackageChange:true }); + createHookCommand.getAuthenticationToken = sinon.stub().returns(Promise.resolve(token)); + createHookCommand.barracks = { + createHook: sinon.stub().returns(Promise.resolve(createdHook)) }; + // When / Then + createHookCommand.execute(program).then(result => { + expect(result).to.be.equals(createdHook); + expect(createHookCommand.getAuthenticationToken).to.have.been.calledOnce; + expect(createHookCommand.getAuthenticationToken).to.have.been.calledWithExactly(); + expect(createHookCommand.barracks.createHook).to.have.been.calledOnce; + expect(createHookCommand.barracks.createHook).to.have.been.calledWithExactly(token, { + eventType: 'DEVICE_PACKAGE_CHANGE', + type: 'web', + name: program.name, + url: program.url, + gaTrackingId: undefined, + googleClientSecret: undefined + }); + done(); + }).catch(err => { + done(err); + }); + }); + + it('should return the created hook when the request was successful and hook type is google analytics', done => { + // Given const program = Object.assign({}, programWithValidOptions, { web: false, googleAnalytics: true, gaTrackingId: 'UA-12453453-23' }); createHookCommand.getAuthenticationToken = sinon.stub().returns(Promise.resolve(token)); createHookCommand.barracks = {