| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- 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("#transaction", function () {
- var _enqueue;
- beforeEach(function () {
- _enqueue = sinon.stub(ua.Visitor.prototype, "_enqueue", function (type, params, fn) {
- if (fn) {
- (typeof fn).should.equal('function', "#_enqueue should receive a callback")
- fn();
- }
- return this;
- });
- });
- afterEach(function () {
- _enqueue.restore()
- });
- it("should be available via the #t shortcut", function () {
- var visitor = ua()
- visitor.t.should.equal(visitor.transaction)
- });
- it("should accept arguments (transaction)", function () {
- var transaction = Math.random().toString();
- var visitor = ua()
- var result = visitor.transaction(transaction);
- visitor._context = result._context;
- result.should.eql(visitor, "should return a visitor that is identical except for the context");
- result.should.be.instanceof(ua.Visitor);
- result._context.should.eql(_enqueue.args[0][1], "the transaction params should be persisted as the context of the visitor clone")
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti")
- _enqueue.args[0][1].ti.should.equal(transaction);
- });
- it("should accept arguments (transaction, fn)", function () {
- var transaction = Math.random().toString();
- var fn = sinon.spy()
- ua().transaction(transaction, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti")
- _enqueue.args[0][1].ti.should.equal(transaction);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (transaction, revenue)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- ua().transaction(transaction, revenue);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- });
- it("should accept arguments (transaction, revenue, fn)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var fn = sinon.spy()
- ua().transaction(transaction, revenue, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (transaction, revenue, shipping)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- ua().transaction(transaction, revenue, shipping);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- });
- it("should accept arguments (transaction, revenue, shipping, fn)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var fn = sinon.spy()
- ua().transaction(transaction, revenue, shipping, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (transaction, revenue, shipping, tax)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- ua().transaction(transaction, revenue, shipping, tax);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- });
- it("should accept arguments (transaction, revenue, shipping, tax, fn)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- var fn = sinon.spy()
- ua().transaction(transaction, revenue, shipping, tax, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (transaction, revenue, shipping, tax, affiliation)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- var affiliation = Math.random().toString();
- ua().transaction(transaction, revenue, shipping, tax, affiliation);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- _enqueue.args[0][1].ta.should.equal(affiliation);
- });
- it("should accept arguments (transaction, revenue, shipping, tax, affiliation, fn)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- var affiliation = Math.random().toString();
- var fn = sinon.spy()
- ua().transaction(transaction, revenue, shipping, tax, affiliation, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- _enqueue.args[0][1].ta.should.equal(affiliation);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (transaction, revenue, shipping, tax, affiliation, params)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- var affiliation = Math.random().toString();
- var params = {p: Math.random().toString()}
- ua().transaction(transaction, revenue, shipping, tax, affiliation, params);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta", "p")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- _enqueue.args[0][1].ta.should.equal(affiliation);
- _enqueue.args[0][1].p.should.equal(params.p);
- });
- it("should accept arguments (transaction, revenue, shipping, tax, affiliation, params, fn)", function () {
- var transaction = Math.random().toString();
- var revenue = Math.random();
- var shipping = Math.random();
- var tax = Math.random();
- var affiliation = Math.random().toString();
- var params = {p: Math.random().toString()}
- var fn = sinon.spy()
- ua().transaction(transaction, revenue, shipping, tax, affiliation, params, fn);
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta", "p")
- _enqueue.args[0][1].ti.should.equal(transaction);
- _enqueue.args[0][1].tr.should.equal(revenue);
- _enqueue.args[0][1].ts.should.equal(shipping);
- _enqueue.args[0][1].tt.should.equal(tax);
- _enqueue.args[0][1].ta.should.equal(affiliation);
- _enqueue.args[0][1].p.should.equal(params.p);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should accept arguments (params)", function () {
- var params = {
- ti: Math.random().toString(),
- tr: Math.random(),
- ts: Math.random(),
- tt: Math.random(),
- ta: Math.random().toString(),
- p: Math.random().toString(),
- empty: null // Should be removed
- };
- var json = JSON.stringify(params);
- var visitor = ua()
- var result = visitor.transaction(params);
- visitor._context = result._context;
- result.should.eql(visitor, "should return a visitor that is identical except for the context");
- result.should.be.instanceof(ua.Visitor);
- result._context.should.eql(_enqueue.args[0][1], "the transaction params should be persisted as the context of the visitor clone")
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta", "p")
- _enqueue.args[0][1].ti.should.equal(params.ti);
- _enqueue.args[0][1].tr.should.equal(params.tr);
- _enqueue.args[0][1].ts.should.equal(params.ts);
- _enqueue.args[0][1].tt.should.equal(params.tt);
- _enqueue.args[0][1].ta.should.equal(params.ta);
- _enqueue.args[0][1].p.should.equal(params.p);
- JSON.stringify(params).should.equal(json, "params should not have changed");
- });
- it("should accept arguments (params, fn)", function () {
- var params = {
- ti: Math.random().toString(),
- tr: Math.random(),
- ts: Math.random(),
- tt: Math.random(),
- ta: Math.random().toString(),
- p: Math.random().toString()
- };
- var fn = sinon.spy()
- var visitor = ua()
- var result = visitor.transaction(params, fn);
- visitor._context = result._context;
- result.should.eql(visitor, "should return a visitor that is identical except for the context");
- result.should.be.instanceof(ua.Visitor);
- result._context.should.eql(_enqueue.args[0][1], "the transaction params should be persisted as the context of the visitor clone")
- _enqueue.calledOnce.should.equal(true, "#_enqueue should have been called once");
- _enqueue.args[0][0].should.equal("transaction");
- _enqueue.args[0][1].should.have.keys("ti", "tr", "ts", "tt", "ta", "p")
- _enqueue.args[0][1].ti.should.equal(params.ti);
- _enqueue.args[0][1].tr.should.equal(params.tr);
- _enqueue.args[0][1].ts.should.equal(params.ts);
- _enqueue.args[0][1].tt.should.equal(params.tt);
- _enqueue.args[0][1].ta.should.equal(params.ta);
- _enqueue.args[0][1].p.should.equal(params.p);
- fn.calledOnce.should.equal(true, "callback should have been called once")
- });
- it("should fail without transaction ID", function () {
- var fn = sinon.spy()
- var visitor = ua()
- var result = visitor.transaction(null, fn);
- visitor._context = result._context;
- result.should.eql(visitor, "should return a visitor that is identical except for the context");
- result.should.be.instanceof(ua.Visitor);
- result._context.should.eql({}, "the transaction params should not be persisted")
- _enqueue.called.should.equal(false, "#_enqueue should have not been called once");
- fn.calledOnce.should.equal(true, "callback should have been called once");
- fn.args[0][0].should.be.instanceof(Error);
- fn.thisValues[0].should.equal(visitor);
- });
- });
- });
|