-import {
- ComponentFixture,
- fakeAsync,
- TestBed,
- tick,
-} from '@angular/core/testing'
+import { ComponentFixture, TestBed } from '@angular/core/testing'
import {
HttpClient,
fixture = TestBed.createComponent(PreviewPopupComponent)
component = fixture.componentInstance
component.document = { ...doc }
+ jest.useFakeTimers()
fixture.detectChanges()
})
expect(component.previewText).toEqual('Preview text')
})
- it('should show preview on mouseover after delay to preload content', fakeAsync(() => {
+ it('should show preview on mouseover after delay to preload content', () => {
component.mouseEnterPreview()
expect(component.popover.isOpen()).toBeTruthy()
- tick(600)
+ jest.advanceTimersByTime(600)
+ component.close()
+ jest.advanceTimersByTime(600)
+ })
+
+ it('should not show preview on mouseover if mouse no longer on preview', () => {
+ component.mouseEnterPreview()
+ jest.advanceTimersByTime(100)
+ component.mouseLeavePreview()
+ jest.advanceTimersByTime(600)
+ expect(component.popover.isOpen()).toBeFalsy()
+ })
+
+ it('should not close preview on mouseleave if mouse back on preview', () => {
component.close()
+ component.mouseEnterPreview()
+ jest.advanceTimersByTime(300)
+ expect(component.popover.isOpen()).toBeTruthy()
+ })
+ it('should support immediate close on mouseleave', () => {
component.mouseEnterPreview()
- tick(100)
+ jest.advanceTimersByTime(600)
+ expect(component.popover.isOpen()).toBeTruthy()
component.mouseLeavePreview()
- tick(600)
+ component.close(true)
+ jest.advanceTimersByTime(1)
expect(component.popover.isOpen()).toBeFalsy()
- }))
+ })
})
@ViewChild('popover') popover: NgbPopover
- mouseOnPreview: boolean
+ mouseOnPreview: boolean = false
popoverClass: string = 'shadow popover-preview'
// show popover
this.popoverClass = this.popoverClass.replace('pe-none opacity-0', '')
} else {
- this.popover.close()
+ this.popover.close(true)
}
}, 600)
}
this.mouseOnPreview = false
}
- public close() {
- this.popover.close(false)
+ public close(immediate: boolean = false) {
+ setTimeout(
+ () => {
+ if (!this.mouseOnPreview) this.popover.close()
+ },
+ immediate ? 0 : 300
+ )
}
}