wekan/packages/kadira-flow-router/test/client/triggers.js

297 lines
6.7 KiB
JavaScript
Raw Normal View History

Tinytest.addAsync(
'Triggers - runTriggers - run all and after',
function(test, done) {
var store = [];
var triggers = MakeTriggers(2, store);
Triggers.runTriggers(triggers, null, null, function() {
test.equal(store, [0, 1]);
done();
});
});
Tinytest.addAsync(
'Triggers - runTriggers - redirect with url',
function(test, done) {
var store = [];
var url = "http://google.com";
var triggers = MakeTriggers(2, store);
triggers.splice(1, 0, function(context, redirect) {
redirect(url);
});
Triggers.runTriggers(triggers, null, function(u) {
test.equal(store, [0]);
test.equal(u, url);
done();
}, null);
});
Tinytest.addAsync(
'Triggers - runTriggers - redirect without url',
function(test, done) {
var store = [];
var url = "http://google.com";
var triggers = MakeTriggers(2, store);
triggers.splice(1, 0, function(context, redirect) {
try {
redirect();
} catch(ex) {
test.isTrue(/requires an URL/.test(ex.message));
test.equal(store, [0]);
done();
}
});
Triggers.runTriggers(triggers, null, null, null);
});
Tinytest.addAsync(
'Triggers - runTriggers - redirect in a different event loop',
function(test, done) {
var store = [];
var url = "http://google.com";
var triggers = MakeTriggers(2, store);
var doneCalled = false;
triggers.splice(1, 0, function(context, redirect) {
setTimeout(function() {
try {
redirect(url);
} catch(ex) {
test.isTrue(/sync/.test(ex.message));
test.equal(store, [0, 1]);
test.isTrue(doneCalled);
done();
}
}, 0);
});
Triggers.runTriggers(triggers, null, null, function() {
doneCalled = true;
});
});
Tinytest.addAsync(
'Triggers - runTriggers - redirect called multiple times',
function(test, done) {
var store = [];
var url = "http://google.com";
var triggers = MakeTriggers(2, store);
var redirectCalled = false;
triggers.splice(1, 0, function(context, redirect) {
redirect(url);
try {
redirect(url);
} catch(ex) {
test.isTrue(/already redirected/.test(ex.message));
test.equal(store, [0]);
test.isTrue(redirectCalled);
done();
}
});
Triggers.runTriggers(triggers, null, function() {
redirectCalled = true;
}, null);
});
Tinytest.addAsync(
'Triggers - runTriggers - stop callback',
function(test, done) {
var store = [];
var triggers = MakeTriggers(2, store);
triggers.splice(1, 0, function(context, redirect, stop) {
stop();
});
Triggers.runTriggers(triggers, null, null, function() {
store.push(2);
});
test.equal(store, [0]);
done();
});
Tinytest.addAsync(
'Triggers - runTriggers - get context',
function(test, done) {
var context = {};
var trigger = function(c) {
test.equal(c, context);
done();
};
Triggers.runTriggers([trigger], context, function() {}, function() {});
});
Tinytest.addAsync(
'Triggers - createRouteBoundTriggers - matching trigger',
function(test, done) {
var context = {route: {name: "abc"}};
var redirect = function() {};
var trigger = function(c, r) {
test.equal(c, context);
test.equal(r, redirect);
done();
};
var triggers = Triggers.createRouteBoundTriggers([trigger], ["abc"]);
triggers[0](context, redirect);
});
Tinytest.addAsync(
'Triggers - createRouteBoundTriggers - multiple matching triggers',
function(test, done) {
var context = {route: {name: "abc"}};
var redirect = function() {};
var doneCount = 0;
var trigger = function(c, r) {
test.equal(c, context);
test.equal(r, redirect);
doneCount++;
};
var triggers = Triggers.createRouteBoundTriggers([trigger, trigger], ["abc"]);
triggers[0](context, redirect);
triggers[1](context, redirect);
test.equal(doneCount, 2);
done();
});
Tinytest.addAsync(
'Triggers - createRouteBoundTriggers - no matching trigger',
function(test, done) {
var context = {route: {name: "some-other-route"}};
var redirect = function() {};
var doneCount = 0;
var trigger = function(c, r) {
test.equal(c, context);
test.equal(r, redirect);
doneCount++;
};
var triggers = Triggers.createRouteBoundTriggers([trigger], ["abc"]);
triggers[0](context, redirect);
test.equal(doneCount, 0);
done();
});
Tinytest.addAsync(
'Triggers - createRouteBoundTriggers - negate logic',
function(test, done) {
var context = {route: {name: "some-other-route"}};
var redirect = function() {};
var doneCount = 0;
var trigger = function(c, r) {
test.equal(c, context);
test.equal(r, redirect);
doneCount++;
};
var triggers = Triggers.createRouteBoundTriggers([trigger], ["abc"], true);
triggers[0](context, redirect);
test.equal(doneCount, 1);
done();
});
Tinytest.addAsync(
'Triggers - applyFilters - no filters',
function(test, done) {
var original = [];
test.equal(Triggers.applyFilters(original), original);
done();
});
Tinytest.addAsync(
'Triggers - applyFilters - single trigger to array',
function(test, done) {
var original = function() {};
test.equal(Triggers.applyFilters(original)[0], original);
done();
});
Tinytest.addAsync(
'Triggers - applyFilters - only and except both',
function(test, done) {
var original = [];
try {
Triggers.applyFilters(original, {only: [], except: []});
} catch(ex) {
test.isTrue(/only and except/.test(ex.message));
done();
}
});
Tinytest.addAsync(
'Triggers - applyFilters - only is not an array',
function(test, done) {
var original = [];
try {
Triggers.applyFilters(original, {only: "name"});
} catch(ex) {
test.isTrue(/to be an array/.test(ex.message));
done();
}
});
Tinytest.addAsync(
'Triggers - applyFilters - except is not an array',
function(test, done) {
var original = [];
try {
Triggers.applyFilters(original, {except: "name"});
} catch(ex) {
test.isTrue(/to be an array/.test(ex.message));
done();
}
});
Tinytest.addAsync(
'Triggers - applyFilters - unsupported filter',
function(test, done) {
var original = [];
try {
Triggers.applyFilters(original, {wowFilter: []});
} catch(ex) {
test.isTrue(/not supported/.test(ex.message));
done();
}
});
Tinytest.addAsync(
'Triggers - applyFilters - just only filter',
function(test, done) {
var bounded = Triggers.applyFilters(done, {only: ["abc"]});
bounded[0]({route: {name: "abc"}});
});
Tinytest.addAsync(
'Triggers - applyFilters - just except filter',
function(test, done) {
var bounded = Triggers.applyFilters(done, {except: ["abc"]});
bounded[0]({route: {name: "some-other"}});
});
function MakeTriggers(count, store) {
var triggers = [];
function addTrigger(no) {
triggers.push(function() {
store.push(no);
});
}
for(var lc=0; lc<count; lc++) {
addTrigger(lc);
}
return triggers;
}