@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
105 lines (85 loc) • 3.9 kB
text/typescript
import { mock, IQService } from 'angular';
import { Application } from 'core/application/application.model';
import { ApplicationModelBuilder } from 'core/application/applicationModel.builder';
import { ApplicationDataSourceRegistry } from '../application/service/ApplicationDataSourceRegistry';
import { TaskReader } from 'core/task/task.read.service';
describe('Task Data Source', function () {
let application: Application, $scope: any, $q: IQService;
beforeEach(() => ApplicationDataSourceRegistry.clearDataSources());
beforeEach(mock.module(require('./task.dataSource').name));
beforeEach(
mock.inject(function (_$q_: any, $rootScope: any) {
$q = _$q_;
$scope = $rootScope.$new();
}),
);
function configureApplication() {
ApplicationDataSourceRegistry.registerDataSource({ key: 'serverGroups', defaultData: [] });
application = ApplicationModelBuilder.createApplicationForTests(
'app',
...ApplicationDataSourceRegistry.getDataSources(),
);
application.refresh().catch(() => {});
application.getDataSource('tasks').activate();
$scope.$digest();
}
describe('loading tasks', function () {
beforeEach(function () {
spyOn(TaskReader, 'getRunningTasks').and.returnValue($q.when([]));
});
it('loads tasks and sets appropriate flags', function () {
spyOn(TaskReader, 'getTasks').and.returnValue($q.when([]));
configureApplication();
expect(application.getDataSource('tasks').loaded).toBe(true);
expect(application.getDataSource('tasks').loading).toBe(false);
expect(application.getDataSource('tasks').loadFailure).toBe(false);
});
it('sets appropriate flags when task load fails', function () {
spyOn(TaskReader, 'getTasks').and.callFake(() => $q.reject(null));
configureApplication();
expect(application.getDataSource('tasks').loaded).toBe(false);
expect(application.getDataSource('tasks').loading).toBe(false);
expect(application.getDataSource('tasks').loadFailure).toBe(true);
});
});
describe('reload tasks', function () {
beforeEach(function () {
spyOn(TaskReader, 'getRunningTasks').and.returnValue($q.when([]));
});
it('reloads tasks and sets appropriate flags', function () {
let nextCalls = 0;
spyOn(TaskReader, 'getTasks').and.returnValue($q.when([]));
configureApplication();
application.getDataSource('tasks').onRefresh($scope, () => nextCalls++);
expect(application.getDataSource('tasks').loaded).toBe(true);
expect(application.getDataSource('tasks').loading).toBe(false);
expect(application.getDataSource('tasks').loadFailure).toBe(false);
application.getDataSource('tasks').refresh();
expect(application.getDataSource('tasks').loading).toBe(true);
$scope.$digest();
expect(application.getDataSource('tasks').loaded).toBe(true);
expect(application.getDataSource('tasks').loading).toBe(false);
expect(application.getDataSource('tasks').loadFailure).toBe(false);
expect(nextCalls).toBe(1);
});
it('sets appropriate flags when task reload fails; subscriber is responsible for error checking', function () {
spyOn(TaskReader, 'getTasks').and.callFake(() => $q.reject(null));
let errorsHandled = 0,
successesHandled = 0;
configureApplication();
application.getDataSource('tasks').onRefresh(
$scope,
() => successesHandled++,
() => errorsHandled++,
);
application.getDataSource('tasks').refresh();
$scope.$digest();
expect(application.getDataSource('tasks').loading).toBe(false);
expect(application.getDataSource('tasks').loadFailure).toBe(true);
application.getDataSource('tasks').refresh();
$scope.$digest();
expect(errorsHandled).toBe(2);
expect(successesHandled).toBe(0);
});
});
});