mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-11-03 21:39:22 +00:00
62 lines
2.4 KiB
TypeScript
62 lines
2.4 KiB
TypeScript
import { ComponentFixture, TestBed } from '@angular/core/testing'
|
|
import { BootstrapIconComponent } from './bootstrap-icon.component'
|
|
|
|
describe('BootstrapIconComponent', () => {
|
|
let fixture: ComponentFixture<BootstrapIconComponent>
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [BootstrapIconComponent],
|
|
})
|
|
fixture = TestBed.createComponent(BootstrapIconComponent)
|
|
})
|
|
|
|
it('should render the named icon as inline svg', () => {
|
|
fixture.componentRef.setInput('name', 'arrow-down-up')
|
|
fixture.detectChanges()
|
|
const svg: SVGElement = fixture.nativeElement.querySelector('svg')
|
|
expect(svg.classList).toContain('bi-arrow-down-up')
|
|
expect(svg.getAttribute('width')).toEqual('16')
|
|
expect(svg.getAttribute('height')).toEqual('16')
|
|
})
|
|
|
|
it('should apply width and height', () => {
|
|
fixture.componentRef.setInput('name', 'x-lg')
|
|
fixture.componentRef.setInput('width', '1.2em')
|
|
fixture.componentRef.setInput('height', 2)
|
|
fixture.detectChanges()
|
|
const svg: SVGElement = fixture.nativeElement.querySelector('svg')
|
|
expect(svg.getAttribute('width')).toEqual('1.2em')
|
|
expect(svg.getAttribute('height')).toEqual('2')
|
|
})
|
|
|
|
it('should not allow width or height to inject attributes', () => {
|
|
fixture.componentRef.setInput('name', 'x-lg')
|
|
fixture.componentRef.setInput('width', '1" onload="alert(1)')
|
|
fixture.componentRef.setInput('height', '1" onclick="alert(1)')
|
|
fixture.detectChanges()
|
|
const svg: SVGElement = fixture.nativeElement.querySelector('svg')
|
|
expect(svg.hasAttribute('onload')).toBe(false)
|
|
expect(svg.hasAttribute('onclick')).toBe(false)
|
|
expect(svg.getAttribute('width')).toEqual('1" onload="alert(1)')
|
|
})
|
|
|
|
it('should update when the name changes', () => {
|
|
fixture.componentRef.setInput('name', 'x-lg')
|
|
fixture.detectChanges()
|
|
fixture.componentRef.setInput('name', 'sliders2-vertical')
|
|
fixture.detectChanges()
|
|
expect(fixture.nativeElement.querySelector('svg').classList).toContain(
|
|
'bi-sliders2-vertical'
|
|
)
|
|
})
|
|
|
|
it('should render nothing and warn for an unregistered icon', () => {
|
|
const warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {})
|
|
fixture.componentRef.setInput('name', 'not-an-icon')
|
|
fixture.detectChanges()
|
|
expect(fixture.nativeElement.innerHTML).toEqual('')
|
|
expect(warnSpy).toHaveBeenCalledWith('Icon not found: not-an-icon')
|
|
})
|
|
})
|