aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/service/routeSpec.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/test/service/routeSpec.js b/test/service/routeSpec.js
index fc2c7f9d..4d24279c 100644
--- a/test/service/routeSpec.js
+++ b/test/service/routeSpec.js
@@ -227,4 +227,140 @@ describe('$route', function() {
}
});
});
+
+
+ describe('reloadOnSearch', function() {
+ it('should reload a route when reloadOnSearch is enabled and hashSearch changes', function() {
+ var scope = angular.scope(),
+ $location = scope.$service('$location'),
+ $route = scope.$service('$route'),
+ reloaded = jasmine.createSpy('route reload');
+
+ $route.when('/foo', {controller: FooCtrl});
+ $route.onChange(reloaded);
+
+ function FooCtrl() {
+ reloaded();
+ }
+
+ $location.updateHash('/foo');
+ scope.$eval();
+ expect(reloaded).toHaveBeenCalled();
+ reloaded.reset();
+
+ // trigger reload
+ $location.hashSearch.foo = 'bar';
+ scope.$eval();
+ expect(reloaded).toHaveBeenCalled();
+ });
+
+
+ it('should not reload a route when reloadOnSearch is disabled and only hashSearch changes',
+ function() {
+ var scope = angular.scope(),
+ $location = scope.$service('$location'),
+ $route = scope.$service('$route'),
+ reloaded = jasmine.createSpy('route reload');
+
+ $route.when('/foo', {controller: FooCtrl, reloadOnSearch: false});
+ $route.onChange(reloaded);
+
+ function FooCtrl() {
+ reloaded();
+ }
+
+ expect(reloaded).not.toHaveBeenCalled();
+
+ $location.updateHash('/foo');
+ scope.$eval();
+ expect(reloaded).toHaveBeenCalled();
+ reloaded.reset();
+
+ // don't trigger reload
+ $location.hashSearch.foo = 'bar';
+ scope.$eval();
+ expect(reloaded).not.toHaveBeenCalled();
+ });
+
+
+ it('should reload reloadOnSearch route when url differs only in route path param', function() {
+ var scope = angular.scope(),
+ $location = scope.$service('$location'),
+ $route = scope.$service('$route'),
+ reloaded = jasmine.createSpy('routeReload'),
+ onRouteChange = jasmine.createSpy('onRouteChange');
+
+ $route.when('/foo/:fooId', {controller: FooCtrl, reloadOnSearch: false});
+ $route.onChange(onRouteChange);
+
+ function FooCtrl() {
+ reloaded();
+ }
+
+ expect(reloaded).not.toHaveBeenCalled();
+ expect(onRouteChange).not.toHaveBeenCalled();
+
+ $location.updateHash('/foo/aaa');
+ scope.$eval();
+ expect(reloaded).toHaveBeenCalled();
+ expect(onRouteChange).toHaveBeenCalled();
+ reloaded.reset();
+ onRouteChange.reset();
+
+ $location.updateHash('/foo/bbb');
+ scope.$eval();
+ expect(reloaded).toHaveBeenCalled();
+ expect(onRouteChange).toHaveBeenCalled();
+ reloaded.reset();
+ onRouteChange.reset();
+
+ $location.hashSearch.foo = 'bar';
+ scope.$eval();
+ expect(reloaded).not.toHaveBeenCalled();
+ expect(onRouteChange).not.toHaveBeenCalled();
+ });
+
+
+ it('should update route params when reloadOnSearch is disabled and hashSearch', function() {
+ var scope = angular.scope(),
+ $location = scope.$service('$location'),
+ $route = scope.$service('$route'),
+ routeParams = jasmine.createSpy('routeParams');
+
+ $route.when('/foo', {controller: FooCtrl});
+ $route.when('/bar/:barId', {controller: FooCtrl, reloadOnSearch: false});
+
+ function FooCtrl() {
+ this.$watch(function() {
+ return $route.current.params;
+ }, function(params) {
+ routeParams(params);
+ });
+ }
+
+ expect(routeParams).not.toHaveBeenCalled();
+
+ $location.updateHash('/foo');
+ scope.$eval();
+ expect(routeParams).toHaveBeenCalledWith({});
+ routeParams.reset();
+
+ // trigger reload
+ $location.hashSearch.foo = 'bar';
+ scope.$eval();
+ expect(routeParams).toHaveBeenCalledWith({foo: 'bar'});
+ routeParams.reset();
+
+ $location.updateHash('/bar/123');
+ scope.$eval();
+ expect(routeParams).toHaveBeenCalledWith({barId: '123'});
+ routeParams.reset();
+
+ // don't trigger reload
+ $location.hashSearch.foo = 'bar';
+ scope.$eval();
+ $route.current.scope.$eval(); // ng:view propagates evals so we have to do it by hand here
+ expect(routeParams).toHaveBeenCalledWith({barId: '123', foo: 'bar'});
+ });
+ });
});