import { Component, ViewChild, NgModule } from '@angular/core'; import { ModalService } from './modal.service'; import { ModalRef } from './modal-ref'; import { ComponentFixture, waitForAsync, TestBed } from '@angular/core/testing'; import { LuxModalWindowComponent } from './modal-window'; import { LuxModalBackdropComponent } from './modal-backdrop'; @Component({ template: `

Hello World

` }) class TestComponent { @ViewChild('modal1', { static: false }) modal1: any; constructor(public modalService: ModalService) { } openModal1(): ModalRef { return this.modalService.open(this.modal1); } } @NgModule({ providers: [ModalService], entryComponents: [LuxModalWindowComponent, LuxModalBackdropComponent], declarations: [ TestComponent, LuxModalWindowComponent, LuxModalBackdropComponent ] }) export class ModalTestModule { } describe('Modal Tests', () => { let component: TestComponent; let fixture: ComponentFixture; beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ModalTestModule] }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(TestComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should open and close modal', () => { // Arrange const modalInstance = fixture.componentInstance.openModal1(); // Act fixture.detectChanges(); // Assert let modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(1); // Arrange modalInstance.close(); // Act fixture.detectChanges(); // Assert modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(0); }); it('should open modal and close with Exit result', (done) => { // Arrange const modalInstance = fixture.componentInstance.openModal1(); // Act fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(1); // Arrange modalInstance.result.then(result => { // Assert expect(result).toBe('Exit'); done(); }); // Act modalInstance.close('Exit'); }); it('should open modal and dismiss with reason', (done) => { // Arrange const modalInstance = fixture.componentInstance.openModal1(); // Act fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(1); // Arrange modalInstance.result.then(_ => {}, reason => { // Assert expect(reason).toBe('Closed'); done(); }); // Act modalInstance.dismiss('Closed'); }); it('should close modal with button inside', () => { // Arrange fixture.componentInstance.openModal1(); // Act fixture.detectChanges(); const button = document.querySelector('button#close') as HTMLElement; button.click(); fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(0); }); it('should dismiss modal with button inside', () => { // Arrange fixture.componentInstance.openModal1(); // Act fixture.detectChanges(); const button = document.querySelector('button#dismiss') as HTMLElement; button.click(); fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(0); }); it('should resolve result promise on close', () => { // Arrange let resolvedResult; fixture.componentInstance.openModal1().result.then((result) => { resolvedResult = result; }); // Act fixture.detectChanges(); const button = document.querySelector('button#close') as HTMLElement; button.click(); fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(0); fixture.whenStable().then(() => { expect(resolvedResult).toBe('Close click'); }); }); it('should reject result promise on close', () => { // Arrange let rejectedResult; fixture.componentInstance.openModal1().result.catch((result) => { rejectedResult = result; }); // Act fixture.detectChanges(); const button = document.querySelector('button#dismiss') as HTMLElement; button.click(); fixture.detectChanges(); // Assert const modals = document.querySelector('body').querySelectorAll('.lux-modal-body'); expect(modals.length).toBe(0); fixture.whenStable().then(() => { expect(rejectedResult).toBe('Dismiss click'); }); }); });