mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-01-10 21:34:20 -06:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { TestBed } from '@angular/core/testing'
|
|
import { BrowserModule, DomSanitizer } from '@angular/platform-browser'
|
|
import { SafeUrlPipe } from './safeurl.pipe'
|
|
|
|
describe('SafeUrlPipe', () => {
|
|
let pipe: SafeUrlPipe
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
providers: [SafeUrlPipe],
|
|
imports: [BrowserModule],
|
|
})
|
|
pipe = TestBed.inject(SafeUrlPipe)
|
|
})
|
|
|
|
it('should trust only same-origin http/https urls', () => {
|
|
const origin = window.location.origin
|
|
const url = `${origin}/some/path`
|
|
const domSanitizer = TestBed.inject(DomSanitizer)
|
|
const sanitizerSpy = jest.spyOn(
|
|
domSanitizer,
|
|
'bypassSecurityTrustResourceUrl'
|
|
)
|
|
|
|
const safeResourceUrl = pipe.transform(url)
|
|
expect(safeResourceUrl).not.toBeNull()
|
|
expect(sanitizerSpy).toHaveBeenCalledWith(url)
|
|
})
|
|
|
|
it('should return null for null or unsafe urls', () => {
|
|
const sanitizerSpy = jest.spyOn(
|
|
TestBed.inject(DomSanitizer),
|
|
'bypassSecurityTrustResourceUrl'
|
|
)
|
|
|
|
expect(pipe.transform(null)).toBeTruthy()
|
|
expect(sanitizerSpy).toHaveBeenCalledWith('')
|
|
expect(pipe.transform('javascript:alert(1)')).toBeTruthy()
|
|
expect(sanitizerSpy).toHaveBeenCalledWith('')
|
|
const otherOrigin =
|
|
window.location.origin === 'https://example.com'
|
|
? 'https://evil.com'
|
|
: 'https://example.com'
|
|
expect(pipe.transform(`${otherOrigin}/file`)).toBeTruthy()
|
|
expect(sanitizerSpy).toHaveBeenCalledWith('')
|
|
})
|
|
|
|
it('should return null for malformed urls', () => {
|
|
const sanitizerSpy = jest.spyOn(
|
|
TestBed.inject(DomSanitizer),
|
|
'bypassSecurityTrustResourceUrl'
|
|
)
|
|
|
|
expect(pipe.transform('http://[invalid-url')).toBeTruthy()
|
|
expect(sanitizerSpy).toHaveBeenCalledWith('')
|
|
})
|
|
})
|