diff --git a/lib-es5/utils/encoding/sdkAnalytics/getSDKVersions.js b/lib-es5/utils/encoding/sdkAnalytics/getSDKVersions.js new file mode 100644 index 00000000..78f30b25 --- /dev/null +++ b/lib-es5/utils/encoding/sdkAnalytics/getSDKVersions.js @@ -0,0 +1,32 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var sdkCode = 'M'; // Constant per SDK + +/** + * @description Gets the relevant versions of the SDK(package version, node version and sdkCode) + * @param {'default' | 'x.y.z' | 'x.y' | string} useSDKVersion Default uses package.json version + * @param {'default' | 'x.y.z' | 'x.y' | string} useNodeVersion Default uses process.versions.node + * @return {{sdkSemver:string, techVersion:string, sdkCode:string}} A map of relevant versions and codes + */ +function getSDKVersions() { + var useSDKVersion = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default'; + var useNodeVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default'; + + var pkgJSONFile = fs.readFileSync(path.join(__dirname, '../../../../package.json'), 'utf-8'); + + // allow to pass a custom SDKVersion + var sdkSemver = useSDKVersion === 'default' ? JSON.parse(pkgJSONFile).version : useSDKVersion; + + // allow to pass a custom techVersion (Node version) + var techVersion = useNodeVersion === 'default' ? process.versions.node : useNodeVersion; + + return { + sdkSemver, + techVersion, + sdkCode + }; +} + +module.exports = getSDKVersions; \ No newline at end of file diff --git a/lib-es5/utils/encoding/sdkVersionID/base64Map.js b/lib-es5/utils/encoding/sdkVersionID/base64Map.js deleted file mode 100644 index a0ac9677..00000000 --- a/lib-es5/utils/encoding/sdkVersionID/base64Map.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } - -var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -var num = 0; -var map = {}; - -[].concat(_toConsumableArray(chars)).forEach(function (char) { - var key = num.toString(2).padStart(6, '0'); - map[key] = char; - num++; -}); - -/** - * Map of six-bit binary codes to Base64 characters - */ -module.exports = map; \ No newline at end of file diff --git a/lib-es5/utils/encoding/sdkVersionID/encodeVersion.js b/lib-es5/utils/encoding/sdkVersionID/encodeVersion.js deleted file mode 100644 index 53b8b317..00000000 --- a/lib-es5/utils/encoding/sdkVersionID/encodeVersion.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var base64Map = require('./base64Map'); -var reverseVersion = require('./revereseVersion'); - -/** - * @description Encodes a semVer-like version string - * @param {string} semVer Input can be either x.y.z or x.y - * @return {string} A string built from 3 characters of the base64 table that encode the semVer - */ -function encodeVersion(semVer) { - var strResult = ''; - - // support x.y or x.y.z by using 'parts' as a variable - var parts = semVer.split('.').length; - var paddedStringLength = parts * 6; // we pad to either 12 or 18 characters - - // reverse (but don't mirror) the version. 1.5.15 -> 15.5.1 - // Pad to two spaces, 15.5.1 -> 15.05.01 - var paddedReversedSemver = reverseVersion(semVer); - - // turn 15.05.01 to a string '150501' then to a number 150501 - var num = parseInt(paddedReversedSemver.split('.').join('')); - - // Represent as binary, add left padding to 12 or 18 characters. - // 150,501 -> 100100101111100101 - var paddedBinary = num.toString(2).padStart(paddedStringLength, '0'); - - // Stop in case an invalid version number was provided - // paddedBinary must be built from sections of 6 bits - if (paddedBinary.length % 6 !== 0) { - throw 'Version must be smaller than 43.21.26)'; - } - - // turn every 6 bits into a character using the base64Map - paddedBinary.match(/.{1,6}/g).forEach(function (bitString) { - // console.log(bitString); - strResult += base64Map[bitString]; - }); - - return strResult; -} - -module.exports = encodeVersion; \ No newline at end of file diff --git a/lib-es5/utils/encoding/sdkVersionID/getSDKFeatureCode.js b/lib-es5/utils/encoding/sdkVersionID/getSDKFeatureCode.js deleted file mode 100644 index 95d663c6..00000000 --- a/lib-es5/utils/encoding/sdkVersionID/getSDKFeatureCode.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -function getSDKFeatureCode() { - var features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var defaultCode = '0'; - - if (features.responsive) { - return 'A'; - } - - return defaultCode; -} - -module.exports = getSDKFeatureCode; \ No newline at end of file diff --git a/lib-es5/utils/encoding/sdkVersionID/getSDKVersionID.js b/lib-es5/utils/encoding/sdkVersionID/getSDKVersionID.js deleted file mode 100644 index 699ad76b..00000000 --- a/lib-es5/utils/encoding/sdkVersionID/getSDKVersionID.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var encodeVersion = require('./encodeVersion'); -var getSDKFeatureCode = require('./getSDKFeatureCode'); -var SDKCode = 'M'; // Constant per SDK - - -/** - * @description Removes patch version from the semver if it exists - * Turns x.y.z OR x.y into x.y - * @param {'x.y.z' || 'x.y' || string} semVerStr - */ -function removePatchFromSemver(semVerStr) { - var parts = semVerStr.split('.'); - - return `${parts[0]}.${parts[1]}`; -} - -/** - * @description Gets the SDK signature by encoding the SDK version and node version - * @param {{responsive:boolean}} features - * @param {'default' | 'x.y.z' | 'x.y' | string} useSDKVersion Default uses package.json version - * @param {'default' | 'x.y.z' | 'x.y' | string} useNodeVersion Default uses process.versions.node - * @return {string} encodedSDK sdkVersionID - */ -function getSDKVersionID() { - var features = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var useSDKVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default'; - var useNodeVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default'; - - try { - // allow to pass a custom SDKVersion - var pkgJSONFile = fs.readFileSync(path.join(__dirname, '../../../../package.json'), 'utf-8'); - - var sdkVersion = useSDKVersion === 'default' ? JSON.parse(pkgJSONFile).version : useSDKVersion; - - // allow to pass a custom nodeVersion - var nodeVersion = useNodeVersion === 'default' ? process.versions.node : useNodeVersion; - - // Node version should always be in x.y format - var twoPartNodeVersion = removePatchFromSemver(nodeVersion); - var encodedSDKVersion = encodeVersion(sdkVersion); - var encodedNodeVersion = encodeVersion(twoPartNodeVersion); - var featureCode = getSDKFeatureCode(features); - - return `${SDKCode}${encodedSDKVersion}${encodedNodeVersion}${featureCode}`; - } catch (e) { - // Either SDK or Node versions were unparsable - return 'E'; - } -} - -module.exports = getSDKVersionID; \ No newline at end of file diff --git a/lib-es5/utils/encoding/sdkVersionID/revereseVersion.js b/lib-es5/utils/encoding/sdkVersionID/revereseVersion.js deleted file mode 100644 index 5fbdb6a0..00000000 --- a/lib-es5/utils/encoding/sdkVersionID/revereseVersion.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * @description A semVer like string, x.y.z or x.y is allowed - * Reverses the version positions, x.y.z turns to z.y.x - * Pads each segment with '0' so they have length of 2 - * Example: 1.2.3 -> 03.02.01 - * @param {string} semVer Input can be either x.y.z or x.y - * @return {string} in the form of zz.yy.xx ( - */ -function reverseVersion(semVer) { - if (semVer.split('.').length < 2) { - throw new Error('invalid semVer, must have at least two segments'); - } - - // Split by '.', reverse, create new array with padded values and concat it together - return semVer.split('.').reverse().map(function (segment) { - return segment.padStart(2, '0'); - }).join('.'); -} - -module.exports = reverseVersion; \ No newline at end of file diff --git a/lib-es5/utils/index.js b/lib-es5/utils/index.js index 3366a75d..6bd682ba 100644 --- a/lib-es5/utils/index.js +++ b/lib-es5/utils/index.js @@ -55,7 +55,11 @@ var ensurePresenceOf = require('./ensurePresenceOf'); var ensureOption = require('./ensureOption').defaults(config()); var entries = require('./entries'); var isRemoteUrl = require('./isRemoteUrl'); -var getSDKVersionID = require('./encoding/sdkVersionID/getSDKVersionID'); +var getSDKVersions = require('./encoding/sdkAnalytics/getSDKVersions'); + +var _require$Util = require('cloudinary-core').Util, + getAnalyticsOptions = _require$Util.getAnalyticsOptions, + getSDKAnalyticsSignature = _require$Util.getSDKAnalyticsSignature; exports = module.exports; var utils = module.exports; @@ -779,19 +783,20 @@ function url(public_id) { resultUrl += `?${token}`; } - var analytics = ensureOption(options, 'analytics', false); - var responsive = ensureOption(options, 'responsive', false); + var urlAnalytics = ensureOption(options, 'urlAnalytics', false); + + if (urlAnalytics === true) { + var sdkVersions = getSDKVersions(); + var analyticsOptions = getAnalyticsOptions(Object.assign({}, options, sdkVersions)); + + var sdkAnalyticsSignature = getSDKAnalyticsSignature(analyticsOptions); - if (analytics === true) { - var sdkVersionID = getSDKVersionID({ - responsive - }); // url might already have a '?' query param var appender = '?'; if (resultUrl.indexOf('?') >= 0) { appender = '&'; } - resultUrl = `${resultUrl}${appender}_s=${sdkVersionID}`; + resultUrl = `${resultUrl}${appender}_s=${sdkAnalyticsSignature}`; } return resultUrl; diff --git a/lib/utils/encoding/sdkAnalytics/getSDKVersions.js b/lib/utils/encoding/sdkAnalytics/getSDKVersions.js new file mode 100644 index 00000000..dcb1828b --- /dev/null +++ b/lib/utils/encoding/sdkAnalytics/getSDKVersions.js @@ -0,0 +1,27 @@ +let fs = require('fs'); +let path = require('path'); +let sdkCode = 'M'; // Constant per SDK + +/** + * @description Gets the relevant versions of the SDK(package version, node version and sdkCode) + * @param {'default' | 'x.y.z' | 'x.y' | string} useSDKVersion Default uses package.json version + * @param {'default' | 'x.y.z' | 'x.y' | string} useNodeVersion Default uses process.versions.node + * @return {{sdkSemver:string, techVersion:string, sdkCode:string}} A map of relevant versions and codes + */ +function getSDKVersions(useSDKVersion = 'default', useNodeVersion = 'default') { + let pkgJSONFile = fs.readFileSync(path.join(__dirname, '../../../../package.json'), 'utf-8'); + + // allow to pass a custom SDKVersion + let sdkSemver = useSDKVersion === 'default' ? JSON.parse(pkgJSONFile).version : useSDKVersion; + + // allow to pass a custom techVersion (Node version) + let techVersion = useNodeVersion === 'default' ? process.versions.node : useNodeVersion; + + return { + sdkSemver, + techVersion, + sdkCode + }; +} + +module.exports = getSDKVersions; diff --git a/lib/utils/encoding/sdkVersionID/base64Map.js b/lib/utils/encoding/sdkVersionID/base64Map.js deleted file mode 100644 index dcae429a..00000000 --- a/lib/utils/encoding/sdkVersionID/base64Map.js +++ /dev/null @@ -1,15 +0,0 @@ -let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -let num = 0; -let map = {}; - -[...chars].forEach((char) => { - let key = num.toString(2).padStart(6, '0'); - map[key] = char; - num++; -}); - - -/** - * Map of six-bit binary codes to Base64 characters - */ -module.exports = map; diff --git a/lib/utils/encoding/sdkVersionID/encodeVersion.js b/lib/utils/encoding/sdkVersionID/encodeVersion.js deleted file mode 100644 index 010ef19e..00000000 --- a/lib/utils/encoding/sdkVersionID/encodeVersion.js +++ /dev/null @@ -1,42 +0,0 @@ -let base64Map = require('./base64Map'); -let reverseVersion = require('./revereseVersion'); - -/** - * @description Encodes a semVer-like version string - * @param {string} semVer Input can be either x.y.z or x.y - * @return {string} A string built from 3 characters of the base64 table that encode the semVer - */ -function encodeVersion(semVer) { - let strResult = ''; - - // support x.y or x.y.z by using 'parts' as a variable - let parts = semVer.split('.').length; - let paddedStringLength = parts * 6; // we pad to either 12 or 18 characters - - // reverse (but don't mirror) the version. 1.5.15 -> 15.5.1 - // Pad to two spaces, 15.5.1 -> 15.05.01 - let paddedReversedSemver = reverseVersion(semVer); - - // turn 15.05.01 to a string '150501' then to a number 150501 - let num = parseInt(paddedReversedSemver.split('.').join('')); - - // Represent as binary, add left padding to 12 or 18 characters. - // 150,501 -> 100100101111100101 - let paddedBinary = num.toString(2).padStart(paddedStringLength, '0'); - - // Stop in case an invalid version number was provided - // paddedBinary must be built from sections of 6 bits - if (paddedBinary.length % 6 !== 0) { - throw 'Version must be smaller than 43.21.26)'; - } - - // turn every 6 bits into a character using the base64Map - paddedBinary.match(/.{1,6}/g).forEach((bitString) => { - // console.log(bitString); - strResult += base64Map[bitString]; - }); - - return strResult; -} - -module.exports = encodeVersion; diff --git a/lib/utils/encoding/sdkVersionID/getSDKFeatureCode.js b/lib/utils/encoding/sdkVersionID/getSDKFeatureCode.js deleted file mode 100644 index d3eaa539..00000000 --- a/lib/utils/encoding/sdkVersionID/getSDKFeatureCode.js +++ /dev/null @@ -1,11 +0,0 @@ -function getSDKFeatureCode(features = {}) { - let defaultCode = '0'; - - if (features.responsive) { - return 'A'; - } - - return defaultCode; -} - -module.exports = getSDKFeatureCode; diff --git a/lib/utils/encoding/sdkVersionID/getSDKVersionID.js b/lib/utils/encoding/sdkVersionID/getSDKVersionID.js deleted file mode 100644 index 797d228f..00000000 --- a/lib/utils/encoding/sdkVersionID/getSDKVersionID.js +++ /dev/null @@ -1,49 +0,0 @@ -let fs = require('fs'); -let path = require('path'); -let encodeVersion = require('./encodeVersion'); -let getSDKFeatureCode = require('./getSDKFeatureCode'); -let SDKCode = 'M'; // Constant per SDK - - -/** - * @description Removes patch version from the semver if it exists - * Turns x.y.z OR x.y into x.y - * @param {'x.y.z' || 'x.y' || string} semVerStr - */ -function removePatchFromSemver(semVerStr) { - let parts = semVerStr.split('.'); - - return `${parts[0]}.${parts[1]}`; -} - -/** - * @description Gets the SDK signature by encoding the SDK version and node version - * @param {{responsive:boolean}} features - * @param {'default' | 'x.y.z' | 'x.y' | string} useSDKVersion Default uses package.json version - * @param {'default' | 'x.y.z' | 'x.y' | string} useNodeVersion Default uses process.versions.node - * @return {string} encodedSDK sdkVersionID - */ -function getSDKVersionID(features = {}, useSDKVersion = 'default', useNodeVersion = 'default') { - try { - // allow to pass a custom SDKVersion - let pkgJSONFile = fs.readFileSync(path.join(__dirname, '../../../../package.json'), 'utf-8'); - - let sdkVersion = useSDKVersion === 'default' ? JSON.parse(pkgJSONFile).version : useSDKVersion; - - // allow to pass a custom nodeVersion - let nodeVersion = useNodeVersion === 'default' ? process.versions.node : useNodeVersion; - - // Node version should always be in x.y format - let twoPartNodeVersion = removePatchFromSemver(nodeVersion); - let encodedSDKVersion = encodeVersion(sdkVersion); - let encodedNodeVersion = encodeVersion(twoPartNodeVersion); - let featureCode = getSDKFeatureCode(features); - - return `${SDKCode}${encodedSDKVersion}${encodedNodeVersion}${featureCode}`; - } catch (e) { - // Either SDK or Node versions were unparsable - return 'E'; - } -} - -module.exports = getSDKVersionID; diff --git a/lib/utils/encoding/sdkVersionID/revereseVersion.js b/lib/utils/encoding/sdkVersionID/revereseVersion.js deleted file mode 100644 index fe91ba37..00000000 --- a/lib/utils/encoding/sdkVersionID/revereseVersion.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @description A semVer like string, x.y.z or x.y is allowed - * Reverses the version positions, x.y.z turns to z.y.x - * Pads each segment with '0' so they have length of 2 - * Example: 1.2.3 -> 03.02.01 - * @param {string} semVer Input can be either x.y.z or x.y - * @return {string} in the form of zz.yy.xx ( - */ -function reverseVersion(semVer) { - if (semVer.split('.').length < 2) { - throw new Error('invalid semVer, must have at least two segments'); - } - - // Split by '.', reverse, create new array with padded values and concat it together - return semVer.split('.').reverse().map((segment) => { - return segment.padStart(2, '0'); - }).join('.'); -} - -module.exports = reverseVersion; diff --git a/lib/utils/index.js b/lib/utils/index.js index b41190ba..665accac 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -44,7 +44,8 @@ const ensurePresenceOf = require('./ensurePresenceOf'); const ensureOption = require('./ensureOption').defaults(config()); const entries = require('./entries'); const isRemoteUrl = require('./isRemoteUrl'); -const getSDKVersionID = require('./encoding/sdkVersionID/getSDKVersionID'); +const getSDKVersions = require('./encoding/sdkAnalytics/getSDKVersions'); +const {getAnalyticsOptions, getSDKAnalyticsSignature} = require('cloudinary-core').Util; exports = module.exports; const utils = module.exports; @@ -710,20 +711,20 @@ function url(public_id, options = {}) { resultUrl += `?${token}`; } + let urlAnalytics = ensureOption(options, 'urlAnalytics', false); - let analytics = ensureOption(options, 'analytics', false); - let responsive = ensureOption(options, 'responsive', false); + if (urlAnalytics === true) { + let sdkVersions = getSDKVersions(); + let analyticsOptions = getAnalyticsOptions(Object.assign({}, options, sdkVersions)); + + let sdkAnalyticsSignature = getSDKAnalyticsSignature(analyticsOptions); - if (analytics === true) { - let sdkVersionID = getSDKVersionID({ - responsive - }); // url might already have a '?' query param let appender = '?'; if (resultUrl.indexOf('?') >= 0) { appender = '&'; } - resultUrl = `${resultUrl}${appender}_s=${sdkVersionID}`; + resultUrl = `${resultUrl}${appender}_s=${sdkAnalyticsSignature}`; } return resultUrl; diff --git a/package.json b/package.json index 61a14195..e2d2829d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ }, "main": "cloudinary.js", "dependencies": { - "core-js": "^3.6.5", + "cloudinary-core": "^2.10.2", + "core-js": "3.6.3", "lodash": "^4.17.11", "q": "^1.5.1" }, @@ -56,7 +57,7 @@ "types": "types", "scripts": { "test": "tools/scripts/test.sh", - "test:unit" : "mocha --ui bdd -R spec --recursive test/unit", + "test:unit": "mocha --ui bdd -R spec --recursive test/unit", "test-with-temp-cloud": "tools/scripts/tests-with-temp-cloud.sh", "dtslint": "tools/scripts/ditslint.sh", "lint": "tools/scripts/lint.sh", diff --git a/test/testUtils/createTestConfig.js b/test/testUtils/createTestConfig.js index dc09a492..ef148871 100644 --- a/test/testUtils/createTestConfig.js +++ b/test/testUtils/createTestConfig.js @@ -1,12 +1,12 @@ const defaultConfigOptions = { - analytics: false + urlAnalytics: false }; /** * @description Creates a default config for testing, add properties to defaultConfigOptions to * make them global across all tests * @param {{}} [confOptions] Cloudinary's config options - * @return {{} & {analytics: false} & any} + * @return {{} & {urlAnalytics: false} & any} */ function createTestConfig(confOptions = {}) { return Object.assign({}, defaultConfigOptions, confOptions); diff --git a/test/utils/image_versionID_spec.js b/test/unit/sdkAnalytics/imageTagWithAnalytics.spec.js similarity index 61% rename from test/utils/image_versionID_spec.js rename to test/unit/sdkAnalytics/imageTagWithAnalytics.spec.js index dccaadb9..c4897f78 100644 --- a/test/utils/image_versionID_spec.js +++ b/test/unit/sdkAnalytics/imageTagWithAnalytics.spec.js @@ -5,19 +5,22 @@ require('dotenv').load({ const path = require('path'); const expect = require("expect.js"); const mock = require('mock-fs'); -const getSDKVersionID = require('../../lib/utils/encoding/sdkVersionID/getSDKVersionID'); -const cloudinary = require('../../cloudinary'); -const TEST_CLOUD_NAME = require('../testUtils/testConstants').TEST_CLOUD_NAME; +const getSDKVersions = require('../../../lib/utils/encoding/sdkAnalytics/getSDKVersions'); +const cloudinary = require('../../../cloudinary'); +const TEST_CLOUD_NAME = require('../../testUtils/testConstants').TEST_CLOUD_NAME; -describe('Tests for sdk versionID through image tag', function () { +describe('Tests for sdk analytics through image tag', function () { let processVersions = {}; + + + beforeEach(() => { cloudinary.config(true); // reset processVersions = process.versions; delete process.versions; - let file = path.join(__dirname, '../../package.json'); + let file = path.join(__dirname, '../../../package.json'); mock({ [file]: '{"version":"1.24.0"}' @@ -38,7 +41,6 @@ describe('Tests for sdk versionID through image tag', function () { format: "png" }); - expect(getSDKVersionID()).to.equal('MAlhAM0'); // value is mocked through package.json and process.version expect(imgStr).not.to.contain(`MAlhAM0`); }); @@ -49,11 +51,10 @@ describe('Tests for sdk versionID through image tag', function () { let imgStr = cloudinary.image("hello", { format: "png", - analytics: true + urlAnalytics: true }); - expect(getSDKVersionID()).to.equal('MAlhAM0'); // value is mocked through package.json and process.version - expect(imgStr).to.contain(`src='http://res.cloudinary.com/${TEST_CLOUD_NAME}/image/upload/hello.png?_s=MAlhAM0`); + expect(imgStr).to.contain(`src='http://res.cloudinary.com/${TEST_CLOUD_NAME}/image/upload/hello.png?_s=AMAlhAM0`); }); it('Reads from process.versions and package.json (Mocked) - Responsive', () => { @@ -64,10 +65,9 @@ describe('Tests for sdk versionID through image tag', function () { let imgStr = cloudinary.image("hello", { format: "png", responsive: true, - analytics: true + urlAnalytics: true }); - expect(getSDKVersionID()).to.equal('MAlhAM0'); // value is mocked through package.json and process.version - expect(imgStr).to.contain(`src='http://res.cloudinary.com/${TEST_CLOUD_NAME}/image/upload/hello.png?_s=MAlhAMA`); + expect(imgStr).to.contain(`src='http://res.cloudinary.com/${TEST_CLOUD_NAME}/image/upload/hello.png?_s=AMAlhAMA`); }); }); diff --git a/test/utils/get_sdk_versionID_spec.js b/test/utils/get_sdk_versionID_spec.js deleted file mode 100644 index dbc43176..00000000 --- a/test/utils/get_sdk_versionID_spec.js +++ /dev/null @@ -1,88 +0,0 @@ -let path = require('path'); -const expect = require("expect.js"); -const mock = require('mock-fs'); -const getSDKVersionID = require('../../lib/utils/encoding/sdkVersionID/getSDKVersionID'); - -describe('Tests for sdk versionID util', function () { - afterEach(function () { - mock.restore(); - }); - - it('creates the correct sdk versionID', function () { - // support x.y.z - expect(getSDKVersionID({}, '1.24.0', '12.0.0')).to.equal('MAlhAM0'); - // support x.y - expect(getSDKVersionID({}, '1.24.0', '12.0')).to.equal('MAlhAM0'); - expect(getSDKVersionID({}, '43.21.26', '43.21.26')).to.equal('M///hf0'); - expect(getSDKVersionID({}, '0.0.0', '0.0.0')).to.equal('MAAAAA0'); - - /* - * Version 0.0.1 -> 01.00.00 -> 10000 - * toBin 10011100010000 -> - * add padding to 18, split to 3 6's -> 000010 011100 010000 - * ->extract base64 Characters -> padding 000010(C) 011100(c) 010000(Q) (CcQ) - */ - expect(getSDKVersionID({}, '0.0.1', '0.0.0')).to.equal('MCcQAA0'); - - /* - * Version 15.22.1 -> 01.22.15 -> 12215 - * toBin 10111110110111 -> - * add padding to 18, split to 3 6's -> 000010 111110 110111 - * ->extract base64 Characters -> padding 000010(C) 111110(+) 110111(3) (C+3) - */ - expect(getSDKVersionID({}, '15.22.1', '15.22.1')).to.equal('MC+3in0'); - - expect(getSDKVersionID({ responsive: true }, '15.22.1', '15.22.1')).to.equal('MC+3inA'); - }); - - it('reads correctly from process.versions if default is passed (Mocked)', () => { - let processVersions = process.versions; - delete process.versions; - - process.versions = { - node: '1.24.0' - }; - - expect(getSDKVersionID({}, '0.0.0')).to.equal('MAAAlh0'); - process.versions = processVersions; - }); - - it('Reads from the package.json file if default is passed (Mocked)', () => { - let file = path.join(__dirname, '../../package.json'); - mock({ - [file]: '{"version":"1.24.0"}' - }); - - expect(getSDKVersionID({}, 'default', '0.0.0')).to.equal('MAlhAA0'); - mock.restore(); - }); - - it('Handles invalid arguments gracefully', () => { - expect(getSDKVersionID({}, 'abcdefg', 'abcdefg')).to.equal('E'); - expect(getSDKVersionID({}, '123456', '123456')).to.equal('E'); - expect(getSDKVersionID({}, '43.21.200', '43.21.26')).to.equal('E'); - }); - - it('Reads from process.versions and package.json (Mocked)', () => { - let processVersions = process.versions; - delete process.versions; - - let file = path.join(__dirname, '../../package.json'); - - mock({ - [file]: '{"version":"1.24.0"}' - }); - process.versions = { - node: '1.24.0' - }; - - expect(getSDKVersionID()).to.equal('MAlhlh0'); - process.versions = processVersions; - mock.restore(); - }); -}); - - - - -