import { ComponentFixture, TestBed } from '@angular/core/testing'; import { Component } from '@angular/core'; import { By } from '@angular/platform-browser'; import { DropdownComponent, DropdownTriggerDirective, DropdownMenuComponent, DropdownItemComponent, } from './dropdown.component'; @Component({ standalone: true, imports: [ DropdownComponent, DropdownTriggerDirective, DropdownMenuComponent, DropdownItemComponent, ], template: ` Item 1 Item 2 (disabled) `, }) class TestHostComponent { align: 'left' | 'right' | 'center' = 'left'; lastClicked = ''; } describe('DropdownComponent', () => { let component: TestHostComponent; let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ imports: [TestHostComponent], }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(TestHostComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('menu is closed by default', () => { const menu = fixture.debugElement.query(By.css('.mv-dropdown-menu')); expect(menu.nativeElement.className).not.toContain('mv-dropdown-menu--open'); }); it('opens menu when trigger is clicked', () => { const trigger = fixture.debugElement.query(By.css('[data-testid="trigger"]')).nativeElement; trigger.click(); fixture.detectChanges(); const menu = fixture.debugElement.query(By.css('.mv-dropdown-menu')); expect(menu.nativeElement.className).toContain('mv-dropdown-menu--open'); }); it('closes menu when trigger is clicked again', () => { const trigger = fixture.debugElement.query(By.css('[data-testid="trigger"]')).nativeElement; trigger.click(); fixture.detectChanges(); trigger.click(); fixture.detectChanges(); const menu = fixture.debugElement.query(By.css('.mv-dropdown-menu')); expect(menu.nativeElement.className).not.toContain('mv-dropdown-menu--open'); }); it('closes menu and emits itemClick when an item is clicked', () => { const trigger = fixture.debugElement.query(By.css('[data-testid="trigger"]')).nativeElement; trigger.click(); fixture.detectChanges(); // DropdownItemComponent renders a