mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-15 20:20:09 +00:00
- add handler-level coverage for up, down, logs, config, update, and status - exercise success, validation, follow-mode, and boxed error output paths
64 lines
2.3 KiB
TypeScript
64 lines
2.3 KiB
TypeScript
import { describe, expect, it } from 'bun:test';
|
|
import {
|
|
renderCapturedLines,
|
|
useDockerSubcommandConsoleCapture,
|
|
} from './docker-subcommand-test-helpers';
|
|
|
|
const capture = useDockerSubcommandConsoleCapture();
|
|
|
|
async function loadHandleUpdate() {
|
|
const mod = await import(
|
|
`../../../src/commands/docker/update-subcommand?test=${Date.now()}-${Math.random()}`
|
|
);
|
|
return mod.handleUpdate;
|
|
}
|
|
|
|
describe('docker update subcommand', () => {
|
|
it('prints progress and success output for remote updates', async () => {
|
|
const calls: Array<{ host?: string }> = [];
|
|
const dockerModule = (await import(
|
|
'../../../src/docker'
|
|
)) as typeof import('../../../src/docker');
|
|
const originalUpdate = dockerModule.DockerExecutor.prototype.update;
|
|
dockerModule.DockerExecutor.prototype.update = function (options: { host?: string }) {
|
|
calls.push(options);
|
|
};
|
|
|
|
try {
|
|
const handleUpdate = await loadHandleUpdate();
|
|
await handleUpdate(['--host', 'docker-box']);
|
|
|
|
const rendered = renderCapturedLines(capture.logLines);
|
|
expect(calls).toEqual([{ host: 'docker-box' }]);
|
|
expect(rendered).toContain('Updating running Docker stack on docker-box...');
|
|
expect(rendered).toContain('Docker stack updated on docker-box.');
|
|
expect(capture.errorLines).toEqual([]);
|
|
expect(process.exitCode).toBe(0);
|
|
} finally {
|
|
dockerModule.DockerExecutor.prototype.update = originalUpdate;
|
|
}
|
|
});
|
|
|
|
it('renders executor failures as boxed errors', async () => {
|
|
const dockerModule = (await import(
|
|
'../../../src/docker'
|
|
)) as typeof import('../../../src/docker');
|
|
const originalUpdate = dockerModule.DockerExecutor.prototype.update;
|
|
dockerModule.DockerExecutor.prototype.update = function () {
|
|
throw new Error('Docker stack update failed.\nSupervisor restart did not complete.');
|
|
};
|
|
|
|
try {
|
|
const handleUpdate = await loadHandleUpdate();
|
|
await handleUpdate([]);
|
|
|
|
const rendered = renderCapturedLines(capture.errorLines);
|
|
expect(rendered).toContain('Docker stack update failed.');
|
|
expect(rendered).toContain('Supervisor restart did not complete.');
|
|
expect(process.exitCode).toBe(1);
|
|
} finally {
|
|
dockerModule.DockerExecutor.prototype.update = originalUpdate;
|
|
}
|
|
});
|
|
});
|