import { HighlightMock } from './../../../../../../app2Mocks/app2/pipes/highlightMock'; import { OrderByObjectMock } from './../../../../../../app2Mocks/app2/pipes/orderByObjectMock'; /* Migreringsbeslut: denna test behöver Chrome headless eller PhantomJs + es6-shim för att kunna köras */ /** * @ngdoc fbDropPlusSpec * @name fasit.tests.#fbFormDropPlusSpec * @fbDropPlusSpec * * @description * Test för directivet fbDropPlus * */ import { FbFormDropPlusComponent } from './fb-form-drop-plus.component'; import { ComponentFixture, TestBed, ComponentFixtureAutoDetect } from '@angular/core/testing'; import { DebugElement, NO_ERRORS_SCHEMA, Component } from '@angular/core'; import {HttpClient} from '@angular/common/http'; import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { FbCoreModule } from '@fb/core/core.module'; import { FbCommonPipesModule } from '@fb/common'; declare const angular: angular.IAngularStatic; const DROP_PLUS_VAR: string = 'Hej'; @Component({ selector: 'fb-test-component-wrapper', template: ` ` }) class TestComponentWrapperComponent { dropPlusVar: fb.ChangeTrack; constructor() { this.dropPlusVar = new fb.ChangeTrack(DROP_PLUS_VAR); } } let comp: FbFormDropPlusComponent; let fixture: ComponentFixture; let de: DebugElement; let el: HTMLElement; let $scope: ng.IScope; let dropPlusService: fb.IMockDropPlusService; let dropPlusListMock: fb.List; describe('FbFormDropPlusComponent', description); function description(): void { beforeEach(initAngularJs); beforeEach(initAngular); beforeEach(init); afterEach(() => { $scope.$destroy(); }); run(); } function createTranslateLoader(http: HttpClient): TranslateHttpLoader { return new TranslateHttpLoader(http, '../app/Languages/', '.json'); } function initAngularJs(): void { angular.mock.module('fasit', 'fbMocks' /*,'configModelMock'*/); angular.mock.inject(($rootScope: fb.IRootScope, $injector: fb.IRootScope) => { $scope = $rootScope.$new(); dropPlusService = ($injector as any).get('dropPlusService'); dropPlusListMock = ($injector as any).get('getDropPlus'); }); } function initAngular(): void { TestBed.configureTestingModule({ imports: [ FbCoreModule, FbCommonPipesModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: (createTranslateLoader), deps: [HttpClient] } }) ], declarations: [ TestComponentWrapperComponent, FbFormDropPlusComponent, OrderByObjectMock, HighlightMock ], providers: [ { provide: ComponentFixtureAutoDetect, useValue: true }, { provide: 'DropPlusService', useValue: dropPlusService } ], schemas: [NO_ERRORS_SCHEMA] }) .overrideTemplate(FbFormDropPlusComponent, './fb-form-drop-plus.component.html') .compileComponents() .then( (data) => { console.log(data); } ).catch(reason => { throw reason; }); } function init(): void { fixture = TestBed.createComponent(TestComponentWrapperComponent); comp = fixture.debugElement.children[0].componentInstance; de = fixture.debugElement; el = de.nativeElement; fixture.detectChanges(); } function run(): void { describe('Jobb mot servicen', () => { it('Hämtar rätt', () => { $scope.$digest(); dropPlusService.resolve(fb.RequestType.GET, 'taco', dropPlusListMock); $scope.$digest(); // tslint:disable-next-line:no-string-literal const list: fb.List = comp['list']; expect(list.length).toBe(2); }); it('Lägger till rätt', () => { const dpService: fb.IMockDropPlusService = fixture.debugElement.injector.get('DropPlusService'); spyOn(dpService, 'add').and.returnValue({ $promise: { then: () => { return; } } }); comp.model.value = 'Hej'; comp.add(); $scope.$digest(); expect(dpService.add).toHaveBeenCalled(); expect((dpService.add as any).calls.argsFor(0)[0].DropPlusTyp.value).toBe('taco'); expect((dpService.add as any).calls.argsFor(0)[0].Vaerde.value).toBe('Hej'); }); it('Tar bort rätt', () => { const dpService: fb.IMockDropPlusService = fixture.debugElement.injector.get('DropPlusService'); const spy: jasmine.Spy = spyOn(dpService, 'remove'); spy.and.returnValue({ $promise: { then: () => { return; } } }); $scope.$digest(); const dp: fb.DropPlus = new fb.DropPlus({ DropPlusId: 7, DropPlusTyp: '' }); comp.delete(dp); $scope.$digest(); expect(spy).toHaveBeenCalledWith(dp); }); }); describe('Click events', () => { beforeEach(() => { dropPlusService.resolve(fb.RequestType.GET, 'taco', dropPlusListMock); $scope.$digest(); }); it('select', () => { // tslint:disable-next-line:no-string-literal const list: fb.List = comp['list']; const firstElement: fb.DropPlus = list[0]; spyOn(comp as any, 'filterList'); // Private spyOn(comp as any, 'blurList'); // Private $scope.$digest(); expect(comp.model.value).not.toBe(firstElement); comp.select(firstElement); expect(comp.model.value).toBe(firstElement.Vaerde.value); // tslint:disable-next-line:no-string-literal expect(comp['filterList']).toHaveBeenCalled(); // tslint:disable-next-line:no-string-literal expect(comp['blurList']).toHaveBeenCalled(); }); it('lägg till', () => { spyOn(comp as any, 'filterList'); // private spyOn(comp as any, 'blurList'); // private comp.model = new fb.ChangeTrack('heja'); comp.model.root = { applyValue: () => { return; } } as any; comp.add(); dropPlusService.resolve(fb.RequestType.ADD, '', dropPlusListMock); $scope.$digest(); // tslint:disable-next-line:no-string-literal expect(comp['filterList']).toHaveBeenCalled(); // tslint:disable-next-line:no-string-literal expect(comp['blurList']).toHaveBeenCalled(); }); }); }