mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
434 lines
17 KiB
TypeScript
434 lines
17 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 { it, describe } from '@angular/core/testing';
|
|
import { ReflectiveInjector, provide } from '@angular/core';
|
|
import { AlfrescoSettingsService } from './AlfrescoSettingsService.service';
|
|
import { AlfrescoAuthenticationService } from './AlfrescoAuthenticationService.service';
|
|
import { AlfrescoAuthenticationECM } from './AlfrescoAuthenticationECM.service';
|
|
import { AlfrescoAuthenticationBPM } from './AlfrescoAuthenticationBPM.service';
|
|
import { XHRBackend, HTTP_PROVIDERS } from '@angular/http';
|
|
import { MockBackend } from '@angular/http/testing';
|
|
|
|
declare var AlfrescoApi: any;
|
|
|
|
describe('AlfrescoAuthentication', () => {
|
|
let injector,
|
|
fakePromiseECM,
|
|
fakePromiseBPM,
|
|
service;
|
|
|
|
fakePromiseECM = new Promise(function (resolve, reject) {
|
|
resolve({
|
|
entry: {
|
|
userId: 'fake-username',
|
|
id: 'fake-post-ticket-ECM'
|
|
}
|
|
});
|
|
reject({
|
|
response: {
|
|
error: 'fake-error'
|
|
}
|
|
});
|
|
});
|
|
|
|
fakePromiseBPM = new Promise(function (resolve, reject) {
|
|
resolve({
|
|
status: 'fake-post-ticket-BPM'
|
|
});
|
|
reject({
|
|
response: {
|
|
error: 'fake-error'
|
|
}
|
|
});
|
|
});
|
|
|
|
beforeEach(() => {
|
|
injector = ReflectiveInjector.resolveAndCreate([
|
|
HTTP_PROVIDERS,
|
|
provide(XHRBackend, {useClass: MockBackend}),
|
|
provide(AlfrescoSettingsService, {useClass: AlfrescoSettingsService}),
|
|
AlfrescoAuthenticationService
|
|
]);
|
|
|
|
let store = {};
|
|
|
|
spyOn(localStorage, 'getItem').and.callFake(function (key) {
|
|
return store[key];
|
|
});
|
|
spyOn(localStorage, 'setItem').and.callFake(function (key, value) {
|
|
return store[key] = value + '';
|
|
});
|
|
spyOn(localStorage, 'clear').and.callFake(function () {
|
|
store = {};
|
|
});
|
|
spyOn(localStorage, 'removeItem').and.callFake(function (key) {
|
|
delete store[key];
|
|
});
|
|
spyOn(localStorage, 'key').and.callFake(function (i) {
|
|
let keys = Object.keys(store);
|
|
return keys[i] || null;
|
|
});
|
|
|
|
// service = injector.get(AlfrescoAuthenticationService);
|
|
});
|
|
|
|
describe('when the setting is ECM', () => {
|
|
|
|
it('should create an AlfrescoAuthenticationECM instance', (done) => {
|
|
let providers = ['ECM'];
|
|
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise').and.returnValue(fakePromiseECM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.providersInstance).toBeDefined();
|
|
expect(service.providersInstance.length).toBe(1);
|
|
expect(service.providersInstance[0].TYPE).toEqual(providers[0]);
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return an ECM ticket after the login done', (done) => {
|
|
let providers = ['ECM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise').and.returnValue(fakePromiseECM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.getTicket(providers[0])).toEqual('fake-post-ticket-ECM');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return ticket undefined when the credentials are wrong', (done) => {
|
|
let providers = ['ECM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise')
|
|
.and.returnValue(Promise.reject('fake invalid credentials'));
|
|
|
|
service.login('fake-wrong-username', 'fake-wrong-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return an error if no provider are defined calling the login', (done) => {
|
|
let providers = [];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(err).toBeDefined();
|
|
expect(err).toEqual('No providers defined');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return an error if an empty provider are defined calling the login', (done) => {
|
|
let providers = [''];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(err).toBeDefined();
|
|
expect(err.message).toEqual('Wrong provider defined');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return a ticket undefined after logout', (done) => {
|
|
let providers = ['ECM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
localStorage.setItem('ticket-ECM', 'fake-post-ticket-ECM');
|
|
service.createProviderInstance(providers);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getDeleteTicketPromise').and.returnValue(fakePromiseECM);
|
|
|
|
service.logout()
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
expect(localStorage.getItem('ticket-ECM')).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return an error if no provider are defined calling the logout', (done) => {
|
|
let providers = [];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
service.logout()
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(err).toBeDefined();
|
|
expect(err).toEqual('No providers defined');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return false if the user is not logged in', () => {
|
|
let providers = ['ECM'];
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('when the setting is BPM', () => {
|
|
|
|
it('should create an AlfrescoAuthenticationBPM instance', (done) => {
|
|
let providers = ['BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(fakePromiseBPM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.providersInstance).toBeDefined();
|
|
expect(service.providersInstance.length).toBe(1);
|
|
expect(service.providersInstance[0].TYPE).toEqual(providers[0]);
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return an BPM ticket after the login done', (done) => {
|
|
let providers = ['BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(fakePromiseBPM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.getTicket(providers[0])).toEqual('fake-post-ticket-BPM');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return ticket undefined when the credentials are wrong', (done) => {
|
|
let providers = ['BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(Promise.reject('fake invalid credentials'));
|
|
|
|
service.login('fake-wrong-username', 'fake-wrong-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return a ticket undefined after logout', (done) => {
|
|
let providers = ['BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
localStorage.setItem('ticket-BPM', 'fake-post-ticket-BPM');
|
|
service.createProviderInstance(providers);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogout').and.returnValue(fakePromiseBPM);
|
|
|
|
service.logout()
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
expect(localStorage.getItem('ticket-BPM')).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should throw an error when the logout return error', (done) => {
|
|
let providers = ['BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
localStorage.setItem('ticket-BPM', 'fake-post-ticket-BPM');
|
|
service.createProviderInstance(providers);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogout').and.returnValue(Promise.reject('fake logout error'));
|
|
|
|
service.logout()
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(err).toBeDefined();
|
|
expect(err.message).toEqual('fake logout error');
|
|
expect(localStorage.getItem('ticket-BPM')).toEqual('fake-post-ticket-BPM');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
|
|
});
|
|
|
|
describe('when the setting is both ECM and BPM ', () => {
|
|
|
|
it('should create both instances', (done) => {
|
|
let providers = ['ECM', 'BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise').and.returnValue(fakePromiseECM);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(fakePromiseBPM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.isLoggedIn(providers[1])).toBe(true);
|
|
expect(service.providersInstance).toBeDefined();
|
|
expect(service.providersInstance.length).toBe(2);
|
|
expect(service.providersInstance[0].TYPE).toEqual(providers[0]);
|
|
expect(service.providersInstance[1].TYPE).toEqual(providers[1]);
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return both ECM and BPM tickets after the login done', (done) => {
|
|
let providers = ['ECM', 'BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise').and.returnValue(fakePromiseECM);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(fakePromiseBPM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(() => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(true);
|
|
expect(service.isLoggedIn(providers[1])).toBe(true);
|
|
expect(service.getTicket(providers[0])).toEqual('fake-post-ticket-ECM');
|
|
expect(service.getTicket(providers[1])).toEqual('fake-post-ticket-BPM');
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return ticket undefined when the credentials are correct for the ECM login but wrong for the BPM login', (done) => {
|
|
let providers = ['ECM', 'BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise').and.returnValue(fakePromiseECM);
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(Promise.reject('fake invalid credentials'));
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
expect(service.isLoggedIn(providers[1])).toBe(false);
|
|
expect(service.getTicket(providers[1])).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
|
|
it('should return ticket undefined when the credentials are correct for the BPM login but wrong for the ECM login', (done) => {
|
|
let providers = ['ECM', 'BPM'];
|
|
let alfSetting = injector.get(AlfrescoSettingsService);
|
|
alfSetting.providers = providers;
|
|
|
|
service = injector.get(AlfrescoAuthenticationService);
|
|
spyOn(AlfrescoAuthenticationECM.prototype, 'getCreateTicketPromise')
|
|
.and.returnValue(Promise.reject('fake invalid credentials'));
|
|
spyOn(AlfrescoAuthenticationBPM.prototype, 'apiActivitiLogin').and.returnValue(fakePromiseBPM);
|
|
|
|
service.login('fake-username', 'fake-password', providers)
|
|
.subscribe(
|
|
(res) => {
|
|
done();
|
|
},
|
|
(err: any) => {
|
|
expect(service.isLoggedIn(providers[0])).toBe(false);
|
|
expect(service.getTicket(providers[0])).toBeUndefined();
|
|
expect(service.isLoggedIn(providers[1])).toBe(false);
|
|
expect(service.getTicket(providers[1])).toBeUndefined();
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
});
|
|
});
|