1 |
|
2 | var request = require("request");
|
3 | var qs = require("querystring");
|
4 | var uuid = require("uuid");
|
5 | var should = require("should");
|
6 | var sinon = require("sinon");
|
7 | var url = require("url");
|
8 |
|
9 | var ua = require("../lib/index.js");
|
10 | var utils = require("../lib/utils.js")
|
11 | var config = require("../lib/config.js")
|
12 |
|
13 |
|
14 | describe("ua", function () {
|
15 |
|
16 | it("should be usable as a function", function () {
|
17 | ua("foo").should.be.instanceof(ua.Visitor);
|
18 | });
|
19 |
|
20 | it("should be usable as a constructor", function () {
|
21 | new ua("foo").should.be.instanceof(ua.Visitor);
|
22 | });
|
23 |
|
24 | it("should accept arguments (tid, cid, options)", function () {
|
25 | var tid = "UA-XXXXX-XX"
|
26 | var cid = uuid.v4()
|
27 | var options = {};
|
28 |
|
29 | var visitor = ua(tid, cid, options)
|
30 |
|
31 | visitor.tid.should.equal(tid)
|
32 | visitor.cid.should.equal(cid)
|
33 | visitor.options.should.equal(options)
|
34 | });
|
35 |
|
36 | it("should accept arguments (tid, cid)", function () {
|
37 | var tid = "UA-XXXXX-XX"
|
38 | var cid = uuid.v4()
|
39 |
|
40 | var visitor = ua(tid, cid)
|
41 |
|
42 | visitor.tid.should.equal(tid)
|
43 | visitor.cid.should.equal(cid)
|
44 | visitor.options.should.eql({}, "An empty options hash should've been created")
|
45 | });
|
46 |
|
47 | it("should accept arguments (tid, options)", function () {
|
48 | var tid = Math.random().toString();
|
49 | var options = {}
|
50 |
|
51 | var visitor = ua(tid, options)
|
52 |
|
53 | visitor.tid.should.equal(tid)
|
54 | utils.isUuid(visitor.cid).should.equal(true, "A valid random UUID should have been generated")
|
55 | visitor.options.should.eql(options)
|
56 |
|
57 | });
|
58 |
|
59 | it("should accept arguments (options)", function () {
|
60 | var options = {}
|
61 |
|
62 | var visitor = ua(options);
|
63 |
|
64 | visitor.should.have.property('tid', undefined);
|
65 | utils.isUuid(visitor.cid).should.equal(true, "A valid random UUID should have been generated")
|
66 | visitor.options.should.eql(options)
|
67 | });
|
68 |
|
69 | it("should accept tid and cid via the options arguments", function () {
|
70 | var options = {
|
71 | tid: "UA-XXXXX-XX",
|
72 | cid: uuid.v4()
|
73 | };
|
74 |
|
75 | var visitor = ua(options);
|
76 |
|
77 | visitor.tid.should.equal(options.tid)
|
78 | visitor.cid.should.equal(options.cid)
|
79 | visitor.options.should.equal(options)
|
80 | });
|
81 |
|
82 | it("should generate new cid (UUID) if provided one is in wrong format", function () {
|
83 | var options = {
|
84 | tid: "UA-XXXXX-XX",
|
85 | cid: "custom-format-cid"
|
86 | };
|
87 |
|
88 | var next = sinon.spy(uuid, 'v4')
|
89 |
|
90 | var visitor = ua(options);
|
91 |
|
92 | next.calledOnce.should.equal(true, "next() should've been called once")
|
93 | var generatedCid = next.returnValues[0]
|
94 | uuid.v4.restore()
|
95 |
|
96 | visitor.cid.should.not.equal(options.cid)
|
97 | visitor.cid.should.equal(generatedCid)
|
98 | });
|
99 |
|
100 | it("should accept custom cid format when strictCidFormat is false", function () {
|
101 | var options = {
|
102 | tid: "UA-XXXXX-XX",
|
103 | cid: "custom-format-cid",
|
104 | strictCidFormat: false
|
105 | };
|
106 |
|
107 | var next = sinon.spy(uuid, 'v4')
|
108 |
|
109 | var visitor = ua(options);
|
110 |
|
111 | next.called.should.equal(false, "next() should't be called")
|
112 | uuid.v4.restore()
|
113 |
|
114 | visitor.cid.should.equal(options.cid)
|
115 | });
|
116 |
|
117 |
|
118 | describe("params", function () {
|
119 |
|
120 | var visitor;
|
121 |
|
122 | before(function () {
|
123 | var tid = "UA-XXXXX-XX";
|
124 | var cid = uuid.v4();
|
125 | visitor = ua(tid, cid);
|
126 | });
|
127 |
|
128 | it('should not translate params', function(){
|
129 | var params = {
|
130 | tid: 1,
|
131 | cid: 1,
|
132 | somefake: 1,
|
133 | v: 'a'
|
134 | };
|
135 |
|
136 | visitor._translateParams(params).should.eql(params);
|
137 | })
|
138 |
|
139 | it('should match all parameters and each should be in the list of accepted', function(){
|
140 | var res = visitor._translateParams(config.parametersMap);
|
141 | for (var i in res) {
|
142 | if (res.hasOwnProperty(i)) {
|
143 | res[i].should.equal(i);
|
144 | config.acceptedParameters.should.containEql(i);
|
145 | }
|
146 | }
|
147 | })
|
148 |
|
149 | });
|
150 |
|
151 | });
|