aodb/app/flight-list/list/flight-list.spec.ts
Martin Donnelly afe73b5baa upload
2016-12-22 00:00:06 +00:00

269 lines
8.9 KiB
TypeScript

import {Mod as CoreModule} from '../../core/core.mod';
import {Mod as FlightListModule} from '../flight-list.mod';
import FlightDetailModule from '../../flight-detail/flight-detail.mod';
import {Directive, Controller, FlightListParams} from './flight-list';
import {IFlightDetail} from './../../core/service/flightService';
import {ComponentTest} from'../../infrastructure/ComponentHelper';
class FlightListTest extends ComponentTest {
public api: any;
public $stateParams: FlightListParams;
public $state: ng.ui.IStateService;
public flights: Array<IFlightDetail>;
public ctrl: Controller;
constructor() {
super(Directive.$componentName,
'app/flight-list/list/flight-list.tpl.html');
}
public buildFlights(count: number): void {
this.flights = [];
for (let i = 0; i < count; i++) {
this.flights.push({
Id: '1', Type: 'A', Operator: 'SK', Number: '0214' + i, AircraftType: '333' + i,
Registration: 'PK-GPE' + i, Location: 'MAN', Scheduled: '09:00', Estimated:
'09:00', Actual: '09:00', Terminal: 'T1', Stand: 'A' + i, FlightConcat: 'SK' + '0214' + i
});
}
}
public setUpForSuccessfulGet(): void {
this.$stateParams.filter = "default";
this.buildFlights(5);
let expectedUrl = this.api.flightList + "?window=" + this.$stateParams.filter;
this.$httpBackend.expectGET(expectedUrl)
.respond(201, { Flights: this.flights, RequestId: 'ste1234567' });
this.ctrl = this.compile<Controller>();
}
public setUpForNoFlightsGet(): void {
this.$stateParams.filter = "default";
let expectedUrl = this.api.flightList + "?window=" + this.$stateParams.filter;
this.$httpBackend.expectGET(expectedUrl)
.respond(201, { Flights: new Array<any>(), RequestId: 'ste1234567' });
this.ctrl = this.compile<Controller>();
}
}
describe('Framework: fieldListFilter', () => {
let $filter: any;
let instance: FlightListTest,
flightList: FlightListModule,
core: CoreModule,
flightDetail: FlightDetailModule;
beforeEach(() => {
if (!instance) {
core = new CoreModule(angular);
flightList = new FlightListModule(angular);
flightDetail = new FlightDetailModule(angular);
angular.mock.module('ui.router');
angular.mock.module('ionic');
angular.mock.module('chroma.configuration');
angular.mock.module(CoreModule.$componentName);
angular.mock.module(FlightDetailModule.$componentName);
angular.mock.module(FlightListModule.$componentName);
angular.mock.inject((_$filter_, $state, $stateParams, api) => {
instance = new FlightListTest();
$filter = _$filter_;
instance.$state = $state;
instance.$stateParams = $stateParams;
instance.api = api;
});
}
});
it('Flight Filter: should return flight SK02141 when I search with SK02141', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, 'SK02141', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(1);
expect(result[0].FlightConcat).toBe('SK02141');
});
it('fieldListFilter: filter should be registered', () => {
let result = $filter('fieldListFilter');
expect(result).not.toBeUndefined();
});
it('fieldListFilter: empty query string should return all flight results', () => {
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, '', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(instance.ctrl.flights.length).toBe(5);
});
it('fieldListFilter: should return flight with stand A1 when I search for A1', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, 'A1', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(1);
expect(result[0].Stand).toBe('A1');
});
it('fieldListFilter: should return flight with aircraft type 331 when I search for 331', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, '3331', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(1);
expect(result[0].AircraftType).toBe('3331');
});
it('fieldListFilter: should return flight with registration PK-GPE2 when I search for PK-GPE2', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, 'PK-GPE2', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(1);
expect(result[0].Registration).toBe('PK-GPE2');
});
it('fieldListFilter: should return all flights when I search for PK-GPE as they all start with that', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, 'PK-GPE', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(5);
});
it('fieldListFilter: should return all flights when I search T1 as they are all assigned that terminal', () => {
instance.setUpForSuccessfulGet();
instance.buildFlights(5);
let result = $filter('fieldListFilter')(instance.ctrl.flights, 'T1', ['Number',
'Operator', 'AircraftType', 'Location', 'Terminal', 'Registration',
'Stand', 'FlightConcat']);
expect(result.length).toBe(5);
});
});
describe('Flight List View Tests', () => {
let instance: FlightListTest,
core: CoreModule,
flightDetail: FlightDetailModule,
flightList: FlightListModule;
beforeEach(() => {
if (!instance) {
core = new CoreModule(angular);
flightDetail = new FlightDetailModule(angular);
flightList = new FlightListModule(angular);
angular.mock.module('ui.router');
angular.mock.module('ionic');
angular.mock.module('chroma.configuration');
angular.mock.module(CoreModule.$componentName);
angular.mock.module(FlightDetailModule.$componentName);
angular.mock.module(FlightListModule.$componentName);
angular.mock.inject((api, $state, $stateParams) => {
instance = new FlightListTest();
instance.api = api;
instance.$state = $state;
instance.$stateParams = $stateParams;
});
}
});
it('Filter has 5 flights and 5 flights displayed', () => {
instance.setUpForSuccessfulGet();
expect(instance.ctrl).toBeDefined();
expect(instance.ctrl.flights).toBeDefined();
expect(instance.ctrl.flights.length).toEqual(5);
expect(instance.ctrl.flights).toEqual(instance.flights);
});
it('New flight is added when refreshed', () => {
instance.setUpForSuccessfulGet();
var currentCount = instance.ctrl.flights.length;
instance.buildFlights(6);
let expectedUrl = instance.api.flightList + "?window=" + instance.$stateParams.filter;
instance.$httpBackend.expectGET(expectedUrl)
.respond(201, { Flights: instance.flights, RequestId: 'ste1234567' });
instance.ctrl.load(false);
instance.$httpBackend.flush();
expect(instance.ctrl.flights.length).toBe(6);
expect(instance.ctrl.flights.length).toBeGreaterThan(currentCount);
});
it('Detail shown when flight pressed', () => {
let firstFlight = instance.flights[0],
requestId = 'ste1234567';
spyOn(instance.$state, "go");
instance.ctrl.showDetail(firstFlight);
expect(instance.$state.go).toHaveBeenCalledWith('chroma.flight-detail', {
id: firstFlight.Id,
flight: firstFlight,
requestId: requestId
});
});
it('No flights error message displayed', () => {
instance.setUpForNoFlightsGet();
expect(instance.ctrl.flights.length).toBe(0);
expect(instance.ctrl.message).toBe(Controller.NO_FLIGHTS_MESSAGE);
});
});