diff --git a/package-lock.json b/package-lock.json index 00f003f..611d72d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,17 @@ { - "name": "@mparticle/web-rokt-wsdk-kit", + "name": "@mparticle/web-rokt-kit", "version": "0.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@mparticle/web-rokt-wsdk-kit", + "name": "@mparticle/web-rokt-kit", "version": "0.0.2", "license": "Apache-2.0", "dependencies": { - "@mparticle/web-sdk": "^2.20.0" + "@mparticle/web-sdk": "^2.35.1" }, "devDependencies": { - "@mparticle/web-kit-wrapper": "^1.0.5", "@semantic-release/changelog": "^5.0.1", "@semantic-release/exec": "^5.0.0", "@semantic-release/git": "^9.0.0", @@ -219,19 +218,10 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, - "node_modules/@mparticle/web-kit-wrapper": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mparticle/web-kit-wrapper/-/web-kit-wrapper-1.0.5.tgz", - "integrity": "sha512-keAK+DFjwUSW9Jh7hixcOaZF/m8GDPj/uLCcbWq2x8LaKoqFiaGsz4KXGS2oMmSQib698GCSujstPXzqGKvHeg==", - "dev": true, - "dependencies": { - "express": "^4.16.4" - } - }, "node_modules/@mparticle/web-sdk": { - "version": "2.26.10", - "resolved": "https://registry.npmjs.org/@mparticle/web-sdk/-/web-sdk-2.26.10.tgz", - "integrity": "sha512-nJN2Yfj/SYELvowDegKt8pu7Hmq/pKHoN2SXESFYparsslhL/XXcW8xaBGKfz8Ai4QUjsGYmBrMtjmDysR3S6Q==", + "version": "2.35.1", + "resolved": "https://registry.npmjs.org/@mparticle/web-sdk/-/web-sdk-2.35.1.tgz", + "integrity": "sha512-Csip1afdeatvkR1vXQwa2yDwf8dOHJv/HVipEbJpgI5fgy7K4K19KnR3CnUDIfRbcZwyCtU9OYgJ149rDQ+Buw==", "dependencies": { "@babel/runtime": "^7.23.2" } @@ -1323,12 +1313,6 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -2440,18 +2424,6 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -2610,12 +2582,6 @@ "node": ">= 0.6" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -2974,15 +2940,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", @@ -3015,12 +2972,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, "node_modules/detective": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", @@ -3699,15 +3650,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/events": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", @@ -3792,132 +3734,6 @@ "node": ">=0.10.0" } }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4319,15 +4135,6 @@ "node": ">=0.10.0" } }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4340,15 +4147,6 @@ "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/from2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", @@ -5958,15 +5756,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -6984,12 +6773,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -7006,15 +6789,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -11030,12 +10804,6 @@ "node": ">= 0.8.0" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -11263,19 +11031,6 @@ "node": ">=0.4.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -12265,91 +12020,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -13579,15 +13249,6 @@ "node": ">=0.10.0" } }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -13950,15 +13611,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vm-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", diff --git a/package.json b/package.json index 837965f..5443d8b 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "lint": "eslint src/ test/src/", "lint:fix": "eslint src/ test/src/ --fix", "watch": "rollup --config rollup.config.js -w", + "watch:test": "rollup --config rollup.test.config.js -w", "test": "npm run build && npm run build:test && karma start test/karma.config.js", - "test:debug": "npm run build && npm run build:test && karma start test/karma.config.js" + "test:debug": "npm run build && npm run build:test && DEBUG=true karma start test/karma.config.js" }, "publishConfig": { "access": "public" @@ -43,7 +44,7 @@ "watchify": "^3.11.0" }, "dependencies": { - "@mparticle/web-sdk": "^2.20.0" + "@mparticle/web-sdk": "^2.35.1" }, "license": "Apache-2.0" } diff --git a/src/Rokt-Kit.js b/src/Rokt-Kit.js index a85b081..31fdacb 100644 --- a/src/Rokt-Kit.js +++ b/src/Rokt-Kit.js @@ -18,14 +18,38 @@ var roktLauncherScript = 'https://apps.rokt.com/wsdk/integrations/launcher.js'; var name = 'Rokt'; var moduleId = 181; +function attachLauncher(accountId, sandboxMode) { + window.Rokt.createLauncher({ + accountId: accountId, + sandbox: sandboxMode, + }) + .then(function (launcher) { + // Assign the launcher to a global variable for later access + window.Rokt.currentLauncher = launcher; + window.mParticle.Rokt.attachLauncher(launcher); + + self.isInitialized = true; + }) + .catch(function (err) { + console.error('Error creating Rokt launcher:', err); + }); +} + var constructor = function () { var self = this; self.name = name; self.moduleId = moduleId; + self.isInitialized = false; - function initForwarder(settings) { + function initForwarder(settings, service, testMode) { var accountId = settings.accountId; + var sandboxMode = window.mParticle.getEnvironment() === 'development'; + + if (testMode) { + attachLauncher(accountId, sandboxMode); + return; + } if (!window.Rokt || !(window.Rokt && window.Rokt.currentLauncher)) { var target = document.head || document.body; @@ -44,18 +68,7 @@ var constructor = function () { typeof window.Rokt.createLauncher === 'function' && window.Rokt.currentLauncher === undefined ) { - window.Rokt.createLauncher({ - accountId: accountId, - sandbox: window.mParticle.getEnvironment() === 'development', - }) - .then(function (launcher) { - // Assign the launcher to a global variable for later access - window.Rokt.currentLauncher = launcher; - window.mParticle.Rokt.attachLauncher(launcher); - }) - .catch(function (err) { - console.error('Error creating Rokt launcher:', err); - }); + attachLauncher(accountId, sandboxMode); } else { console.error( 'Rokt object is not available after script load.' diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 0000000..d6808a8 --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,13 @@ +{ + "extends": "../.eslintrc", + "env": { + "mocha": true + }, + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module" + }, + "rules": { + "no-unused-expressions": "off" // Allows chai's expect(...).to.be.true + } +} \ No newline at end of file diff --git a/test/src/tests.js b/test/src/tests.js index 4eb4187..f25ac62 100644 --- a/test/src/tests.js +++ b/test/src/tests.js @@ -1,78 +1,51 @@ -/* eslint-disable no-undef*/ -describe('XYZ Forwarder', function () { - // -------------------DO NOT EDIT ANYTHING BELOW THIS LINE----------------------- - var // MessageType = { - // SessionStart: 1, - // SessionEnd: 2, - // PageView: 3, - // PageEvent: 4, - // CrashReport: 5, - // OptOut: 6, - // AppStateTransition: 10, - // Profile: 14, - // Commerce: 16 - // }, - // EventType = { - // Unknown: 0, - // Navigation: 1, - // Location: 2, - // Search: 3, - // Transaction: 4, - // UserContent: 5, - // UserPreference: 6, - // Social: 7, - // Other: 8, - // Media: 9, - // getName: function() { - // return 'blahblah'; - // } - // }, - // ProductActionType = { - // Unknown: 0, - // AddToCart: 1, - // RemoveFromCart: 2, - // Checkout: 3, - // CheckoutOption: 4, - // Click: 5, - // ViewDetail: 6, - // Purchase: 7, - // Refund: 8, - // AddToWishlist: 9, - // RemoveFromWishlist: 10 - // }, - IdentityType = { - Other: 0, - CustomerId: 1, - Facebook: 2, - Twitter: 3, - Google: 4, - Microsoft: 5, - Yahoo: 6, - Email: 7, - Alias: 8, - FacebookCustomAudienceId: 9, - }, - ReportingService = function () { - var self = this; +/* eslint-env es6, mocha */ +/* eslint-parser babel-eslint */ + +const waitForCondition = function async( + conditionFn, + timeout = 200, + interval = 10 +) { + return new Promise((resolve, reject) => { + const startTime = Date.now(); + + (function poll() { + if (conditionFn()) { + return resolve(undefined); + } else if (Date.now() - startTime > timeout) { + return reject(new Error('Timeout waiting for condition')); + } else { + setTimeout(poll, interval); + } + })(); + }); +}; - this.id = null; - this.event = null; +describe('Rokt Forwarder', () => { + var ReportingService = function () { + var self = this; - this.cb = function (forwarder, event) { - self.id = forwarder.id; - self.event = event; - }; + this.id = null; + this.event = null; - this.reset = function () { - this.id = null; - this.event = null; - }; - }, - reportService = new ReportingService(); + this.cb = function (forwarder, event) { + self.id = forwarder.id; + self.event = event; + }; + + this.reset = function () { + this.id = null; + this.event = null; + }; + }; + var reportService = new ReportingService(); // -------------------DO NOT EDIT ANYTHING ABOVE THIS LINE----------------------- // -------------------START EDITING BELOW:----------------------- // -------------------mParticle stubs - Add any additional stubbing to our methods as needed----------------------- + mParticle.getEnvironment = function () { + return 'development'; + }; mParticle.Identity = { getCurrentUser: function () { return { @@ -83,203 +56,56 @@ describe('XYZ Forwarder', function () { }, }; // -------------------START EDITING BELOW:----------------------- - var MockXYZForwarder = function () { + var MockRoktForwarder = function () { var self = this; - // create properties for each type of event you want tracked, see below for examples - this.trackCustomEventCalled = false; - this.logPurchaseEventCalled = false; this.initializeCalled = false; - this.trackCustomName = null; - this.logPurchaseName = null; - this.apiKey = null; - this.appId = null; - this.userId = null; - this.userAttributes = {}; - this.userIdField = null; + this.accountId = null; + this.sandbox = null; - this.eventProperties = []; - this.purchaseEventProperties = []; + this.createLauncherCalled = false; + this.createLauncher = function (options) { + self.accountId = options.accountId; + self.createLauncherCalled = true; - // stub your different methods to ensure they are being called properly - this.initialize = function (appId, apiKey) { - self.initializeCalled = true; - self.apiKey = apiKey; - self.appId = appId; - }; - - this.stubbedTrackingMethod = function (name, eventProperties) { - self.trackCustomEventCalled = true; - self.trackCustomName = name; - self.eventProperties.push(eventProperties); - // Return true to indicate event should be reported - return true; - }; - - this.stubbedUserAttributeSettingMethod = function (userAttributes) { - self.userId = id; - userAttributes = userAttributes || {}; - if (Object.keys(userAttributes).length) { - for (var key in userAttributes) { - if (userAttributes[key] === null) { - delete self.userAttributes[key]; - } else { - self.userAttributes[key] = userAttributes[key]; - } - } - } + return Promise.resolve({ + then: function (callback) { + callback(); + }, + }); }; - this.stubbedUserLoginMethod = function (id) { - self.userId = id; - }; + this.currentLauncher = function () {}; }; - before(function () {}); + before(() => {}); - beforeEach(function () { - window.MockXYZForwarder = new MockXYZForwarder(); - // Include any specific settings that is required for initializing your SDK here - var sdkSettings = { - clientKey: '123456', - appId: 'abcde', - userIdField: 'customerId', - }; - // You may require userAttributes or userIdentities to be passed into initialization - var userAttributes = { - color: 'green', + beforeEach(() => {}); + + it('should initialize the Rokt Web SDK', async () => { + window.Rokt = new MockRoktForwarder(); + window.mParticle.Rokt = window.Rokt; + window.mParticle.Rokt.attachLauncherCalled = false; + window.mParticle.Rokt.attachLauncher = async () => { + window.mParticle.Rokt.attachLauncherCalled = true; + Promise.resolve(); }; - var userIdentities = [ - { - Identity: 'customerId', - Type: IdentityType.CustomerId, - }, - { - Identity: 'email', - Type: IdentityType.Email, - }, + + await mParticle.forwarder.init( { - Identity: 'facebook', - Type: IdentityType.Facebook, + accountId: '123456', }, - ]; - - // The third argument here is a boolean to indicate that the integration is in test mode to avoid loading any third party scripts. Do not change this value. - mParticle.forwarder.init( - sdkSettings, reportService.cb, - true, - null, - userAttributes, - userIdentities + true ); - }); - it('should log event', function (done) { - // mParticle.forwarder.process({ - // EventDataType: MessageType.PageEvent, - // EventName: 'Test Event', - // EventAttributes: { - // label: 'label', - // value: 200, - // category: 'category' - // } - // }); + window.Rokt.accountId.should.equal('123456'); - // window.MockXYZForwarder.eventProperties[0].label.should.equal('label'); - // window.MockXYZForwarder.eventProperties[0].value.should.equal(200); + window.Rokt.createLauncherCalled.should.equal(true); - done(); - }); - - it('should log page view', function (done) { - // mParticle.forwarder.process({ - // EventDataType: MessageType.PageView, - // EventName: 'test name', - // EventAttributes: { - // attr1: 'test1', - // attr2: 'test2' - // } - // }); - // - // window.MockXYZForwarder.trackCustomEventCalled.should.equal(true); - // window.MockXYZForwarder.trackCustomName.should.equal('test name'); - // window.MockXYZForwarder.eventProperties[0].attr1.should.equal('test1'); - // window.MockXYZForwarder.eventProperties[0].attr2.should.equal('test2'); - - done(); - }); - - it('should log a product purchase commerce event', function (done) { - // mParticle.forwarder.process({ - // EventName: 'Test Purchase Event', - // EventDataType: MessageType.Commerce, - // EventCategory: EventType.ProductPurchase, - // ProductAction: { - // ProductActionType: ProductActionType.Purchase, - // ProductList: [ - // { - // Sku: '12345', - // Name: 'iPhone 6', - // Category: 'Phones', - // Brand: 'iPhone', - // Variant: '6', - // Price: 400, - // TotalAmount: 400, - // CouponCode: 'coupon-code', - // Quantity: 1 - // } - // ], - // TransactionId: 123, - // Affiliation: 'my-affiliation', - // TotalAmount: 450, - // TaxAmount: 40, - // ShippingAmount: 10, - // CouponCode: null - // } - // }); - // - // window.MockXYZForwarder.trackCustomEventCalled.should.equal(true); - // window.MockXYZForwarder.trackCustomName.should.equal('Purchase'); - // - // window.MockXYZForwarder.eventProperties[0].Sku.should.equal('12345'); - // window.MockXYZForwarder.eventProperties[0].Name.should.equal('iPhone 6'); - // window.MockXYZForwarder.eventProperties[0].Category.should.equal('Phones'); - // window.MockXYZForwarder.eventProperties[0].Brand.should.equal('iPhone'); - // window.MockXYZForwarder.eventProperties[0].Variant.should.equal('6'); - // window.MockXYZForwarder.eventProperties[0].Price.should.equal(400); - // window.MockXYZForwarder.eventProperties[0].TotalAmount.should.equal(400); - // window.MockXYZForwarder.eventProperties[0].CouponCode.should.equal('coupon-code'); - // window.MockXYZForwarder.eventProperties[0].Quantity.should.equal(1); - - done(); - }); - - it('should set customer id user identity on user identity change', function (done) { - // var fakeUserStub = { - // getUserIdentities: function() { - // return { - // userIdentities: { - // customerid: '123' - // } - // }; - // }, - // getMPID: function() { - // return 'testMPID'; - // }, - // setUserAttribute: function() { - // - // }, - // removeUserAttribute: function() { - // - // } - // }; - // - // mParticle.forwarder.onUserIdentified(fakeUserStub); - // - // window.MockXYZForwarder.userId.should.equal('123'); - - done(); + await waitForCondition( + () => window.mParticle.Rokt.attachLauncherCalled === true + ); }); });