UNPKG

ngx-smart-modal-2

Version:

Smart modal handler to manage modals and data everywhere in Angular apps.

364 lines (318 loc) 11.7 kB
import { inject, TestBed, async, tick, fakeAsync } from '@angular/core/testing'; import { NgxSmartModalComponent, NgxSmartModalService } from '../../'; describe('NgxSmartModalComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ NgxSmartModalComponent ], providers: [ NgxSmartModalService ] }).compileComponents(); })); it('should create a modal', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.ngOnInit(); expect(app).toBeTruthy(); })); it('should open and close the modal directly', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.open(true); expect(app.isVisible()).toBeTruthy(); app.close(); app.onCloseFinished.subscribe(() => { expect(app.isVisible()).toBeFalsy(); }); })); it('should toggle the modal directly', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; expect(app.isVisible()).toBeFalsy(); app.toggle(true); expect(app.isVisible()).toBeTruthy(); app.toggle(); app.onCloseFinished.subscribe(() => { expect(app.isVisible()).toBeFalsy(); }); })); it('should close the modal by escape keyup', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const event = new KeyboardEvent('keyup', { key: 'Escape' }); spyOn(app, 'escapeKeyboardEvent'); spyOn(app, 'onEscape'); app.identifier = 'myModal'; app.open(); expect(app.visible).toBeTruthy(); dispatchEvent(event); app.onEscape.subscribe(() => { expect(app.visible).toBeFalsy(); expect(app.escapeKeyboardEvent).toHaveBeenCalled(); expect(app.onEscape).toHaveBeenCalled(); }); })); it('should listen to any close event (Escape)', fakeAsync(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const event = new KeyboardEvent('keyup', { key: 'Escape' }); app.identifier = 'myModal'; // Test with escape event app.open(); tick(); expect(app.visible).toBeTruthy(); dispatchEvent(event); tick(); app.onAnyCloseEvent.subscribe(() => { expect(app.visible).toBeTruthy(); expect(app.openedClass).toBeFalsy(); }); })); it('should listen to any close event (Close)', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; // Test with close event app.open(); expect(app.visible).toBeTruthy(); app.onAnyCloseEvent.subscribe(() => { expect(app.visible).toBeTruthy(); expect(app.openedClass).toBeFalsy(); done(); }); app.close(); }); it('should listen to any close event (Dismiss)', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; // Test with dismiss event app.open(); fixture.detectChanges(); expect(app.visible).toBeTruthy(); const compiled = fixture.debugElement.nativeElement; const fakeEvent = { target: compiled.querySelector('.overlay') }; app.onAnyCloseEvent.subscribe(() => { expect(app.visible).toBeTruthy(); expect(app.openedClass).toBeFalsy(); done(); }); app.dismiss(fakeEvent); }); it('should listen to any close event finished (Escape)', fakeAsync(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const event = new KeyboardEvent('keyup', { key: 'Escape' }); app.identifier = 'myModal'; // Test with escape event app.open(); tick(); expect(app.visible).toBeTruthy(); dispatchEvent(event); tick(); app.onAnyCloseEventFinished.subscribe(() => { expect(app.visible).toBeFalsy(); expect(app.openedClass).toBeFalsy(); }); })); it('should listen to any close event finished (Close)', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; // Test with close event app.open(); expect(app.visible).toBeTruthy(); app.onAnyCloseEventFinished.subscribe(() => { expect(app.visible).toBeFalsy(); done(); }); app.close(); expect(app.openedClass).toBeFalsy(); }); it('should listen to any close event finished (Dismiss)', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; // Test with dismiss event app.open(); fixture.detectChanges(); expect(app.visible).toBeTruthy(); const compiled = fixture.debugElement.nativeElement; const fakeEvent = { target: compiled.querySelector('.overlay') }; app.onAnyCloseEventFinished.subscribe(() => { expect(app.visible).toBeFalsy(); done(); }); app.dismiss(fakeEvent); expect(app.openedClass).toBeFalsy(); }); it('should not close the modal by escape keyup', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const event = new KeyboardEvent('keyup', { key: 'Escape' }); app.identifier = 'myModal'; app.escapable = false; app.open(); dispatchEvent(event); expect(app.visible).toBeTruthy(); })); it('should close the modal by clicking on its close cross button', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; const compiled = fixture.debugElement.nativeElement; app.open(); app.onOpen.subscribe(() => { compiled.querySelector('button.nsm-dialog-btn-close').click(); expect(app.visible).toBeFalsy(); }); })); it('should dismiss the modal by calling the dismiss method directly', fakeAsync(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; const compiled = fixture.debugElement.nativeElement; spyOn(app, 'dismiss').and.callThrough(); app.open(); tick(); fixture.detectChanges(); const fakeEvent = { target: compiled.querySelector('.overlay') }; app.dismiss(fakeEvent); app.onDismissFinished.subscribe(() => { expect(app.visible).toBeFalsy(); }); tick(app.hideDelay); expect(app.dismiss).toHaveBeenCalledWith(fakeEvent); })); it('should not dismiss the modal if dismissable option is set to false', fakeAsync(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.dismissable = false; const compiled = fixture.debugElement.nativeElement; spyOn(app, 'dismiss').and.callThrough(); app.open(); tick(); fixture.detectChanges(); const fakeEvent = { target: compiled.querySelector('.overlay') }; app.dismiss(fakeEvent); tick(); expect(app.dismiss).toHaveBeenCalledWith(fakeEvent); expect(app.visible).toBeTruthy(); })); it('should hide the modal close cross button', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.closable = false; const compiled = fixture.debugElement.nativeElement; app.onOpen.subscribe(() => { const closeBtn = compiled.querySelector('button.nsm-dialog-btn-close'); expect(closeBtn).toBeNull(); done(); }); app.open(); }); it('should add additional class to the modal', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.addCustomClass('firstClass'); app.addCustomClass('secondClass'); app.onOpen.subscribe((modal: NgxSmartModalComponent) => { expect(modal.customClass.includes('firstClass')).toBeTruthy(); expect(modal.customClass.includes('secondClass')).toBeTruthy(); done(); }); app.open(); }); it('should remove additional class of the modal', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.addCustomClass('firstClass'); app.addCustomClass('secondClass'); app.removeCustomClass('firstClass'); app.onOpen.subscribe((modal: NgxSmartModalComponent) => { expect(modal.customClass.includes('firstClass')).toBeFalsy(); expect(modal.customClass.includes('secondClass')).toBeTruthy(); done(); }); app.open(); }); it('should remove all custom class of the modal', (done) => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.addCustomClass('firstClass'); app.addCustomClass('secondClass'); app.removeCustomClass(); app.onOpen.subscribe((modal: NgxSmartModalComponent) => { expect(modal.customClass.includes('firstClass')).toBeFalsy(); expect(modal.customClass.includes('secondClass')).toBeFalsy(); done(); }); app.open(); }); it('should add data to the modal', fakeAsync(() => { inject([NgxSmartModalService], () => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const obj = { prop1: 'test', prop2: true, prop3: [{ a: 'a', b: 'b' }, { c: 'c', d: 'd' }], prop4: 327652175423 }; app.identifier = 'myModal'; expect(app.hasData()).toBeFalsy(); app.setData(obj, true); tick(); expect(app.hasData()).toBeTruthy(); expect(app.getData().prop1).toBe(obj.prop1); }); })); it('should manage data directly from the modal', fakeAsync(() => { inject([NgxSmartModalService], () => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; const obj = { prop1: 'test', prop2: true, prop3: [{ a: 'a', b: 'b' }, { c: 'c', d: 'd' }], prop4: 327652175423 }; app.identifier = 'myModal'; expect(app.hasData()).toBeFalsy(); app.onDataAdded.subscribe(() => { expect(app.hasData()).toBeTruthy(); expect(app.getData().prop1).toBe(obj.prop1); tick(); }); app.setData(obj, true); app.onDataRemoved.subscribe(() => { expect(app.hasData()).toBeFalsy(); tick(); }); app.removeData(); }); })); it('should open modal when visible setting is true', async(() => { const fixture = TestBed.createComponent(NgxSmartModalComponent); const app = fixture.debugElement.componentInstance; app.identifier = 'myModal'; app.visible = true; expect(app.isVisible()).toBeTruthy(); })); });