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 () { describe("middleware", function () { it("should return a middleware-capable function", function () { var middleware = ua.middleware() middleware.length.should.equal(3, "function signature should have three arguments") }); it("should try to create a visitor based on session data", function () { var req = {session: {cid: uuid.v4()}} var options = {debug: true} var middleware = ua.middleware("tid", options) var next = sinon.spy() middleware(req, {}, next) next.calledOnce.should.equal(true, "next() should've been called once") req.visitor.should.be.instanceof(ua.Visitor, "The request should have gained a UA visitor instance") req.visitor.cid.should.equal(req.session.cid, "The client ID should've been propagated") req.visitor.tid.should.equal("tid", "The tracking ID should've been propagated") req.visitor.options.should.eql(options, "The options should've been proprapated") }); it("should try to create a visitor based on the _ga cookie", function () { var req = {cookies: {_ga: "GA1.2.46218180.1366882461"}} var options = {debug: false} var middleware = ua.middleware("tid", options) var next = sinon.spy() middleware(req, {}, next) next.calledOnce.should.equal(true, "next() should've been called once") req.visitor.should.be.instanceof(ua.Visitor, "The request should have gained a UA visitor instance") req.visitor.cid.should.equal("46218180.1366882461", "The client ID should've been extracted from the cookie") req.visitor.tid.should.equal("tid", "The tracking ID should've been propagated") req.visitor.options.should.eql(options, "The options should've been proprapated") }) it("should allow changing the _ga cookie name", function () { var req = {cookies: {foo: "GA1.2.46218180.1366882461"}} var options = {cookieName: "foo"} var middleware = ua.middleware("tid", options) var next = sinon.spy() middleware(req, {}, next) req.visitor.cid.should.equal("46218180.1366882461", "The client ID should've been extracted from the cookie") }) it("should store the cid in the session", function () { var req = {cookies: {_ga: "GA1.2.46218180.1366882461"}, session: {}} var options = {debug: false} var middleware = ua.middleware("tid", options) var next = sinon.spy() middleware(req, {}, next) req.session.cid.should.equal("46218180.1366882461", "The client ID should've saved to the session") }) }); describe("createFromSession", function () { it("should combine an existing tracking ID with a client ID from the session", function () { var options = {debug: false} var middleware = ua.middleware("tid", options) var session = {cid: uuid.v4()} var visitor = ua.createFromSession(session); visitor.should.be.instanceof(ua.Visitor, "The request should have gained a UA visitor instance") visitor.cid.should.equal(session.cid, "The client ID should've been extracted from the cookie") visitor.tid.should.equal("tid", "The tracking ID should've been propagated") visitor.options.should.eql(options, "The options should've been proprapated") }) }) });