import { TestBed, ComponentFixture } from '@angular/core/testing'; import { Component, NgModule } from '@angular/core'; import { LuxTooltipDirective } from './tooltip.directive'; import { TooltipService } from './tooltip.service'; import { TooltipComponent } from './tooltip.component'; @Component({ selector: 'lux-test-cmp', template: '' }) class TestComponent { constructor() {} getTooltipTestComponent(): TooltipTestComponent { return TooltipTestComponent; } } @Component({ template: ` Tooltip Component ` }) class TooltipTestComponent { constructor() { } } function createTestComponent(html: string): ComponentFixture { const fixture = TestBed.overrideComponent(TestComponent, { set: { template: html }}).createComponent(TestComponent); fixture.detectChanges(); return fixture as ComponentFixture; } @NgModule({ declarations: [ LuxTooltipDirective, TestComponent, TooltipComponent, TooltipTestComponent ], entryComponents: [TooltipComponent, TooltipTestComponent], providers: [ TooltipService ] }) class TooltipTestModule {} describe('TooltipDirective', () => { let tooltip: Element; beforeEach(() => { TestBed.configureTestingModule({ imports: [TooltipTestModule] }) .compileComponents(); }); beforeEach(() => { if (tooltip) { tooltip.remove(); } }); it('it should be created component with tooltip declarative', () => { const fixture = createTestComponent(''); expect(fixture.componentInstance).toBeTruthy(); }); it('it should display no tooltip (label not defined)', () => { const fixture = createTestComponent(''); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeNull(); }); it('it should display no default tooltip', () => { const fixture = createTestComponent(''); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeNull(); }); it('it should display default tooltip with top placement like default value', () => { const fixture = createTestComponent(''); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain('A'); expect(tooltip.classList).toContain(`lux-tooltip-top`); }); it('it should display tooltip with string content', () => { const fixture = createTestComponent(''); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain('Custom Tooltip'); }); it('it should display tooltip in the left', () => { const placement = 'Left'; const content = 'Custom Tooltip'; const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip in the right', () => { const placement = 'Right'; const content = 'Custom Tooltip'; const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip in the top', () => { const placement = 'Top'; const content = 'Custom Tooltip'; const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip in the bottom', () => { const placement = 'Bottom'; const content = 'Custom Tooltip'; const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip from TemplateRef', () => { const content = 'Tooltip TemplateRef'; const fixture = createTestComponent(` ${content} `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-template`); }); it('it should display tooltip from TemplateRef with Left placement', () => { const placement = 'Left'; const content = 'Tooltip TemplateRef'; const fixture = createTestComponent(` ${content} `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-template`); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip from TemplateRef with Right placement', () => { const placement = 'Right'; const content = 'Tooltip TemplateRef'; const fixture = createTestComponent(` ${content} `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-template`); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip from TemplateRef with Bottom placement', () => { const placement = 'Bottom'; const content = 'Tooltip TemplateRef'; const fixture = createTestComponent(` ${content} `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-template`); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip from TemplateRef with Top placement', () => { const placement = 'Top'; const content = 'Tooltip TemplateRef'; const fixture = createTestComponent(` ${content} `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.innerHTML).toContain(content); expect(tooltip.classList).toContain(`lux-template`); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); }); it('it should display tooltip from Component', () => { const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-top`); expect(tooltip.innerHTML).toContain('Tooltip Component'); }); it('it should display tooltip from Component', () => { const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-top`); expect(tooltip.innerHTML).toContain('Tooltip Component'); }); it('it should display tooltip from Component and close with mouseleave event', () => { const fixture = createTestComponent(``); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-top`); expect(tooltip.innerHTML).toContain('Tooltip Component'); const evtLeave = document.createEvent('Event'); evtLeave.initEvent('mouseleave', true, false); button.dispatchEvent(evtLeave); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeNull(); }); it('it should display tooltip from Component with left placement', () => { const placement = 'Left'; const fixture = createTestComponent(` `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); expect(tooltip.innerHTML).toContain('Tooltip Component'); }); it('it should display tooltip from Component with right placement', () => { const placement = 'Right'; const fixture = createTestComponent(` `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); expect(tooltip.innerHTML).toContain('Tooltip Component'); }); it('it should display tooltip from Component with bottom placement', () => { const placement = 'Bottom'; const fixture = createTestComponent(` `); const button = fixture.debugElement.nativeElement.querySelector('button'); const evt = document.createEvent('Event'); evt.initEvent('mouseenter', true, false); button.dispatchEvent(evt); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeDefined(); expect(tooltip.classList).toContain(`lux-tooltip-${placement.toLowerCase()}`); expect(tooltip.innerHTML).toContain('Tooltip Component'); const evtLeave = document.createEvent('Event'); evtLeave.initEvent('mouseleave', true, false); button.dispatchEvent(evtLeave); fixture.detectChanges(); tooltip = fixture.nativeElement.parentElement.querySelector('span.lux-tooltip'); expect(tooltip).toBeNull(); }); });