@@ -2,7 +2,7 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
22import { fakeAsync , flush } from '@angular/core/testing' ;
33import { By } from '@angular/platform-browser' ;
44import { IconLibraryTestingModule , IconType } from '@hypertrace/assets-library' ;
5- import { NavigationService } from '@hypertrace/common' ;
5+ import { MemoizeModule , NavigationService } from '@hypertrace/common' ;
66import { IconComponent } from '@hypertrace/components' ;
77import { createHostFactory , mockProvider , SpectatorHost } from '@ngneat/spectator/jest' ;
88import { MockComponent } from 'ng-mocks' ;
@@ -15,7 +15,7 @@ import { SelectModule } from './select.module';
1515describe ( 'Select Component' , ( ) => {
1616 const hostFactory = createHostFactory < SelectComponent < string > > ( {
1717 component : SelectComponent ,
18- imports : [ SelectModule , HttpClientTestingModule , IconLibraryTestingModule ] ,
18+ imports : [ SelectModule , HttpClientTestingModule , IconLibraryTestingModule , MemoizeModule ] ,
1919 declareComponent : false ,
2020 declarations : [ MockComponent ( IconComponent ) ] ,
2121 providers : [
@@ -282,4 +282,44 @@ describe('Select Component', () => {
282282 expect ( onChange ) . toHaveBeenCalledWith ( 'none-id' ) ;
283283 flush ( ) ;
284284 } ) ) ;
285+
286+ test ( 'should disable select options as expected' , fakeAsync ( ( ) => {
287+ const onChange = jest . fn ( ) ;
288+
289+ spectator = hostFactory (
290+ `
291+ <ht-select (selectedChange)="onChange($event)">
292+ <ht-select-option *ngFor="let option of options" [label]="option.label" [value]="option.value" [disabled]="option.disabled"></ht-select-option>
293+ </ht-select>` ,
294+ {
295+ hostProps : {
296+ options : [
297+ { label : 'first' , value : 'first-value' } ,
298+ { label : 'second' , value : 'second-value' , disabled : true } ,
299+ {
300+ label : 'third' ,
301+ value : 'third-value' ,
302+ selectedLabel : 'Third Value!!!' ,
303+ icon : 'test-icon' ,
304+ iconColor : 'red'
305+ }
306+ ] ,
307+ onChange : onChange
308+ }
309+ }
310+ ) ;
311+
312+ spectator . tick ( ) ;
313+ spectator . click ( '.trigger-content' ) ;
314+
315+ const optionElements = spectator . queryAll ( '.select-option' , { root : true } ) ;
316+ expect ( optionElements . length ) . toBe ( 3 ) ;
317+ expect ( optionElements [ 0 ] ) . not . toHaveClass ( 'disabled' ) ;
318+ expect ( optionElements [ 1 ] ) . toHaveClass ( 'disabled' ) ;
319+ expect ( optionElements [ 2 ] ) . not . toHaveClass ( 'disabled' ) ;
320+ spectator . click ( optionElements [ 1 ] ) ;
321+
322+ expect ( onChange ) . not . toHaveBeenCalled ( ) ;
323+ flush ( ) ;
324+ } ) ) ;
285325} ) ;
0 commit comments