import path from 'path'; import os from 'os'; import { fs } from '@modern-js/generator-utils'; import { CodeSmith, FsMaterial, GeneratorCore, MaterialsManager, } from '@modern-js/codesmith'; import { MonorepoDefaultConfig } from '@modern-js/generator-common'; import generator, { handleTemplateFile } from '../src'; describe('dependence-generator', () => { it('default', () => { expect(generator).toBeInstanceOf(Function); }); }); describe('run dependence-generator', () => { beforeEach(() => { const projectDir = path.join(os.tmpdir(), 'modern-js-test', 'dependence'); fs.ensureDirSync(projectDir); fs.writeJSONSync( path.join(projectDir, 'package.json'), { name: 'dependence' }, 'utf-8', ); fs.writeJSONSync(path.join(projectDir, 'tsconfig.json'), {}, 'utf-8'); }); afterEach(() => { const projectDir = path.join(os.tmpdir(), 'modern-js-test', 'dependence'); fs.removeSync(projectDir); }); const smith = new CodeSmith({}); const projectDir = path.join(os.tmpdir(), 'modern-js-test', 'dependence'); const mockGeneratorCore = new GeneratorCore({ logger: smith.logger, materialsManager: new MaterialsManager(), outputPath: projectDir, }); mockGeneratorCore.addMaterial('default', new FsMaterial(projectDir)); mockGeneratorCore._context.config = { ...MonorepoDefaultConfig, noNeedInstall: true, }; mockGeneratorCore._context.current = { material: new FsMaterial(path.join(__dirname, '..')), }; it('config not has project path', async () => { mockGeneratorCore._context.config = { devDependencies: { '@modern-js/plugin-less': '^1' }, dependencies: { '@modern-js/runtime': '^1' }, peerDependencies: { '@modern-js/core': '^1' }, appendTypeContent: "/// ", }; await handleTemplateFile(mockGeneratorCore._context, mockGeneratorCore); expect(fs.existsSync(path.join(projectDir, 'package.json'))).toBe(true); const pkg = fs.readJSONSync(path.join(projectDir, 'package.json'), 'utf-8'); expect(pkg.devDependencies['@modern-js/plugin-less']).toBe('^1'); expect(pkg.dependencies['@modern-js/runtime']).toBe('^1'); expect(pkg.peerDependencies['@modern-js/core']).toBe('^1'); const typeContent = fs.readFileSync( path.join(projectDir, 'src', 'modern-app-env.d.ts'), 'utf-8', ); expect(typeContent).toContain( "/// ", ); }); it('config has project path', async () => { fs.ensureDirSync(path.join(projectDir, 'apps', 'mwa')); fs.writeJSONSync( path.join(projectDir, 'apps', 'mwa', 'package.json'), { name: 'dependence' }, 'utf-8', ); fs.writeJSONSync( path.join(projectDir, 'apps', 'mwa', 'tsconfig.json'), {}, 'utf-8', ); mockGeneratorCore._context.config = { devDependencies: { '@modern-js/plugin-less': '^1' }, dependencies: { '@modern-js/runtime': '^1' }, peerDependencies: { '@modern-js/core': '^1' }, appendTypeContent: "/// ", projectPath: 'apps/mwa', }; await handleTemplateFile(mockGeneratorCore._context, mockGeneratorCore); expect( fs.existsSync(path.join(projectDir, 'apps', 'mwa', 'package.json')), ).toBe(true); const pkg = fs.readJSONSync( path.join(projectDir, 'apps', 'mwa', 'package.json'), 'utf-8', ); expect(pkg.devDependencies['@modern-js/plugin-less']).toBe('^1'); expect(pkg.dependencies['@modern-js/runtime']).toBe('^1'); expect(pkg.peerDependencies['@modern-js/core']).toBe('^1'); const typeContent = fs.readFileSync( path.join(projectDir, 'apps', 'mwa', 'src', 'modern-app-env.d.ts'), 'utf-8', ); expect(typeContent).toContain( "/// ", ); }); });