From 7416534ab8da6542ee26cb2f65fc7ae060ceb6a0 Mon Sep 17 00:00:00 2001 From: alecmerdler Date: Sat, 11 Mar 2017 17:45:36 -0800 Subject: [PATCH] better mocking of FileReader and events --- .../datafile/datafile.service.impl.spec.ts | 18 ++++++++++- .../datafile/datafile.service.impl.ts | 6 +++- .../dockerfile.service.impl.spec.ts | 31 ++++++++----------- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/static/js/services/datafile/datafile.service.impl.spec.ts b/static/js/services/datafile/datafile.service.impl.spec.ts index b329f7555..7f828c750 100644 --- a/static/js/services/datafile/datafile.service.impl.spec.ts +++ b/static/js/services/datafile/datafile.service.impl.spec.ts @@ -1,19 +1,35 @@ import { DataFileServiceImpl } from './datafile.service.impl'; +import { Mock } from 'ts-mocks'; describe("DataFileServiceImpl", () => { var dataFileServiceImpl: DataFileServiceImpl; + var fileReaderMock: Mock; + var fileReader: FileReader; beforeEach(() => { - dataFileServiceImpl = new DataFileServiceImpl(); + fileReaderMock = new Mock(); + fileReader = fileReaderMock.Object; + dataFileServiceImpl = new DataFileServiceImpl(() => fileReader); }); describe("blobToString", () => { + beforeEach(() => { + fileReaderMock.setup(mock => mock.readAsText).is((blob: Blob) => { + fileReaderMock.Object.onload({target: {result: blob.toString()}}); + }); + }); + }); describe("arrayToString", () => { + beforeEach(() => { + fileReaderMock.setup(mock => mock.readAsArrayBuffer).is((blob: Blob) => { + fileReaderMock.Object.onload({target: {result: blob.toString()}}); + }); + }); }); describe("readDataArrayAsPossibleArchive", () => { diff --git a/static/js/services/datafile/datafile.service.impl.ts b/static/js/services/datafile/datafile.service.impl.ts index 93bbf14d6..ed0e50fec 100644 --- a/static/js/services/datafile/datafile.service.impl.ts +++ b/static/js/services/datafile/datafile.service.impl.ts @@ -8,9 +8,13 @@ declare const Untar: (uint8Array: Uint8Array) => void; @Injectable(DataFileService.name) export class DataFileServiceImpl implements DataFileService { + constructor(private fileReaderFactory: () => FileReader) { + + } + public blobToString(blob: any, callback: (result: string) => void): void { var reader: FileReader = new FileReader(); - reader.onload = (event: Event) => callback(reader.result); + reader.onload = (event: Event) => callback(event.target['result']); reader.readAsText(blob); } diff --git a/static/js/services/dockerfile/dockerfile.service.impl.spec.ts b/static/js/services/dockerfile/dockerfile.service.impl.spec.ts index bd6df347d..01eefe3e2 100644 --- a/static/js/services/dockerfile/dockerfile.service.impl.spec.ts +++ b/static/js/services/dockerfile/dockerfile.service.impl.spec.ts @@ -9,51 +9,46 @@ describe("DockerfileServiceImpl", () => { var dataFileServiceMock: Mock; var dataFileService: DataFileService; var configMock: any; - var fileReaderMock: FileReader; + var fileReaderMock: Mock; beforeEach(() => { dataFileServiceMock = new Mock(); dataFileService = dataFileServiceMock.Object; configMock = jasmine.createSpyObj('configMock', ['getDomain']); - fileReaderMock = new FileReader(); - dockerfileServiceImpl = new DockerfileServiceImpl(dataFileService, configMock, () => fileReaderMock); + fileReaderMock = new Mock(); + dockerfileServiceImpl = new DockerfileServiceImpl(dataFileService, configMock, () => fileReaderMock.Object); }); describe("getDockerfile", () => { var file: any; var invalidArchiveFile: any[]; var validArchiveFile: any[]; - var readAsFileBufferSpy: Spy; var forDataSpy: Spy; beforeEach(() => { + file = "FROM quay.io/coreos/nginx:latest"; + validArchiveFile = [{name: 'Dockerfile', toBlob: jasmine.createSpy('toBlobSpy').and.returnValue(file)}]; + invalidArchiveFile = [{name: 'main.exe', toBlob: jasmine.createSpy('toBlobSpy').and.returnValue("")}]; + dataFileServiceMock.setup(mock => mock.readDataArrayAsPossibleArchive).is((buf, success, failure) => { failure([]); }); - dataFileServiceMock.setup(mock => mock.arrayToString).is((buf, callback) => { - callback(""); - }); + dataFileServiceMock.setup(mock => mock.arrayToString).is((buf, callback) => callback("")); - dataFileServiceMock.setup(mock => mock.blobToString).is((blob, callback) => { - callback(blob.toString()); - }); + dataFileServiceMock.setup(mock => mock.blobToString).is((blob, callback) => callback(blob.toString())); forDataSpy = spyOn(DockerfileInfoImpl, "forData").and.returnValue(new DockerfileInfoImpl(file, configMock)); - readAsFileBufferSpy = spyOn(fileReaderMock, "readAsArrayBuffer").and.callFake(() => { - var event: any = {target: {result: file}}; - fileReaderMock.onload(event); - }); - file = "FROM quay.io/coreos/nginx:latest"; - validArchiveFile = [{name: 'Dockerfile', toBlob: jasmine.createSpy('toBlobSpy').and.returnValue(file)}]; - invalidArchiveFile = [{name: 'main.exe', toBlob: jasmine.createSpy('toBlobSpy').and.returnValue("")}]; + fileReaderMock.setup(mock => mock.readAsArrayBuffer).is((blob: Blob) => { + fileReaderMock.Object.onload({target: {result: file}}); + }); }); it("calls datafile service to read given file as possible archive file", (done) => { dockerfileServiceImpl.getDockerfile(file) .then((dockerfile: DockerfileInfoImpl) => { - expect(readAsFileBufferSpy.calls.argsFor(0)[0]).toEqual(file); + expect((fileReaderMock.Object.readAsArrayBuffer).calls.argsFor(0)[0]).toEqual(file); expect(dataFileService.readDataArrayAsPossibleArchive).toHaveBeenCalled(); done(); })