var tools = require("../index"); var expect = require('expect.js'); describe('Tools API', function() { // before(setup); // after(cleanup); describe('add_action do_action', function() { it('Can add an `action` function to be called with do_action', function(done) { var tool = tools(); tool.add_action("test", function() { expect(true) done(); }, 10); tool.do_action("test"); }); it('Can add an `action` function to be called with do_action with extra arguments', function( done) { var tool = tools(); tool.add_action("test", function(myarg) { expect(myarg).to.equal("hello"); done(); }, 10); tool.do_action("test", "hello"); }); it('Can add an `action` function to be called with do_action sorted', function(done) { var tool = tools(); var iii = 0; tool.add_action("test", function() { expect(iii).to.equal(2) iii++ }, 30); tool.add_action("test", function() { expect(iii).to.equal(1) iii++ done(); }, 20); tool.add_action("test", function() { expect(iii).to.equal(3) iii++ }, 50); tool.add_action("test", function() { expect(iii).to.equal(0) iii++ }, 10); tool.do_action("test"); }); it('Can add an `action` function to be called with do_action with extra arguments sorted tool.do_action("test", "hello")', function(done) { var tool = tools(); var iii = 0; tool.add_action("test", function(myarg) { expect(iii).to.equal(2) expect(myarg).to.equal("hello"); iii++ }, 30); tool.add_action("test", function(myarg) { expect(iii).to.equal(1) expect(myarg).to.equal("hello"); iii++ done(); }, 20); tool.add_action("test", function(myarg) { expect(iii).to.equal(3) expect(myarg).to.equal("hello"); iii++ }, 50); tool.add_action("test", function(myarg) { expect(iii).to.equal(0) expect(myarg).to.equal("hello"); iii++ }, 10); tool.do_action("test", "hello"); }); }) describe('add_filters apply_filters', function() { it('Can add an `filter` function to be called with apply_filters ARRAY tool.apply_filters("test", [])', function(done) { var tool = tools(); tool.add_filters("test", function(a) { a.push("test"); return a; }, 10, "test"); var t = tool.apply_filters("test", []); expect(t).to.be.an('array'); expect(t.length).to.equal(1); expect(t[0]).to.equal("test"); done(); }); it('Can add an `filter` function to be called with apply_filters ARRAY sorted tool.apply_filters("test", [])', function(done) { var tool = tools(); tool.add_filters("test", function(a) { a.push("test"); return a; }, 10); tool.add_filters("test", function(a) { a.push("test2"); return a; }, 5); var t = tool.apply_filters("test", []); expect(t).to.be.an('array'); expect(t.length).to.equal(2); expect(t[0]).to.equal("test2"); done(); }); it('Can add an `filter` function to be called with apply_filters ARRAY sorted 2 tool.apply_filters("test", ["1", "2", "3"])', function(done) { var tool = tools(); tool.add_filters("test", function(a) { if (a.length > 0) { a[0] = a[0] + ":1"; } return a; }, 10); var t = tool.apply_filters("test", ["1", "2", "3"]); expect(t).to.be.an('array'); expect(t.length).to.equal(3); expect(t[0]).to.equal("1:1"); done(); }); it('Can add an `filter` function to be called with apply_filters ARRAY of functions that callback tool.apply_filters_map(["test",...], inputfunc, done)', function(done) { var tool = tools(); var externalfunca = function(a) { return { objectcreatebyletssay: "mysql", status: "MAYBE" } }; tool.add_filters("test", function(filterarray) { filterarray.push(function(inputfunction, cb) { cb(null, inputfunction(externalfunca())) }) return filterarray; }, 10); tool.add_filters("test", function(filterarray) { filterarray.push(function(inputfunction, cb) { cb(null, inputfunction({ status: "YES" })) }) return filterarray; }, 5); tool.add_filters("testaa", function(filterarray) { filterarray.push(function(inputfunction, cb) { cb(null, inputfunction({ status: "NO" })) }) return filterarray; }, 5); var t = tool.apply_filters_map(["test", "testaa"], function imtheinputfunction(ao) { return ao }, function(err, result) { expect(result).to.be.an('array'); expect(result.length).to.equal(3); expect(result[0]).to.be.an('object'); expect(result[1].objectcreatebyletssay).to.be.an('string'); expect(result[1].objectcreatebyletssay).to.equal('mysql'); done(); }); }); }) })