Add servicesManager test and registerServices method
This commit is contained in:
parent
e3e039ad47
commit
136969bf18
@ -1,9 +1,49 @@
|
|||||||
|
import log from './../log.js';
|
||||||
|
|
||||||
export default class ServicesManager {
|
export default class ServicesManager {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.services = {};
|
this.services = {};
|
||||||
|
this.registeredServiceNames = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
register(service) {
|
/**
|
||||||
|
*
|
||||||
|
* @param {Object} service
|
||||||
|
*/
|
||||||
|
registerService(service) {
|
||||||
|
if (!service) {
|
||||||
|
log.warn(
|
||||||
|
'Attempting to register a null/undefined service. Exiting early.'
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let serviceName = service.name;
|
||||||
|
|
||||||
|
if (!serviceName) {
|
||||||
|
log.warn(`Service name not set. Exiting early.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.registeredServiceNames.includes(serviceName)) {
|
||||||
|
log.warn(
|
||||||
|
`Extension name ${serviceName} has already been registered. Exiting before duplicating services.`
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.services[service.name] = service;
|
this.services[service.name] = service;
|
||||||
|
|
||||||
|
// Track service registration
|
||||||
|
this.registeredServiceNames.push(serviceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of services.
|
||||||
|
*
|
||||||
|
* @param {Object[]} services - Array of services
|
||||||
|
*/
|
||||||
|
registerServices(services) {
|
||||||
|
services.forEach(service => this.registerService(service));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
70
platform/core/src/services/ServicesManager.test.js
Normal file
70
platform/core/src/services/ServicesManager.test.js
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import ServicesManager from './ServicesManager.js';
|
||||||
|
import log from '../log.js';
|
||||||
|
|
||||||
|
jest.mock('./../log.js');
|
||||||
|
|
||||||
|
describe('ServicesManager.js', () => {
|
||||||
|
let servicesManager;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
servicesManager = new ServicesManager();
|
||||||
|
log.warn.mockClear();
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('registerServices()', () => {
|
||||||
|
it('calls registerService() for each service', () => {
|
||||||
|
servicesManager.registerService = jest.fn();
|
||||||
|
|
||||||
|
const fakeServices = [
|
||||||
|
{ name: 'UINotificationTestService', hide: jest.fn() },
|
||||||
|
{ name: 'UIModalTestService', hide: jest.fn() },
|
||||||
|
];
|
||||||
|
|
||||||
|
servicesManager.registerServices(fakeServices);
|
||||||
|
|
||||||
|
expect(servicesManager.registerService.mock.calls.length).toBe(2);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('registerService()', () => {
|
||||||
|
it('logs a warning if the service is null or undefined', () => {
|
||||||
|
const undefinedService = undefined;
|
||||||
|
const nullService = null;
|
||||||
|
|
||||||
|
servicesManager.registerService(undefinedService);
|
||||||
|
servicesManager.registerService(nullService);
|
||||||
|
|
||||||
|
expect(log.warn.mock.calls.length).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('logs a warning if the service does not have a name', () => {
|
||||||
|
const serviceWithEmptyName = { name: '', hide: jest.fn() };
|
||||||
|
const serviceWithoutName = { hide: jest.fn() };
|
||||||
|
|
||||||
|
servicesManager.registerService(serviceWithEmptyName);
|
||||||
|
servicesManager.registerService(serviceWithoutName);
|
||||||
|
|
||||||
|
expect(log.warn.mock.calls.length).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('tracks which services have been registered', () => {
|
||||||
|
const service = {
|
||||||
|
name: 'UINotificationService',
|
||||||
|
};
|
||||||
|
|
||||||
|
servicesManager.registerService(service);
|
||||||
|
|
||||||
|
expect(servicesManager.registeredServiceNames).toContain(service.name);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('logs a warning if the service has an name that has already been registered', () => {
|
||||||
|
const service = { name: 'UINotificationService' };
|
||||||
|
|
||||||
|
servicesManager.registerService(service);
|
||||||
|
servicesManager.registerService(service);
|
||||||
|
|
||||||
|
expect(log.warn.mock.calls.length).toBe(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -185,7 +185,7 @@ class App extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _initServices(services) {
|
function _initServices(services) {
|
||||||
services.forEach(service => servicesManager.register(service));
|
servicesManager.registerServices(services);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user