index.js 3.6 KB

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