blob: bdedae5b5cc76db9488e5b1c5d6d1c5f2e9a1626 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2020 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
import {SimpleChange} from "@angular/core";
import {async, ComponentFixture, TestBed} from "@angular/core/testing";
import {DomSanitizer, SafeResourceUrl} from "@angular/platform-browser";
import {URL_TOKEN} from "../../core/dom";
import {createFileMock, UrlMock} from "../../test";
import {FilePreviewComponent} from "./file-preview.component";
import {FilePreviewModule} from "./file-preview.module";
export class MockSanitizer {
public bypassSecurityTrustResourceUrl(url: string): SafeResourceUrl {
return ("safe" + url) as SafeResourceUrl;
}
}
describe("FilePreviewComponent", () => {
let component: FilePreviewComponent;
let fixture: ComponentFixture<FilePreviewComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{
provide: URL_TOKEN,
useClass: UrlMock
},
{
provide: DomSanitizer,
useClass: MockSanitizer
}
],
imports: [FilePreviewModule]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FilePreviewComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it("should create", () => {
expect(component).toBeTruthy();
});
it("should return a safe resource url for the input file", () => {
component.appFile = null;
let url = component.getSafeUrl();
expect(url).toBeFalsy();
component.appFile = createFileMock("test.pdf");
url = component.getSafeUrl();
expect(component.objectUrl).toEqual(new UrlMock().createObjectURL(component.appFile));
expect(url).toEqual(new MockSanitizer().bypassSecurityTrustResourceUrl(component.objectUrl + "#view=Fit"));
});
it("should call revokeUrl to clear up memory", () => {
spyOn(component.url, "revokeObjectURL").and.callThrough();
component.ngOnDestroy();
expect(component.url.revokeObjectURL).not.toHaveBeenCalled();
component.appFile = createFileMock("test.pdf");
component.getSafeUrl();
component.ngOnDestroy();
expect(component.url.revokeObjectURL).toHaveBeenCalled();
});
it("should get new resource url to display on file input change", () => {
spyOn(component.url, "revokeObjectURL").and.callThrough();
spyOn(component.url, "createObjectURL").and.callThrough();
spyOn(component.sanitizer, "bypassSecurityTrustResourceUrl").and.callThrough();
component.ngOnChanges({});
expect(component.url.revokeObjectURL).not.toHaveBeenCalled();
expect(component.url.createObjectURL).not.toHaveBeenCalled();
expect(component.sanitizer.bypassSecurityTrustResourceUrl).not.toHaveBeenCalled();
component.appFile = createFileMock("test.pdf");
component.objectUrl = "test";
component.ngOnChanges({appFile: new SimpleChange(null, component.appFile, false)});
expect(component.url.revokeObjectURL).toHaveBeenCalled();
expect(component.url.createObjectURL).toHaveBeenCalled();
expect(component.sanitizer.bypassSecurityTrustResourceUrl).toHaveBeenCalled();
const expectedSafeUrl = new MockSanitizer().bypassSecurityTrustResourceUrl(
new UrlMock().createObjectURL(component.appFile) + "#view=Fit");
expect(component.pdfUrl).toEqual(expectedSafeUrl);
});
});