113 lines
3.2 KiB
JavaScript
113 lines
3.2 KiB
JavaScript
|
import 'expect-more-jest';
|
||
|
import { validateAuthenticateRoutePermission } from './index';
|
||
|
import auth from '../api/auth';
|
||
|
|
||
|
jest.mock('./dashboard/dashboard.routes', () => ({
|
||
|
routes: [],
|
||
|
}));
|
||
|
jest.mock('./auth/auth.routes', () => ({
|
||
|
routes: [],
|
||
|
}));
|
||
|
jest.mock('./login/login.routes', () => ({
|
||
|
routes: [],
|
||
|
}));
|
||
|
jest.mock('../constants', () => {
|
||
|
return {
|
||
|
APP_BASE_URL: '/',
|
||
|
PUSHER: false,
|
||
|
get apiUrl() {
|
||
|
return `${this.APP_BASE_URL}/`;
|
||
|
},
|
||
|
GRAVATAR_URL: 'https://www.gravatar.com/avatar',
|
||
|
CHANNELS: {
|
||
|
FACEBOOK: 'facebook',
|
||
|
},
|
||
|
ASSIGNEE_TYPE_SLUG: {
|
||
|
MINE: 0,
|
||
|
UNASSIGNED: 1,
|
||
|
OPEN: 1,
|
||
|
},
|
||
|
};
|
||
|
});
|
||
|
|
||
|
window.roleWiseRoutes = {};
|
||
|
|
||
|
describe(`behavior`, () => {
|
||
|
describe(`when route is not protected`, () => {
|
||
|
it(`should go to the dashboard when user is logged in`, () => {
|
||
|
// Arrange
|
||
|
spyOn(auth, 'isLoggedIn').and.returnValue(true);
|
||
|
spyOn(auth, 'getCurrentUser').and.returnValue({
|
||
|
role: 'user',
|
||
|
});
|
||
|
const to = {
|
||
|
name: 'login',
|
||
|
};
|
||
|
const from = { name: '' };
|
||
|
const next = jest.fn();
|
||
|
// Act
|
||
|
validateAuthenticateRoutePermission(to, from, next);
|
||
|
// Assert
|
||
|
expect(next).toHaveBeenCalledWith('/app/dashboard');
|
||
|
});
|
||
|
});
|
||
|
describe(`when route is protected`, () => {
|
||
|
describe(`when user not logged in`, () => {
|
||
|
it(`should redirect to login`, () => {
|
||
|
// Arrange
|
||
|
spyOn(auth, 'isLoggedIn').and.returnValue(false);
|
||
|
spyOn(auth, 'getCurrentUser').and.returnValue(null);
|
||
|
const to = {
|
||
|
name: 'some-protected-route',
|
||
|
};
|
||
|
const from = { name: '' };
|
||
|
const next = jest.fn();
|
||
|
// Act
|
||
|
validateAuthenticateRoutePermission(to, from, next);
|
||
|
// Assert
|
||
|
expect(next).toHaveBeenCalledWith('/app/login');
|
||
|
});
|
||
|
});
|
||
|
describe(`when user is logged in`, () => {
|
||
|
describe(`when route is not accessible to current user`, () => {
|
||
|
it(`should redirect to dashboard`, () => {
|
||
|
// Arrange
|
||
|
spyOn(auth, 'isLoggedIn').and.returnValue(true);
|
||
|
spyOn(auth, 'getCurrentUser').and.returnValue({
|
||
|
role: 'user',
|
||
|
});
|
||
|
window.roleWiseRoutes.user = ['dashboard'];
|
||
|
const to = {
|
||
|
name: 'admin',
|
||
|
};
|
||
|
const from = { name: '' };
|
||
|
const next = jest.fn();
|
||
|
// Act
|
||
|
validateAuthenticateRoutePermission(to, from, next);
|
||
|
// Assert
|
||
|
expect(next).toHaveBeenCalledWith('/app/dashboard');
|
||
|
});
|
||
|
});
|
||
|
describe(`when route is accessible to current user`, () => {
|
||
|
it(`should go there`, () => {
|
||
|
// Arrange
|
||
|
spyOn(auth, 'isLoggedIn').and.returnValue(true);
|
||
|
spyOn(auth, 'getCurrentUser').and.returnValue({
|
||
|
role: 'user',
|
||
|
});
|
||
|
window.roleWiseRoutes.user = ['dashboard', 'admin'];
|
||
|
const to = {
|
||
|
name: 'admin',
|
||
|
};
|
||
|
const from = { name: '' };
|
||
|
const next = jest.fn();
|
||
|
// Act
|
||
|
validateAuthenticateRoutePermission(to, from, next);
|
||
|
// Assert
|
||
|
expect(next).toHaveBeenCalledWith();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|