mirror of https://github.com/ghostfolio/ghostfolio
3 changed files with 7 additions and 86 deletions
@ -1,83 +0,0 @@ |
|||
import { ComponentFixture, TestBed } from '@angular/core/testing'; |
|||
import { DeviceDetectorService } from 'ngx-device-detector'; |
|||
|
|||
import { GfPageTabsComponent } from './page-tabs.component'; |
|||
|
|||
jest.mock('@ionic/angular/standalone', () => { |
|||
const angularCore = |
|||
jest.requireActual<typeof import('@angular/core')>('@angular/core'); |
|||
|
|||
class IonIconMockComponent { |
|||
public readonly name = angularCore.input<string>(); |
|||
public readonly size = angularCore.input<string>(); |
|||
} |
|||
|
|||
angularCore.Component({ |
|||
selector: 'ion-icon', |
|||
standalone: true, |
|||
template: '' |
|||
})(IonIconMockComponent); |
|||
|
|||
return { IonIcon: IonIconMockComponent }; |
|||
}); |
|||
|
|||
describe('GfPageTabsComponent', () => { |
|||
let fixture: ComponentFixture<GfPageTabsComponent>; |
|||
|
|||
beforeEach(async () => { |
|||
await TestBed.configureTestingModule({ |
|||
imports: [GfPageTabsComponent], |
|||
providers: [ |
|||
{ |
|||
provide: DeviceDetectorService, |
|||
useValue: { |
|||
getDeviceInfo: () => ({ deviceType: 'desktop' }) |
|||
} |
|||
} |
|||
] |
|||
}).compileComponents(); |
|||
|
|||
fixture = TestBed.createComponent(GfPageTabsComponent); |
|||
}); |
|||
|
|||
it('renders labels in a constrained Bootstrap truncation layout', async () => { |
|||
fixture.componentRef.setInput('tabs', [ |
|||
{ |
|||
iconName: 'open-outline', |
|||
label: 'A very long tab label that should be truncated', |
|||
onClick: jest.fn() |
|||
} |
|||
]); |
|||
|
|||
fixture.detectChanges(); |
|||
await fixture.whenStable(); |
|||
|
|||
const nativeElement = fixture.nativeElement as HTMLElement; |
|||
const tabContent = nativeElement.querySelector<HTMLElement>( |
|||
'.mdc-tab__text-label > .d-flex' |
|||
); |
|||
|
|||
expect(tabContent).not.toBeNull(); |
|||
|
|||
const tab = tabContent.closest<HTMLElement>('a, button'); |
|||
const icon = tabContent.querySelector<HTMLElement>('ion-icon'); |
|||
const label = tabContent.querySelector<HTMLElement>('.text-truncate'); |
|||
|
|||
expect(tab).not.toBeNull(); |
|||
expect(icon).not.toBeNull(); |
|||
expect(label).not.toBeNull(); |
|||
|
|||
expect(tab.classList).toContain('justify-content-start'); |
|||
expect(tab.classList).toContain('text-left'); |
|||
expect(tabContent.classList).toContain('justify-content-start'); |
|||
expect(tabContent.classList).toContain('text-left'); |
|||
expect(tabContent.classList).toContain('w-100'); |
|||
expect(icon.classList).toContain('flex-shrink-0'); |
|||
expect(label.classList).toContain('col'); |
|||
expect(label.classList).toContain('overflow-hidden'); |
|||
expect(label.classList).toContain('p-0'); |
|||
expect(label.textContent).toBe( |
|||
'A very long tab label that should be truncated' |
|||
); |
|||
}); |
|||
}); |
|||
Loading…
Reference in new issue