alfresco-ng2-components/lib/core/services/auth-guard-ecm.service.spec.ts
Eugenio Romano a52bb5600a
New packages org (#2639)
New packages org
2017-11-16 14:12:52 +00:00

218 lines
5.8 KiB
TypeScript

/*!
* @license
* Copyright 2016 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { async, inject, TestBed } from '@angular/core/testing';
import { Router } from '@angular/router';
import { AlfrescoApiService } from './alfresco-api.service';
import { AuthGuardEcm } from './auth-guard-ecm.service';
import { AuthenticationService } from './authentication.service';
class RouterProvider {
navigate: Function = jasmine.createSpy('RouterProviderNavigate');
}
class AlfrescoApiServiceProvider {
private settings: any = {
validateTicket: true,
isLoggedIn: true
};
constructor(settings: any = {}) {
Object.assign(this.settings, settings);
}
getInstance() {
return {
ecmAuth: this.ecmAuth
};
}
private get ecmAuth() {
return {
validateTicket: this.validateTicket.bind(this),
isLoggedIn: this.isLoggedIn.bind(this)
};
}
private validateTicket() {
const { validateTicket } = this.settings;
return validateTicket
? Promise.resolve('Valid!')
: Promise.reject('Invalid');
}
private isLoggedIn() {
return this.settings.isLoggedIn;
}
}
class AuthenticationServiceProvider {
setRedirectUrl: Function = jasmine.createSpy('setRedirectUrl');
}
class TestConfig {
router: any;
guard: any;
auth: any;
private settings: any = {
validateTicket: true,
isLoggedIn: true
};
constructor(settings: any = {}) {
Object.assign(this.settings, settings);
TestBed.configureTestingModule({
providers: [
this.routerProvider,
this.alfrescoApiServiceProvider,
this.authenticationProvider,
AuthGuardEcm
]
});
inject([ AuthGuardEcm, Router, AuthenticationService ], (guard: AuthGuardEcm, router: Router, auth: AuthenticationService) => {
this.guard = guard;
this.router = router;
this.auth = auth;
})();
}
private get routerProvider() {
return {
provide: Router,
useValue: new RouterProvider()
};
}
private get authenticationProvider() {
return {
provide: AuthenticationService,
useValue: new AuthenticationServiceProvider()
};
}
private get alfrescoApiServiceProvider () {
const { validateTicket, isLoggedIn } = this.settings;
return {
provide: AlfrescoApiService,
useValue: new AlfrescoApiServiceProvider({
validateTicket,
isLoggedIn
})
};
}
get navigateSpy() {
return this.router.navigate;
}
}
describe('CanActivateLoggedIn', () => {
describe('user is not logged in', () => {
beforeEach(async(() => {
this.test = new TestConfig({
isLoggedIn: false
});
const { guard, router } = this.test;
guard.canActivate(null, { url: '' }).then((activate) => {
this.activate = activate;
this.navigateSpy = router.navigate;
});
}));
it('does not allow route to activate', () => {
expect(this.activate).toBe(false);
});
it('redirects to /login', () => {
expect(this.navigateSpy).toHaveBeenCalledWith([ '/login' ]);
});
});
describe('user is logged in but ticket is invalid', () => {
beforeEach(async(() => {
this.test = new TestConfig({
isLoggedIn: true,
validateTicket: false
});
const { guard, router } = this.test;
guard.canActivate(null, { url: '' }).then((activate) => {
this.activate = activate;
this.navigateSpy = router.navigate;
});
}));
it('does not allow route to activate', () => {
expect(this.activate).toBe(false);
});
it('redirects to /login', () => {
expect(this.navigateSpy).toHaveBeenCalledWith([ '/login' ]);
});
});
describe('user is logged in and ticket is valid', () => {
beforeEach(async(() => {
this.test = new TestConfig({
isLoggedIn: true,
validateTicket: true
});
const { guard, router } = this.test;
guard.canActivate(null, { url: '' }).then((activate) => {
this.activate = activate;
this.navigateSpy = router.navigate;
});
}));
it('allows route to activate', () => {
expect(this.activate).toBe(true);
});
it('does not redirect', () => {
expect(this.navigateSpy).not.toHaveBeenCalled();
});
});
describe('redirect url', () => {
beforeEach(async(() => {
this.test = new TestConfig({
isLoggedIn: false
});
const { guard, auth } = this.test;
guard.canActivate(null, { url: 'some-url' }).then((activate) => {
this.auth = auth;
});
}));
it('should set redirect url', () => {
expect(this.auth.setRedirectUrl).toHaveBeenCalledWith('some-url');
});
});
});