UNPKG

ohayolibs

Version:

Ohayo is a set of essential modules for ohayojp.

224 lines (212 loc) 5.22 kB
import { HttpClient } from '@angular/common/http'; import { TestBed } from '@angular/core/testing'; import { LazyService } from '@ohayo/util'; import * as fs from 'file-saver'; import { Observable, of, throwError } from 'rxjs'; import { ZipModule } from './zip.module'; import { ZipService } from './zip.service'; let isErrorRequest = false; let isClassZIP = false; let isErrorGenZip = false; class MockLazyService { load(): Promise<void> { (window as any).JSZip = isClassZIP ? class JSZip { file(): void { } generateAsync(): Promise<void> { return isErrorGenZip ? Promise.reject('') : Promise.resolve(); } } : DEFAULTMOCKJSZIP; return Promise.resolve(); } } const DEFAULTMOCKJSZIP = { loadAsync: () => { return Promise.resolve(); }, write: () => { }, }; class MockHttpClient { request(): Observable<null> { return isErrorRequest ? throwError(null) : of(null); } } describe('components: zip', () => { let srv: ZipService; function genModule(): void { TestBed.configureTestingModule({ imports: [ZipModule], providers: [ { provide: HttpClient, useClass: MockHttpClient }, { provide: LazyService, useClass: MockLazyService }, ], }); srv = TestBed.inject<ZipService>(ZipService); } beforeEach(() => { isErrorRequest = false; isClassZIP = false; isErrorGenZip = false; }); describe('#read', () => { it('should be load zip via url', (done: () => void) => { genModule(); srv.read('/1.zip').then( () => { expect(true).toBe(true); done(); }, () => { expect(false).toBe(true); done(); }, ); }); it('should be reject when request error via url', (done: () => void) => { isErrorRequest = true; genModule(); srv.read('/1.zip').then( () => { expect(false).toBe(true); done(); }, () => { expect(true).toBe(true); done(); }, ); }); it('should be load zip via file object', (done: () => void) => { genModule(); srv.read(new File([], '1.zip')).then( () => { expect(true).toBe(true); done(); }, () => { expect(false).toBe(true); done(); }, ); }); }); it('#create', (done: () => void) => { isClassZIP = true; genModule(); srv.create().then( () => { expect(true).toBe(true); done(); }, () => { expect(false).toBe(true); done(); }, ); }); describe('#pushUrl', () => { let zip: any; beforeEach((done: () => void) => { isClassZIP = true; genModule(); srv.create().then(res => { zip = res; done(); }); }); it('should be save zip file', (done: () => void) => { srv.pushUrl(zip, '1.zip', '1.zip').then( () => { expect(true).toBe(true); done(); }, () => { expect(false).toBe(true); done(); }, ); }); it('should be reject when bad request', (done: () => void) => { isErrorRequest = true; srv.pushUrl(zip, '1.zip', '1.zip').then( () => { expect(false).toBe(true); done(); }, () => { expect(true).toBe(true); done(); }, ); }); }); describe('#save', () => { let zip: any; beforeEach((done: () => void) => { isClassZIP = true; genModule(); srv.create().then(res => { zip = res; done(); }); }); it('should be save zip file', (done: () => void) => { spyOn(fs, 'saveAs'); srv.save(zip, { filename: '123.zip' }).then( () => { // tslint:disable-next-line: deprecation expect(fs.saveAs).toHaveBeenCalled(); expect(true).toBe(true); done(); }, () => { expect(false).toBe(true); done(); }, ); }); it('should be call callback', (done: () => void) => { spyOn(fs, 'saveAs'); let count = 0; srv .save(zip, { callback: () => ++count, }) .then( () => { expect(count).toBe(1); // tslint:disable-next-line: deprecation expect(fs.saveAs).toHaveBeenCalled(); done(); }, () => { expect(false).toBe(true); done(); }, ); }); it('should be reject when generateAsync return error', (done: () => void) => { isErrorGenZip = true; spyOn(fs, 'saveAs'); srv.save(zip).then( () => { expect(false).toBe(true); done(); }, () => { // tslint:disable-next-line: deprecation expect(fs.saveAs).not.toHaveBeenCalled(); expect(true).toBe(true); done(); }, ); }); it('should be throw error when invalid zip', () => { zip = null; expect(() => { srv.save(zip); }).toThrowError(); }); }); });