Skip to content

Commit 16b6996

Browse files
author
Jaissica Hora
committed
feat: added terminate, getVersion method with tests
1 parent 5833746 commit 16b6996

2 files changed

Lines changed: 251 additions & 0 deletions

File tree

src/Rokt-Kit.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,30 @@ var constructor = function () {
260260
return self.launcher.use(extensionName);
261261
}
262262

263+
/**
264+
* Terminates the Rokt Integration Launcher instance
265+
* @returns {Promise<void>} A Promise that resolves when termination completes
266+
*/
267+
function terminate() {
268+
if (!isKitReady()) {
269+
console.error('Rokt Kit: Not initialized');
270+
return Promise.reject(new Error('Rokt Kit: Not initialized'));
271+
}
272+
return self.launcher.terminate();
273+
}
274+
275+
/**
276+
* Returns the version of the launcher
277+
* @returns {Promise<string>} A promise resolving to the version string
278+
*/
279+
function getVersion() {
280+
if (!isKitReady()) {
281+
console.error('Rokt Kit: Not initialized');
282+
return null;
283+
}
284+
return self.launcher.getVersion();
285+
}
286+
263287
/**
264288
* Sets extension data for Rokt Web SDK
265289
* @param {Object} partnerExtensionData - The extension data object containing:
@@ -394,6 +418,8 @@ var constructor = function () {
394418
this.selectPlacements = selectPlacements;
395419
this.hashAttributes = hashAttributes;
396420
this.use = use;
421+
this.terminate = terminate;
422+
this.getVersion = getVersion;
397423

398424
// Kit Callback Methods
399425
this.init = initForwarder;

test/src/tests.js

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,231 @@ describe('Rokt Forwarder', () => {
368368
});
369369
});
370370

371+
describe('#terminate', () => {
372+
beforeEach(() => {
373+
window.Rokt = new MockRoktForwarder();
374+
window.mParticle.Rokt = window.Rokt;
375+
window.mParticle.Rokt.attachKitCalled = false;
376+
window.mParticle.Rokt.attachKit = async (kit) => {
377+
window.mParticle.Rokt.attachKitCalled = true;
378+
window.mParticle.Rokt.kit = kit;
379+
Promise.resolve();
380+
};
381+
});
382+
383+
it('should call launcher.terminate when fully initialized', async () => {
384+
window.mParticle.forwarder.isInitialized = true;
385+
window.mParticle.forwarder.launcher = {
386+
terminate: function () {
387+
window.Rokt.terminateCalled = true;
388+
return Promise.resolve();
389+
},
390+
};
391+
392+
await window.mParticle.forwarder.terminate();
393+
394+
window.Rokt.terminateCalled.should.equal(true);
395+
});
396+
397+
it('should reject when called before initialization', async () => {
398+
window.mParticle.forwarder.isInitialized = false;
399+
400+
try {
401+
await window.mParticle.forwarder.terminate();
402+
} catch (error) {
403+
error.message.should.equal('Rokt Kit: Not initialized');
404+
}
405+
});
406+
407+
it('should log an error when called before initialization', async () => {
408+
const originalConsoleError = window.console.error;
409+
let errorLogged = false;
410+
let errorMessage = null;
411+
window.console.error = function (message) {
412+
errorLogged = true;
413+
errorMessage = message;
414+
};
415+
416+
window.mParticle.forwarder.isInitialized = false;
417+
window.mParticle.forwarder.launcher = null;
418+
419+
try {
420+
await window.mParticle.forwarder.terminate();
421+
throw new Error('Expected promise to reject');
422+
} catch (error) {
423+
error.message.should.equal('Rokt Kit: Not initialized');
424+
} finally {
425+
window.console.error = originalConsoleError;
426+
}
427+
428+
errorLogged.should.equal(true);
429+
errorMessage.should.equal('Rokt Kit: Not initialized');
430+
});
431+
432+
it('should log an error when kit is initialized but launcher is missing', async () => {
433+
const originalConsoleError = window.console.error;
434+
let errorLogged = false;
435+
let errorMessage = null;
436+
window.console.error = function (message) {
437+
errorLogged = true;
438+
errorMessage = message;
439+
};
440+
441+
window.mParticle.forwarder.isInitialized = true;
442+
window.mParticle.forwarder.launcher = null;
443+
444+
try {
445+
await window.mParticle.forwarder.terminate();
446+
throw new Error('Expected promise to reject');
447+
} catch (error) {
448+
error.message.should.equal('Rokt Kit: Not initialized');
449+
} finally {
450+
window.console.error = originalConsoleError;
451+
}
452+
errorLogged.should.equal(true);
453+
errorMessage.should.equal('Rokt Kit: Not initialized');
454+
});
455+
456+
it('should call launcher.terminate after init (test mode) and attach', async () => {
457+
window.mParticle.Rokt.attachKitCalled = false;
458+
window.mParticle.Rokt.attachKit = async (kit) => {
459+
window.mParticle.Rokt.attachKitCalled = true;
460+
window.mParticle.Rokt.kit = kit;
461+
Promise.resolve();
462+
};
463+
464+
window.Rokt.createLauncher = async function () {
465+
return Promise.resolve({
466+
terminate: function () {
467+
window.Rokt.terminateCalled = true;
468+
return Promise.resolve();
469+
},
470+
});
471+
};
472+
473+
await window.mParticle.forwarder.init(
474+
{
475+
accountId: '123456',
476+
},
477+
reportService.cb,
478+
true,
479+
null,
480+
{}
481+
);
482+
483+
await waitForCondition(() => window.mParticle.Rokt.attachKitCalled);
484+
485+
await window.mParticle.forwarder.terminate();
486+
487+
window.Rokt.terminateCalled.should.equal(true);
488+
});
489+
});
490+
491+
describe('#getVersion', () => {
492+
beforeEach(() => {
493+
window.Rokt = new MockRoktForwarder();
494+
window.mParticle.Rokt = window.Rokt;
495+
window.mParticle.Rokt.attachKitCalled = false;
496+
window.mParticle.Rokt.attachKit = async (kit) => {
497+
window.mParticle.Rokt.attachKitCalled = true;
498+
window.mParticle.Rokt.kit = kit;
499+
Promise.resolve();
500+
};
501+
});
502+
503+
it('should call launcher.getVersion when fully initialized and return value', async () => {
504+
window.mParticle.forwarder.isInitialized = true;
505+
window.mParticle.forwarder.launcher = {
506+
getVersion: function () {
507+
window.Rokt.getVersionCalled = true;
508+
return '1.1';
509+
},
510+
};
511+
512+
const version = window.mParticle.forwarder.getVersion();
513+
514+
window.Rokt.getVersionCalled.should.equal(true);
515+
version.should.equal('1.1');
516+
});
517+
518+
it('should return null and log when called before initialization', async () => {
519+
const originalConsoleError = window.console.error;
520+
let errorLogged = false;
521+
let errorMessage = null;
522+
window.console.error = function (message) {
523+
errorLogged = true;
524+
errorMessage = message;
525+
};
526+
527+
window.mParticle.forwarder.isInitialized = false;
528+
window.mParticle.forwarder.launcher = null;
529+
530+
const version = window.mParticle.forwarder.getVersion();
531+
532+
(version === null).should.equal(true);
533+
errorLogged.should.equal(true);
534+
errorMessage.should.equal('Rokt Kit: Not initialized');
535+
536+
window.console.error = originalConsoleError;
537+
});
538+
539+
it('should return null and log when kit is initialized but launcher is missing', async () => {
540+
const originalConsoleError = window.console.error;
541+
let errorLogged = false;
542+
let errorMessage = null;
543+
window.console.error = function (message) {
544+
errorLogged = true;
545+
errorMessage = message;
546+
};
547+
548+
window.mParticle.forwarder.isInitialized = true;
549+
window.mParticle.forwarder.launcher = null;
550+
551+
const version = window.mParticle.forwarder.getVersion();
552+
553+
(version === null).should.equal(true);
554+
errorLogged.should.equal(true);
555+
errorMessage.should.equal('Rokt Kit: Not initialized');
556+
557+
window.console.error = originalConsoleError;
558+
});
559+
560+
it('should call launcher.getVersion after init (test mode) and attach', async () => {
561+
window.mParticle.Rokt.attachKitCalled = false;
562+
window.mParticle.Rokt.attachKit = async (kit) => {
563+
window.mParticle.Rokt.attachKitCalled = true;
564+
window.mParticle.Rokt.kit = kit;
565+
Promise.resolve();
566+
};
567+
568+
window.Rokt.createLauncher = async function () {
569+
return Promise.resolve({
570+
getVersion: function () {
571+
window.Rokt.getVersionCalled = true;
572+
return '1.1';
573+
},
574+
});
575+
};
576+
577+
await window.mParticle.forwarder.init(
578+
{
579+
accountId: '123456',
580+
},
581+
reportService.cb,
582+
true,
583+
null,
584+
{}
585+
);
586+
587+
await waitForCondition(() => window.mParticle.Rokt.attachKitCalled);
588+
589+
const version = window.mParticle.forwarder.getVersion();
590+
591+
window.Rokt.getVersionCalled.should.equal(true);
592+
version.should.equal('1.1');
593+
});
594+
});
595+
371596
describe('#hashAttributes', () => {
372597
beforeEach(() => {
373598
window.Rokt = new MockRoktForwarder();

0 commit comments

Comments
 (0)