const fs = require('fs-extra'); const path = require('path'); const PackageManager = require('../src/core/package-manager'); describe('Run Command', () => { let tempDir; let packageManager; beforeEach(async () => { tempDir = path.join(__dirname, 'temp-run-test'); await fs.ensureDir(tempDir); packageManager = new PackageManager({ projectRoot: tempDir }); }); afterEach(async () => { if (await fs.pathExists(tempDir)) { await fs.remove(tempDir); } }); test('should run a simple script successfully', async () => { const packageJson = { name: 'test-package', version: '1.0.0', scripts: { hello: 'echo "Hello World"' } }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); // This should not throw await packageManager.runScript('hello'); }); test('should fail when script does not exist', async () => { const packageJson = { name: 'test-package', version: '1.0.0', scripts: { hello: 'echo "Hello World"' } }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); await expect(packageManager.runScript('nonexistent')).rejects.toThrow( 'Script "nonexistent" not found' ); }); test('should not fail when script does not exist with ifPresent option', async () => { const packageJson = { name: 'test-package', version: '1.0.0', scripts: { hello: 'echo "Hello World"' } }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); // This should not throw await packageManager.runScript('nonexistent', { ifPresent: true }); }); test('should fail when package.json does not exist', async () => { // Override ensureInitialized to prevent auto-creation const originalEnsureInitialized = packageManager.ensureInitialized; packageManager.ensureInitialized = async () => {}; await expect(packageManager.runScript('hello')).rejects.toThrow( 'No package.json found in current directory' ); // Restore original method packageManager.ensureInitialized = originalEnsureInitialized; }); test('should fail when package.json has no scripts section', async () => { const packageJson = { name: 'test-package', version: '1.0.0' }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); await expect(packageManager.runScript('hello')).rejects.toThrow( 'No scripts section found in package.json' ); }); test('should not fail when package.json has no scripts section with ifPresent option', async () => { const packageJson = { name: 'test-package', version: '1.0.0' }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); // This should not throw await packageManager.runScript('hello', { ifPresent: true }); }); test('should run script with silent option', async () => { const packageJson = { name: 'test-package', version: '1.0.0', scripts: { hello: 'echo "Hello World"' } }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); // This should not throw await packageManager.runScript('hello', { silent: true }); }); test('should handle script that exits with error code', async () => { const packageJson = { name: 'test-package', version: '1.0.0', scripts: { fail: 'nonexistentcommand123456' // This command doesn't exist } }; await fs.writeJson(path.join(tempDir, 'package.json'), packageJson); await expect(packageManager.runScript('fail')).rejects.toThrow( 'Script "fail" exited with code 127' ); }); });