/* Copyright IBM Corp. 2017 */ import { join, normalize } from 'path'; import { concat } from 'rxjs'; import { map, mergeMap, reduce, shareReplay, tap, toArray } from 'rxjs/operators'; import { rxReadTextFile } from '../src/utils/rx.file'; import { rxCopyDependencies, rxResolveDependencies } from './../src/utils/asset.dependencies'; import { rxEmptyDir } from './../src/utils/rx.delete'; import { rxTempDir } from './../src/utils/rx.walk'; import { getAssetBaseDir } from './utils/test.utils'; describe('asset.dependencies', () => { it('should copy dependencies in correct order', () => { const assetBase = getAssetBaseDir(); const pkgTest = join(assetBase, 'test', 'deps', 'package.json'); const rxDstBase = rxTempDir().pipe(shareReplay(1)); const rxDelete = rxDstBase.pipe(mergeMap(dstBase => rxEmptyDir(dstBase))); const rxCopy = rxDstBase.pipe(mergeMap(dstBase => rxCopyDependencies(pkgTest, dstBase))); const rxIds = rxCopy.pipe( mergeMap(rxReadTextFile), map(data => JSON.parse(data)), map(data => data.id), reduce((map: { [key: string]: string }, key: string) => { map[key] = key; return map; }, {}), tap(res => { expect(res).toHaveProperty('asset1_root'); expect(res).toHaveProperty('asset2_root'); expect(res).toHaveProperty('asset3_dep1'); expect(res).toHaveProperty('asset4_dep1'); expect(res).toHaveProperty('asset5_dep2'); }) ); const rxResult = concat(rxDelete, rxIds, rxDelete); return rxResult.toPromise(); }); it('should resolve dependencies in correct order', () => { const assetBase = getAssetBaseDir(); const pkgTest = join(assetBase, 'test', 'deps', 'package.json'); const depRoot = normalize(join(assetBase, 'test', 'deps', 'data')), dep1 = normalize(join(assetBase, 'test', 'deps', 'node_modules', 'dep1', 'data')), dep2 = normalize(join(assetBase, 'test', 'deps', 'node_modules', 'dep2', 'data')); const rxResult = rxResolveDependencies(pkgTest); return rxResult.pipe( toArray(), tap(array => { expect(array).toHaveLength(3); expect(array[0]).toBe(dep2); expect(array[1]).toBe(dep1); expect(array[2]).toBe(depRoot); }) ).toPromise(); }); it('should resolve dependencies in reverse order', () => { const assetBase = getAssetBaseDir(); const pkgTest = join(assetBase, 'test', 'deps', 'package.json'); const depRoot = normalize(join(assetBase, 'test', 'deps', 'data')), dep1 = normalize(join(assetBase, 'test', 'deps', 'node_modules', 'dep1', 'data')), dep2 = normalize(join(assetBase, 'test', 'deps', 'node_modules', 'dep2', 'data')); const rxResult = rxResolveDependencies(pkgTest, true); return rxResult.pipe( toArray(), tap(array => { expect(array).toHaveLength(3); expect(array[2]).toBe(dep2); expect(array[1]).toBe(dep1); expect(array[0]).toBe(depRoot); })) .toPromise(); }); });