import { Component, NgModule } from '@angular/core'; import { TestBed, ComponentFixture } from '@angular/core/testing'; import { pairwise, tap } from 'rxjs/operators'; import { BsModalService, ModalModule } from '../index'; @Component({ template: '
Dummy Component
' }) class DummyComponent { // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars constructor(modalService: BsModalService) { } } @Component({ template: '
Test Component
' }) class TestModalComponent { } @NgModule({ declarations: [TestModalComponent], entryComponents: [TestModalComponent] }) export class TestModule { } describe('Modal service', () => { let fixture: ComponentFixture; let modalService: BsModalService; beforeEach(() => { TestBed.configureTestingModule({ declarations: [DummyComponent], providers: [BsModalService], imports: [ModalModule.forRoot(), TestModule] }); fixture = TestBed.createComponent(DummyComponent); modalService = fixture.debugElement.injector.get(BsModalService); fixture.detectChanges(); }); it('should return random id on spin up a new modal', done => { modalService.onShown.subscribe((data) => { expect(data.id).toBeTruthy(); done(); }); modalService.show(TestModalComponent); }); it('should return different random id when open nested modal without specifying id', done => { modalService.onShown.pipe( pairwise(), tap(([firstData, secondData]) => { expect(firstData.id).not.toBe(secondData.id); done(); }) ).subscribe(); modalService.show(TestModalComponent); modalService.show(TestModalComponent); }); it('should return id in config when specified', done => { const id = 20; modalService.onShown.subscribe((data) => { expect(data.id).toBe(id); done(); }); modalService.show(TestModalComponent, { id }); }); it('should return id when hide modal', () => { const id = 20; modalService.onHidden.subscribe((data) => { expect(data.id).toBe(id); }); const bsRef = modalService.show(TestModalComponent, { id }); bsRef.hide(); }); });