debian-mirror-gitlab/snowplow-javascript-tracker/tests/nonfunctional/helpers.js
2020-04-13 14:06:41 +05:30

156 lines
5.8 KiB
JavaScript

/*
* JavaScript tracker for Snowplow: tests/nonfunctional/helpers.js
*
* Significant portions copyright 2010 Anthon Pang. Remainder copyright
* 2012-2014 Snowplow Analytics Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Anthon Pang nor Snowplow Analytics Ltd nor the
* names of their contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
define([
"intern!object",
"intern/chai!assert",
"intern/dojo/node!../../src/js/lib/helpers"
], function (registerSuite, assert, helpers) {
var decorateQuerystring = helpers.decorateQuerystring;
var resolveDynamicContexts = helpers.resolveDynamicContexts;
registerSuite({
name: "decorateQuerystring test",
"Decorate a URL with no querystring or fragment": function () {
var url = 'http://www.example.com';
var expected = 'http://www.example.com?_sp=a.b';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Decorate a URL with a fragment but no querystring": function () {
var url = 'http://www.example.com#fragment';
var expected = 'http://www.example.com?_sp=a.b#fragment';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Decorate a URL with an empty querystring": function () {
var url = 'http://www.example.com?';
var expected = 'http://www.example.com?_sp=a.b';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Decorate a URL with a nonempty querystring": function () {
var url = 'http://www.example.com?name=value';
var expected = 'http://www.example.com?_sp=a.b&name=value';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Override an existing field": function () {
var url = 'http://www.example.com?_sp=outdated';
var expected = 'http://www.example.com?_sp=a.b';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Decorate a URL whose querystring contains multiple question marks": function () {
var url = 'http://www.example.com?test=working?&name=value';
var expected = 'http://www.example.com?_sp=a.b&test=working?&name=value';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Override a field in a querystring containing a question mark": function () {
var url = 'http://www.example.com?test=working?&_sp=outdated';
var expected = 'http://www.example.com?test=working?&_sp=a.b';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
"Decorate a querystring with multiple ?s and #s": function () {
var url = 'http://www.example.com?test=working?&_sp=outdated?&?name=value#fragment?#?#';
var expected = 'http://www.example.com?test=working?&_sp=a.b&?name=value#fragment?#?#';
var actual = decorateQuerystring(url, '_sp', 'a.b');
assert.equal(actual, expected);
},
});
registerSuite({
name: "getCssClasses test",
"Tokenize a DOM element's className field": function () {
var element = {
className: ' the quick brown_fox-jumps/over\nthe\t\tlazy dog '
};
var expected = ['the', 'quick', 'brown_fox-jumps/over', 'the', 'lazy', 'dog'];
var actual = helpers.getCssClasses(element);
assert.deepEqual(actual, expected);
},
});
registerSuite({
name: "resolveDynamicContexts tests",
"Resolves context generators and static contexts": function () {
var contextGenerator = function () {
return {
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
'data': {'test': 1}
}
};
var staticContext = {
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
'data': {'test': 1}
};
var expected = [contextGenerator(), staticContext];
var actual = resolveDynamicContexts([contextGenerator, staticContext]);
assert.deepEqual(actual, expected);
},
"Resolves context generators with arguments": function () {
var contextGenerator = function (argOne, argTwo) {
return {
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
'data': {
'firstVal': argOne,
'secondVal': argTwo
}
}
};
var expected = [
{
'schema': 'iglu:com.acme.marketing/some_event/jsonschema/1-0-0',
'data': {
'firstVal': 1,
'secondVal': 2
}
}
];
var actual = resolveDynamicContexts([contextGenerator], 1, 2);
assert.deepEqual(actual, expected);
},
});
});