-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[chrome/subUrl] always track subUrl when no router
- Loading branch information
Showing
4 changed files
with
136 additions
and
10 deletions.
There are no files selected for viewing
105 changes: 105 additions & 0 deletions
105
src/ui/public/chrome/directives/__tests__/sub_url_route_filter.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
import ngMock from 'ng_mock'; | ||
import expect from 'expect.js'; | ||
|
||
import { SubUrlRouteFilterProvider } from '../sub_url_route_filter'; | ||
|
||
describe.only('kbn-chrome subUrlRouteFilter()', () => { | ||
describe('no ngRoute', () => { | ||
beforeEach(ngMock.module('kibana/private')); | ||
beforeEach(ngMock.inject(($injector) => { | ||
expect($injector.has('$route')).to.be(false); | ||
})); | ||
|
||
it('always returns true when there is no $route service', ngMock.inject((Private) => { | ||
const subUrlRouteFilter = Private(SubUrlRouteFilterProvider); | ||
expect(subUrlRouteFilter()).to.be(true); | ||
})); | ||
}); | ||
|
||
describe('with ngRoute', () => { | ||
|
||
beforeEach(ngMock.module('kibana/private', 'ngRoute', $routeProvider => { | ||
$routeProvider.when('/foo', { | ||
redirectTo: '/bar' | ||
}); | ||
|
||
$routeProvider.when('/bar', { | ||
template: '<div>foo => bar</div>' | ||
}); | ||
})); | ||
|
||
let test; | ||
beforeEach(ngMock.inject((Private, $location, $rootScope, $route) => { | ||
test = ({ path, assert }) => { | ||
const subUrlRouteFilter = Private(SubUrlRouteFilterProvider); | ||
$location.path(path); | ||
|
||
let result; | ||
function runAssert() { | ||
if (result) { | ||
// only run once | ||
return; | ||
} | ||
|
||
try { | ||
assert($route, subUrlRouteFilter); | ||
result = {}; | ||
} catch (error) { | ||
result = { error }; | ||
} | ||
} | ||
|
||
$rootScope.$on('$routeUpdate', runAssert); | ||
$rootScope.$on('$routeChangeSuccess', runAssert); | ||
$rootScope.$apply(); | ||
|
||
// when no route matches there is no event so we run manually | ||
if (!result) { | ||
runAssert(); | ||
} | ||
|
||
if (result.error) { | ||
throw result.error; | ||
} | ||
}; | ||
})); | ||
|
||
describe('no current route', () => { | ||
it('returns false', () => { | ||
test({ | ||
path: '/baz', | ||
assert($route, subUrlRouteFilter) { | ||
expect($route.current).to.not.be.ok(); | ||
expect(subUrlRouteFilter()).to.eql(false); | ||
} | ||
}); | ||
}); | ||
}); | ||
|
||
describe('redirectTo route', () => { | ||
it('returns false', () => { | ||
test({ | ||
path: '/foo', | ||
assert($route, subUrlRouteFilter) { | ||
expect($route.current).to.be.ok(); | ||
expect($route.current.redirectTo).to.be.ok(); | ||
expect(subUrlRouteFilter()).to.eql(false); | ||
} | ||
}); | ||
}); | ||
}); | ||
|
||
describe('standard route', () => { | ||
it('returns true', () => { | ||
test({ | ||
path: '/bar', | ||
assert($route, subUrlRouteFilter) { | ||
expect($route.current).to.be.ok(); | ||
expect($route.current.template).to.be.ok(); | ||
expect(subUrlRouteFilter()).to.eql(true); | ||
} | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/** | ||
* Creates a function that will be called on each route change | ||
* to determine if the event should be used to update the last | ||
* subUrl of chrome links/tabs | ||
* @injected | ||
*/ | ||
export function SubUrlRouteFilterProvider($injector) { | ||
if (!$injector.has('$route')) { | ||
return function alwaysUpdate() { | ||
return true; | ||
}; | ||
} | ||
|
||
const $route = $injector.get('$route'); | ||
return function ignoreRedirectToRoutes() { | ||
return Boolean($route.current && !$route.current.redirectTo); | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters