135
tests/run-command.test.js
Archivo normal
135
tests/run-command.test.js
Archivo normal
@@ -0,0 +1,135 @@
|
||||
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'
|
||||
);
|
||||
});
|
||||
});
|
||||
Referencia en una nueva incidencia
Block a user