import { tmpdir } from 'os'; import { join } from 'path'; import { concat, empty, merge } from 'rxjs'; import { mergeMap, toArray } from 'rxjs/operators'; import { v4 } from 'uuid'; import { CreateComponentsCommand } from '../src/commands/create.components.command'; import { Options } from '../src/options'; import { rxCopyDir } from '../src/utils/rx.copy'; import { rxDeleteDir } from '../src/utils/rx.delete'; import { expectFileExists } from './utils/expect.utils'; import { getAssetBaseDir } from './utils/test.utils'; describe('create.components.command', () => { it('should work with empty types', () => { const dir = tmpdir(); const name = v4(); const dstBase = join(dir, name); const dstSrc = dstBase; const dstData = join(dstBase, 'data'); const assetBase = getAssetBaseDir(); const srcSrc = join(assetBase, 'test', 'empty-project'); const srcData = join(assetBase, 'test', 'empty-types'); // copy the data const rxData = merge(rxCopyDir(srcSrc, dstSrc), rxCopyDir(srcData, dstData)); const rxDelete = rxDeleteDir(dstBase); const opts: Options = { command: CreateComponentsCommand.COMMAND, commandType: CreateComponentsCommand.TYPE, src: join(dstSrc, 'src'), modules: true, data: dstData, pkgDir: dstSrc, verbose: true, override: true, allArgs: [] }; const cmd = new CreateComponentsCommand(opts); const rxCmd = cmd.process(); // setup and teardown const rxSetup = concat(rxDelete, rxData); const rxTeardown = rxDelete; // command const rxTest = rxCmd.pipe( mergeMap(expectFileExists), toArray() ); // execute the command const rxTotal = concat(rxSetup, rxTest, rxTeardown); return rxTotal.toPromise(); }); it('should work with ryans group elements', () => { const dir = tmpdir(); const name = 'ryan'; const dstBase = join(dir, name); const dstSrc = dstBase; const dstData = join(dstBase, 'data'); const assetBase = getAssetBaseDir(); const srcSrc = join(assetBase, 'test', 'empty-project'); const srcData = join(assetBase, 'test', 'ryan-group'); // copy the data const rxData = merge(rxCopyDir(srcSrc, dstSrc), rxCopyDir(srcData, dstData)); const rxDelete = empty(); // rxDeleteDir(dstBase); const opts: Options = { command: CreateComponentsCommand.COMMAND, commandType: CreateComponentsCommand.TYPE, src: join(dstSrc, 'src'), data: dstData, pkgDir: dstSrc, verbose: true, override: true, allArgs: [] }; const cmd = new CreateComponentsCommand(opts); const rxCmd = cmd.process(); // setup and teardown const rxSetup = concat(rxDelete, rxData); const rxTeardown = rxDelete; // command const rxTest = rxCmd.pipe( mergeMap(expectFileExists), toArray() ); // execute the command const rxTotal = concat(rxSetup, rxTest, rxTeardown); return rxTotal.toPromise(); }); fit('should work with group elements limited to a single type', () => { const dir = tmpdir(); const name = 'test'; //v4(); const dstBase = join(dir, name); const dstSrc = dstBase; const dstData = join(dstBase, 'data'); const assetBase = getAssetBaseDir(); const srcSrc = join(assetBase, 'test', 'empty-project'); const srcData = join(assetBase, 'test', 'group-elements'); // copy the data const rxData = merge(rxCopyDir(srcSrc, dstSrc), rxCopyDir(srcData, dstData)); const rxDelete = empty(); // rxDeleteDir(dstBase); const opts: Options = { command: CreateComponentsCommand.COMMAND, commandType: CreateComponentsCommand.TYPE, src: join(dstSrc, 'src'), data: dstData, pkgDir: dstSrc, verbose: true, override: true, include: 'Family', allArgs: [] }; const cmd = new CreateComponentsCommand(opts); const rxCmd = cmd.process(); // setup and teardown const rxSetup = concat(rxDelete, rxData); const rxTeardown = empty(); //rxDelete; // command const rxTest = rxCmd.pipe( mergeMap(expectFileExists), toArray() ); // execute the command const rxTotal = concat(rxSetup, rxTest, rxTeardown); return rxTotal.toPromise(); }); it('should work with group elements', () => { const dir = tmpdir(); const name = v4(); const dstBase = join(dir, name); const dstSrc = dstBase; const dstData = join(dstBase, 'data'); const assetBase = getAssetBaseDir(); const srcSrc = join(assetBase, 'test', 'empty-project'); const srcData = join(assetBase, 'test', 'group-elements'); // copy the data const rxData = merge(rxCopyDir(srcSrc, dstSrc), rxCopyDir(srcData, dstData)); const rxDelete = rxDeleteDir(dstBase); const opts: Options = { command: CreateComponentsCommand.COMMAND, commandType: CreateComponentsCommand.TYPE, src: join(dstSrc, 'src'), data: dstData, pkgDir: dstSrc, verbose: true, override: true, allArgs: [] }; const cmd = new CreateComponentsCommand(opts); const rxCmd = cmd.process(); // setup and teardown const rxSetup = concat(rxDelete, rxData); const rxTeardown = rxDelete; // command const rxTest = rxCmd.pipe( mergeMap(expectFileExists), toArray() ); // execute the command const rxTotal = concat(rxSetup, rxTest, rxTeardown); return rxTotal.toPromise(); }); });