angular-cn/dev-infra/caretaker/check/services.spec.ts

69 lines
2.1 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import * as console from '../../utils/console';
import {installVirtualGitClientSpies, mockNgDevConfig} from '../../utils/testing';
import {services, ServicesModule} from './services';
describe('ServicesModule', () => {
let getStatusFromStandardApiSpy: jasmine.Spy;
let infoSpy: jasmine.Spy;
let infoGroupSpy: jasmine.Spy;
services.splice(0, Infinity, {url: 'fakeStatus.com/api.json', name: 'Service Name'});
beforeEach(() => {
getStatusFromStandardApiSpy = spyOn(ServicesModule.prototype, 'getStatusFromStandardApi');
installVirtualGitClientSpies();
infoGroupSpy = spyOn(console.info, 'group');
infoSpy = spyOn(console, 'info');
});
describe('gathering status', () => {
it('for each of the services', async () => {
new ServicesModule({caretaker: {}, ...mockNgDevConfig});
expect(getStatusFromStandardApiSpy)
.toHaveBeenCalledWith({url: 'fakeStatus.com/api.json', name: 'Service Name'});
});
});
describe('printing the data retrieved', () => {
it('for each service ', async () => {
const fakeData = Promise.resolve([
{
name: 'Service 1',
status: 'passing',
description: 'Everything is working great',
lastUpdated: new Date(0),
},
{
name: 'Service 2',
status: 'failing',
description: 'Literally everything is broken',
lastUpdated: new Date(0),
},
]);
const module = new ServicesModule({caretaker: {}, ...mockNgDevConfig});
Object.defineProperty(module, 'data', {value: fakeData});
await module.printToTerminal();
expect(infoGroupSpy).toHaveBeenCalledWith('Service Statuses');
expect(infoSpy).toHaveBeenCalledWith('Service 1 ✅');
expect(infoGroupSpy)
.toHaveBeenCalledWith(`Service 2 ❌ (Updated: ${new Date(0).toLocaleString()})`);
expect(infoSpy).toHaveBeenCalledWith(' Details: Literally everything is broken');
});
});
});