summaryrefslogtreecommitdiffstats
path: root/packages/kadira-flow-router/test/client/router.reactivity.spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/kadira-flow-router/test/client/router.reactivity.spec.js')
-rw-r--r--packages/kadira-flow-router/test/client/router.reactivity.spec.js208
1 files changed, 208 insertions, 0 deletions
diff --git a/packages/kadira-flow-router/test/client/router.reactivity.spec.js b/packages/kadira-flow-router/test/client/router.reactivity.spec.js
new file mode 100644
index 00000000..b06deeda
--- /dev/null
+++ b/packages/kadira-flow-router/test/client/router.reactivity.spec.js
@@ -0,0 +1,208 @@
+Tinytest.addAsync(
+'Client - Router - Reactivity - detectChange only once',
+function (test, done) {
+ var route = "/" + Random.id();
+ var name = Random.id();
+ FlowRouter.route(route, {name: name});
+
+ var ranCount = 0;
+ var pickedId = null;
+ var c = Tracker.autorun(function() {
+ ranCount++;
+ pickedId = FlowRouter.getQueryParam("id");
+ if(pickedId) {
+ test.equal(pickedId, "hello");
+ test.equal(ranCount, 2);
+ c.stop();
+ Meteor.defer(done);
+ }
+ });
+
+ setTimeout(function() {
+ FlowRouter.go(name, {}, {id: "hello"});
+ }, 2);
+});
+
+Tinytest.addAsync(
+'Client - Router - Reactivity - detectChange in the action',
+function (test, done) {
+ var route = "/" + Random.id();
+ var name = Random.id();
+ FlowRouter.route(route, {
+ name: name,
+ action: function() {
+ var id = FlowRouter.getQueryParam("id");
+ test.equal(id, "hello");
+ Meteor.defer(done);
+ }
+ });
+
+ setTimeout(function() {
+ FlowRouter.go(name, {}, {id: "hello"});
+ }, 2);
+});
+
+Tinytest.addAsync(
+'Client - Router - Reactivity - detect prev routeChange after new action',
+function (test, done) {
+ var route1 = "/" + Random.id();
+ var name1 = Random.id();
+ var pickedName1 = null;
+
+ var route2 = "/" + Random.id();
+ var name2 = Random.id();
+ var pickedName2 = Random.id();
+
+ FlowRouter.route(route1, {
+ name: name1,
+ action: function() {
+ Tracker.autorun(function(c) {
+ pickedName1 = FlowRouter.getRouteName();
+ if(pickedName1 == name2) {
+ test.equal(pickedName1, pickedName2);
+ c.stop();
+ Meteor.defer(done);
+ }
+ });
+ }
+ });
+
+ FlowRouter.route(route2, {
+ name: name2,
+ action: function() {
+ pickedName2 = FlowRouter.getRouteName();
+ test.equal(pickedName1, name1);
+ test.equal(pickedName2, name2);
+ }
+ });
+
+ FlowRouter.go(name1);
+ Meteor.setTimeout(function() {
+ FlowRouter.go(name2);
+ }, 10);
+});
+
+Tinytest.addAsync(
+'Client - Router - Reactivity - defer watchPathChange until new route rendered',
+function(test, done) {
+ var route1 = "/" + Random.id();
+ var name1 = Random.id();
+ var pickedName1 = null;
+
+ var route2 = "/" + Random.id();
+ var name2 = Random.id();
+ var pickedName2 = Random.id();
+
+ FlowRouter.route(route1, {
+ name: name1,
+ action: function() {
+ Tracker.autorun(function(c) {
+ FlowRouter.watchPathChange();
+ pickedName1 = FlowRouter.current().route.name;
+ if(pickedName1 == name2) {
+ test.equal(pickedName1, pickedName2);
+ c.stop();
+ Meteor.defer(done);
+ }
+ });
+ }
+ });
+
+ FlowRouter.route(route2, {
+ name: name2,
+ action: function() {
+ pickedName2 = FlowRouter.current().route.name;
+ test.equal(pickedName1, name1);
+ test.equal(pickedName2, name2);
+ }
+ });
+
+ FlowRouter.go(name1);
+ Meteor.setTimeout(function() {
+ FlowRouter.go(name2);
+ }, 10);
+});
+
+Tinytest.addAsync(
+'Client - Router - Reactivity - reactive changes and trigger redirects',
+function(test, done) {
+ var name1 = Random.id();
+ var route1 = "/" + name1;
+ FlowRouter.route(route1, {
+ name: name1
+ });
+
+ var name2 = Random.id();
+ var route2 = "/" + name2;
+ FlowRouter.route(route2, {
+ name: name2,
+ triggersEnter: [function(context, redirect) {
+ redirect(name3);
+ }]
+ });
+
+
+ var name3 = Random.id();
+ var route3 = "/" + name3;
+ FlowRouter.route(route3, {
+ name: name3
+ });
+
+ var routeNamesFired = [];
+ FlowRouter.go(name1);
+
+ var c = null;
+ setTimeout(function() {
+ c = Tracker.autorun(function(c) {
+ routeNamesFired.push(FlowRouter.getRouteName());
+ });
+ FlowRouter.go(name2);
+ }, 50);
+
+ setTimeout(function() {
+ c.stop();
+ test.equal(routeNamesFired, [name1, name3]);
+ Meteor.defer(done);
+ }, 250);
+});
+
+Tinytest.addAsync(
+'Client - Router - Reactivity - watchPathChange for every route change',
+function(test, done) {
+ var route1 = "/" + Random.id();
+ var name1 = Random.id();
+ var pickedName1 = null;
+
+ var route2 = "/" + Random.id();
+ var name2 = Random.id();
+ var pickedName2 = Random.id();
+
+ FlowRouter.route(route1, {
+ name: name1
+ });
+
+ FlowRouter.route(route2, {
+ name: name2
+ });
+
+ var ids = [];
+ var c = Tracker.autorun(function() {
+ FlowRouter.watchPathChange();
+ ids.push(FlowRouter.current().queryParams['id']);
+ });
+
+ FlowRouter.go(name1, {}, {id: "one"});
+ Meteor.setTimeout(function() {
+ FlowRouter.go(name1, {}, {id: "two"});
+ }, 10);
+
+ Meteor.setTimeout(function() {
+ FlowRouter.go(name2, {}, {id: "three"});
+ }, 20);
+
+ Meteor.setTimeout(function() {
+ test.equal(ids, [undefined, "one", "two", "three"]);
+ c.stop();
+ done();
+ }, 40);
+}); \ No newline at end of file