import { ComponentFixture, TestBed } from '@angular/core/testing' import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { SuggestionsDropdownComponent } from './suggestions-dropdown.component' describe('SuggestionsDropdownComponent', () => { let component: SuggestionsDropdownComponent let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ imports: [ NgbDropdownModule, NgxBootstrapIconsModule.pick(allIcons), SuggestionsDropdownComponent, ], providers: [], }) fixture = TestBed.createComponent(SuggestionsDropdownComponent) component = fixture.componentInstance fixture.detectChanges() }) it('should calculate totalSuggestions', () => { fixture.componentRef.setInput('suggestions', { suggested_correspondents: ['John Doe'], suggested_tags: ['Tag1', 'Tag2'], suggested_document_types: ['Type1'], }) expect(component.totalSuggestions).toBe(4) }) it('should show when a completed request returned no suggestions', () => { fixture.componentRef.setInput('suggestions', { correspondents: [], tags: [], document_types: [], storage_paths: [], dates: [], }) fixture.detectChanges() expect(component.noSuggestions).toBeTruthy() expect(fixture.nativeElement.textContent).toContain('No suggestions') }) it('should not show the empty state before a request or with suggestions', () => { expect(component.noSuggestions).toBeFalsy() fixture.componentRef.setInput('suggestions', { correspondents: [], tags: [42], document_types: [], storage_paths: [], dates: [], }) expect(component.noSuggestions).toBeFalsy() }) it('should emit getSuggestions when clickSuggest is called and suggestions are null', () => { jest.spyOn(component.getSuggestions, 'emit') fixture.componentRef.setInput('suggestions', null) component.clickSuggest() expect(component.getSuggestions.emit).toHaveBeenCalled() }) it('should not emit getSuggestions when disabled', () => { jest.spyOn(component.getSuggestions, 'emit') fixture.componentRef.setInput('disabled', true) fixture.componentRef.setInput('suggestions', null) fixture.detectChanges() component.clickSuggest() expect(component.getSuggestions.emit).not.toHaveBeenCalled() expect(fixture.nativeElement.querySelector('button').disabled).toBeTruthy() }) it('should toggle dropdown when clickSuggest is called and suggestions are not null', () => { fixture.componentRef.setInput('aiEnabled', true) fixture.detectChanges() fixture.componentRef.setInput('suggestions', { suggested_correspondents: [], suggested_tags: [], suggested_document_types: [], }) component.clickSuggest() expect(component.dropdown.open).toBeTruthy() expect(fixture.nativeElement.textContent).toContain('No novel suggestions') }) })