Add component tests #8
1 changed files with 78 additions and 10 deletions
|
@ -1,25 +1,93 @@
|
||||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
|
||||||
import {ConverterSelectorComponent} from './converter-selector.component';
|
import {ConverterSelectorComponent} from './converter-selector.component';
|
||||||
|
import {Component, ViewChild} from '@angular/core';
|
||||||
|
import {Step} from '../step';
|
||||||
|
import {TextInputFieldComponent} from '../text-input-field/text-input-field.component';
|
||||||
|
import {InputComponentManagerService} from '../input-component-manager.service';
|
||||||
|
import {ConverterRegistryService} from '../converter-registry.service';
|
||||||
|
import {Converter} from '../converter/converter';
|
||||||
|
import createSpyObj = jasmine.createSpyObj;
|
||||||
|
import SpyObj = jasmine.SpyObj;
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
template: '<app-converter-selector [step]="step" [textInput]="textInputComponent"></app-converter-selector>'
|
||||||
|
})
|
||||||
|
class TestHostComponent {
|
||||||
|
public step: Step = new Step(42);
|
||||||
|
public textInputComponent: TextInputFieldComponent = new TextInputFieldComponent(inputComponentManagerServiceStub);
|
||||||
|
@ViewChild(ConverterSelectorComponent)
|
||||||
|
public sutComponent: ConverterSelectorComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
const inputComponentManagerServiceStub = createSpyObj(['getNext']);
|
||||||
|
|
||||||
describe('ConverterSelectorComponent', () => {
|
describe('ConverterSelectorComponent', () => {
|
||||||
let component: ConverterSelectorComponent;
|
let testHostComponent: TestHostComponent;
|
||||||
let fixture: ComponentFixture<ConverterSelectorComponent>;
|
let testHostFixture: ComponentFixture<TestHostComponent>;
|
||||||
|
|
||||||
|
const converter1: SpyObj<Converter> = createSpyObj(['getId', 'getDisplayname', 'convert']);
|
||||||
|
const converter2: SpyObj<Converter> = createSpyObj(['getId', 'getDisplayname', 'convert']);
|
||||||
|
const converter3: SpyObj<Converter> = createSpyObj(['getId', 'getDisplayname', 'convert']);
|
||||||
|
// converter1.getId.and.returnValue('converter1');
|
||||||
|
converter1.getDisplayname.and.returnValue('Converter 1');
|
||||||
|
// converter2.getId.and.returnValue('converter2');
|
||||||
|
converter2.getDisplayname.and.returnValue('Converter 2');
|
||||||
|
// converter3.getId.and.returnValue('converter3');
|
||||||
|
converter3.getDisplayname.and.returnValue('Converter 3');
|
||||||
|
const converterRegistryServiceStub = createSpyObj(['getAllConverters', 'getConverter']);
|
||||||
|
converterRegistryServiceStub.getAllConverters.and.returnValue([converter1, converter2, converter3]);
|
||||||
|
converterRegistryServiceStub.getConverter.and.returnValue(undefined);
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [ ConverterSelectorComponent ]
|
declarations: [
|
||||||
|
ConverterSelectorComponent,
|
||||||
|
TestHostComponent
|
||||||
|
],
|
||||||
|
providers: [
|
||||||
|
{provide: InputComponentManagerService, useValue: inputComponentManagerServiceStub},
|
||||||
|
{provide: ConverterRegistryService, useValue: converterRegistryServiceStub}
|
||||||
|
]
|
||||||
})
|
})
|
||||||
.compileComponents();
|
.compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(ConverterSelectorComponent);
|
testHostFixture = TestBed.createComponent(TestHostComponent);
|
||||||
component = fixture.componentInstance;
|
testHostComponent = testHostFixture.componentInstance;
|
||||||
fixture.detectChanges();
|
testHostFixture.detectChanges();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create', () => {
|
it('should create', () => {
|
||||||
expect(component).toBeTruthy();
|
expect(testHostComponent.sutComponent).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should update the conversion when the selection changes', () => {
|
||||||
|
// arrange
|
||||||
|
// set next step
|
||||||
|
const nextStep: Step = new Step(99);
|
||||||
|
inputComponentManagerServiceStub.getNext.and.returnValue(nextStep);
|
||||||
|
// set up converter
|
||||||
|
const dummyConverter = createSpyObj(['convert']);
|
||||||
|
dummyConverter.convert.and.returnValue('Converted value');
|
||||||
|
converterRegistryServiceStub.getConverter.and.returnValue(dummyConverter);
|
||||||
|
// create event structure
|
||||||
|
const event = {target: {selectedOptions: [{id: 'The testing converter id'}]}};
|
||||||
|
|
||||||
|
// act
|
||||||
|
testHostComponent.sutComponent.convert(event);
|
||||||
|
|
||||||
|
// assert
|
||||||
|
expect(converterRegistryServiceStub.getConverter).toHaveBeenCalledWith('The testing converter id');
|
||||||
|
expect(nextStep.content).toEqual('Converted value');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should load available converters upon creation', () => {
|
||||||
|
const converters: Converter[] = testHostComponent.sutComponent.converters;
|
||||||
|
expect(converters.length).toEqual(3);
|
||||||
|
expect(converters[0]).toEqual(converter1);
|
||||||
|
expect(converters[1]).toEqual(converter2);
|
||||||
|
expect(converters[2]).toEqual(converter3);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue