2025-04-24 17:03:28 +08:00

152 lines
3.6 KiB
JavaScript

var request = require("request");
var qs = require("querystring");
var uuid = require("uuid");
var should = require("should");
var sinon = require("sinon");
var url = require("url");
var ua = require("../lib/index.js");
var utils = require("../lib/utils.js")
var config = require("../lib/config.js")
describe("ua", function () {
it("should be usable as a function", function () {
ua("foo").should.be.instanceof(ua.Visitor);
});
it("should be usable as a constructor", function () {
new ua("foo").should.be.instanceof(ua.Visitor);
});
it("should accept arguments (tid, cid, options)", function () {
var tid = "UA-XXXXX-XX"
var cid = uuid.v4()
var options = {};
var visitor = ua(tid, cid, options)
visitor.tid.should.equal(tid)
visitor.cid.should.equal(cid)
visitor.options.should.equal(options)
});
it("should accept arguments (tid, cid)", function () {
var tid = "UA-XXXXX-XX"
var cid = uuid.v4()
var visitor = ua(tid, cid)
visitor.tid.should.equal(tid)
visitor.cid.should.equal(cid)
visitor.options.should.eql({}, "An empty options hash should've been created")
});
it("should accept arguments (tid, options)", function () {
var tid = Math.random().toString();
var options = {}
var visitor = ua(tid, options)
visitor.tid.should.equal(tid)
utils.isUuid(visitor.cid).should.equal(true, "A valid random UUID should have been generated")
visitor.options.should.eql(options)
});
it("should accept arguments (options)", function () {
var options = {}
var visitor = ua(options);
visitor.should.have.property('tid', undefined);
utils.isUuid(visitor.cid).should.equal(true, "A valid random UUID should have been generated")
visitor.options.should.eql(options)
});
it("should accept tid and cid via the options arguments", function () {
var options = {
tid: "UA-XXXXX-XX",
cid: uuid.v4()
};
var visitor = ua(options);
visitor.tid.should.equal(options.tid)
visitor.cid.should.equal(options.cid)
visitor.options.should.equal(options)
});
it("should generate new cid (UUID) if provided one is in wrong format", function () {
var options = {
tid: "UA-XXXXX-XX",
cid: "custom-format-cid"
};
var next = sinon.spy(uuid, 'v4')
var visitor = ua(options);
next.calledOnce.should.equal(true, "next() should've been called once")
var generatedCid = next.returnValues[0]
uuid.v4.restore()
visitor.cid.should.not.equal(options.cid)
visitor.cid.should.equal(generatedCid)
});
it("should accept custom cid format when strictCidFormat is false", function () {
var options = {
tid: "UA-XXXXX-XX",
cid: "custom-format-cid",
strictCidFormat: false
};
var next = sinon.spy(uuid, 'v4')
var visitor = ua(options);
next.called.should.equal(false, "next() should't be called")
uuid.v4.restore()
visitor.cid.should.equal(options.cid)
});
describe("params", function () {
var visitor;
before(function () {
var tid = "UA-XXXXX-XX";
var cid = uuid.v4();
visitor = ua(tid, cid);
});
it('should not translate params', function(){
var params = {
tid: 1,
cid: 1,
somefake: 1,
v: 'a'
};
visitor._translateParams(params).should.eql(params);
})
it('should match all parameters and each should be in the list of accepted', function(){
var res = visitor._translateParams(config.parametersMap);
for (var i in res) {
if (res.hasOwnProperty(i)) {
res[i].should.equal(i);
config.acceptedParameters.should.containEql(i);
}
}
})
});
});