@pleri/olam-cli 0.1.70 → 0.1.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +2 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/runbooks.d.ts +13 -0
- package/dist/commands/runbooks.d.ts.map +1 -0
- package/dist/commands/runbooks.js +189 -0
- package/dist/commands/runbooks.js.map +1 -0
- package/dist/commands/world-snapshot.d.ts +1 -0
- package/dist/commands/world-snapshot.d.ts.map +1 -1
- package/dist/commands/world-snapshot.js +126 -1
- package/dist/commands/world-snapshot.js.map +1 -1
- package/dist/commands/worldspec/compile.d.ts +20 -0
- package/dist/commands/worldspec/compile.d.ts.map +1 -0
- package/dist/commands/worldspec/compile.js +130 -0
- package/dist/commands/worldspec/compile.js.map +1 -0
- package/dist/commands/worldspec/index.d.ts +12 -0
- package/dist/commands/worldspec/index.d.ts.map +1 -0
- package/dist/commands/worldspec/index.js +23 -0
- package/dist/commands/worldspec/index.js.map +1 -0
- package/dist/commands/worldspec/init.d.ts +15 -0
- package/dist/commands/worldspec/init.d.ts.map +1 -0
- package/dist/commands/worldspec/init.js +166 -0
- package/dist/commands/worldspec/init.js.map +1 -0
- package/dist/commands/worldspec/schema.d.ts +11 -0
- package/dist/commands/worldspec/schema.d.ts.map +1 -0
- package/dist/commands/worldspec/schema.js +55 -0
- package/dist/commands/worldspec/schema.js.map +1 -0
- package/dist/commands/worldspec/validate.d.ts +15 -0
- package/dist/commands/worldspec/validate.d.ts.map +1 -0
- package/dist/commands/worldspec/validate.js +66 -0
- package/dist/commands/worldspec/validate.js.map +1 -0
- package/dist/exit-codes.d.ts +32 -0
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +32 -0
- package/dist/exit-codes.js.map +1 -1
- package/dist/image-digests.json +5 -5
- package/dist/index.js +4379 -897
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +1252 -286
- package/host-cp/src/global-config-source.mjs +71 -0
- package/host-cp/src/listening-server-poller.mjs +1 -1
- package/host-cp/src/plan-orchestrator.mjs +21 -2
- package/host-cp/src/port-bridge-manager.mjs +1 -1
- package/host-cp/src/server.mjs +46 -7
- package/package.json +4 -2
- package/dist/__tests__/audit-publish-deps-contract.test.d.ts +0 -26
- package/dist/__tests__/audit-publish-deps-contract.test.d.ts.map +0 -1
- package/dist/__tests__/audit-publish-deps-contract.test.js +0 -86
- package/dist/__tests__/audit-publish-deps-contract.test.js.map +0 -1
- package/dist/__tests__/auth-status.test.d.ts +0 -2
- package/dist/__tests__/auth-status.test.d.ts.map +0 -1
- package/dist/__tests__/auth-status.test.js +0 -291
- package/dist/__tests__/auth-status.test.js.map +0 -1
- package/dist/__tests__/auth-upgrade.test.d.ts +0 -9
- package/dist/__tests__/auth-upgrade.test.d.ts.map +0 -1
- package/dist/__tests__/auth-upgrade.test.js +0 -397
- package/dist/__tests__/auth-upgrade.test.js.map +0 -1
- package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts +0 -22
- package/dist/__tests__/bootstrap-tag-mcp-auth.test.d.ts.map +0 -1
- package/dist/__tests__/bootstrap-tag-mcp-auth.test.js +0 -63
- package/dist/__tests__/bootstrap-tag-mcp-auth.test.js.map +0 -1
- package/dist/__tests__/cli-mcp-revoke.test.d.ts +0 -8
- package/dist/__tests__/cli-mcp-revoke.test.d.ts.map +0 -1
- package/dist/__tests__/cli-mcp-revoke.test.js +0 -124
- package/dist/__tests__/cli-mcp-revoke.test.js.map +0 -1
- package/dist/__tests__/config.test.d.ts +0 -2
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -95
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/create-app-urls.test.d.ts +0 -2
- package/dist/__tests__/create-app-urls.test.d.ts.map +0 -1
- package/dist/__tests__/create-app-urls.test.js +0 -102
- package/dist/__tests__/create-app-urls.test.js.map +0 -1
- package/dist/__tests__/docker-host.test.d.ts +0 -14
- package/dist/__tests__/docker-host.test.d.ts.map +0 -1
- package/dist/__tests__/docker-host.test.js +0 -109
- package/dist/__tests__/docker-host.test.js.map +0 -1
- package/dist/__tests__/enter.test.d.ts +0 -2
- package/dist/__tests__/enter.test.d.ts.map +0 -1
- package/dist/__tests__/enter.test.js +0 -90
- package/dist/__tests__/enter.test.js.map +0 -1
- package/dist/__tests__/help-output.test.d.ts +0 -2
- package/dist/__tests__/help-output.test.d.ts.map +0 -1
- package/dist/__tests__/help-output.test.js +0 -74
- package/dist/__tests__/help-output.test.js.map +0 -1
- package/dist/__tests__/host-cp-gh-token.test.d.ts +0 -9
- package/dist/__tests__/host-cp-gh-token.test.d.ts.map +0 -1
- package/dist/__tests__/host-cp-gh-token.test.js +0 -129
- package/dist/__tests__/host-cp-gh-token.test.js.map +0 -1
- package/dist/__tests__/host-cp.test.d.ts +0 -9
- package/dist/__tests__/host-cp.test.d.ts.map +0 -1
- package/dist/__tests__/host-cp.test.js +0 -335
- package/dist/__tests__/host-cp.test.js.map +0 -1
- package/dist/__tests__/image-presence.test.d.ts +0 -2
- package/dist/__tests__/image-presence.test.d.ts.map +0 -1
- package/dist/__tests__/image-presence.test.js +0 -44
- package/dist/__tests__/image-presence.test.js.map +0 -1
- package/dist/__tests__/install-root.test.d.ts +0 -2
- package/dist/__tests__/install-root.test.d.ts.map +0 -1
- package/dist/__tests__/install-root.test.js +0 -119
- package/dist/__tests__/install-root.test.js.map +0 -1
- package/dist/__tests__/keys.test.d.ts +0 -9
- package/dist/__tests__/keys.test.d.ts.map +0 -1
- package/dist/__tests__/keys.test.js +0 -145
- package/dist/__tests__/keys.test.js.map +0 -1
- package/dist/__tests__/logs.test.d.ts +0 -9
- package/dist/__tests__/logs.test.d.ts.map +0 -1
- package/dist/__tests__/logs.test.js +0 -124
- package/dist/__tests__/logs.test.js.map +0 -1
- package/dist/__tests__/mcp-import.test.d.ts +0 -11
- package/dist/__tests__/mcp-import.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-import.test.js +0 -134
- package/dist/__tests__/mcp-import.test.js.map +0 -1
- package/dist/__tests__/protocol-version.test.d.ts +0 -2
- package/dist/__tests__/protocol-version.test.d.ts.map +0 -1
- package/dist/__tests__/protocol-version.test.js +0 -170
- package/dist/__tests__/protocol-version.test.js.map +0 -1
- package/dist/__tests__/ps.test.d.ts +0 -2
- package/dist/__tests__/ps.test.d.ts.map +0 -1
- package/dist/__tests__/ps.test.js +0 -172
- package/dist/__tests__/ps.test.js.map +0 -1
- package/dist/__tests__/registry-allowlist.test.d.ts +0 -2
- package/dist/__tests__/registry-allowlist.test.d.ts.map +0 -1
- package/dist/__tests__/registry-allowlist.test.js +0 -129
- package/dist/__tests__/registry-allowlist.test.js.map +0 -1
- package/dist/__tests__/services.test.d.ts +0 -8
- package/dist/__tests__/services.test.d.ts.map +0 -1
- package/dist/__tests__/services.test.js +0 -185
- package/dist/__tests__/services.test.js.map +0 -1
- package/dist/__tests__/status-app-urls.test.d.ts +0 -2
- package/dist/__tests__/status-app-urls.test.d.ts.map +0 -1
- package/dist/__tests__/status-app-urls.test.js +0 -125
- package/dist/__tests__/status-app-urls.test.js.map +0 -1
- package/dist/__tests__/upgrade-gh-token-contract.test.d.ts +0 -19
- package/dist/__tests__/upgrade-gh-token-contract.test.d.ts.map +0 -1
- package/dist/__tests__/upgrade-gh-token-contract.test.js +0 -63
- package/dist/__tests__/upgrade-gh-token-contract.test.js.map +0 -1
- package/dist/__tests__/upgrade.test.d.ts +0 -9
- package/dist/__tests__/upgrade.test.d.ts.map +0 -1
- package/dist/__tests__/upgrade.test.js +0 -586
- package/dist/__tests__/upgrade.test.js.map +0 -1
- package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts +0 -6
- package/dist/commands/__tests__/__fixtures__/upgrade-helpers.d.ts.map +0 -1
- package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js +0 -26
- package/dist/commands/__tests__/__fixtures__/upgrade-helpers.js.map +0 -1
- package/dist/commands/__tests__/begin.test.d.ts +0 -7
- package/dist/commands/__tests__/begin.test.d.ts.map +0 -1
- package/dist/commands/__tests__/begin.test.js +0 -72
- package/dist/commands/__tests__/begin.test.js.map +0 -1
- package/dist/commands/__tests__/bootstrap.test.d.ts +0 -2
- package/dist/commands/__tests__/bootstrap.test.d.ts.map +0 -1
- package/dist/commands/__tests__/bootstrap.test.js +0 -370
- package/dist/commands/__tests__/bootstrap.test.js.map +0 -1
- package/dist/commands/__tests__/carry-uncommitted.test.d.ts +0 -14
- package/dist/commands/__tests__/carry-uncommitted.test.d.ts.map +0 -1
- package/dist/commands/__tests__/carry-uncommitted.test.js +0 -83
- package/dist/commands/__tests__/carry-uncommitted.test.js.map +0 -1
- package/dist/commands/__tests__/clean.test.d.ts +0 -9
- package/dist/commands/__tests__/clean.test.d.ts.map +0 -1
- package/dist/commands/__tests__/clean.test.js +0 -105
- package/dist/commands/__tests__/clean.test.js.map +0 -1
- package/dist/commands/__tests__/crystallize.test.d.ts +0 -2
- package/dist/commands/__tests__/crystallize.test.d.ts.map +0 -1
- package/dist/commands/__tests__/crystallize.test.js +0 -133
- package/dist/commands/__tests__/crystallize.test.js.map +0 -1
- package/dist/commands/__tests__/diagnose.test.d.ts +0 -9
- package/dist/commands/__tests__/diagnose.test.d.ts.map +0 -1
- package/dist/commands/__tests__/diagnose.test.js +0 -108
- package/dist/commands/__tests__/diagnose.test.js.map +0 -1
- package/dist/commands/__tests__/openHostCpUrl.test.d.ts +0 -2
- package/dist/commands/__tests__/openHostCpUrl.test.d.ts.map +0 -1
- package/dist/commands/__tests__/openHostCpUrl.test.js +0 -63
- package/dist/commands/__tests__/openHostCpUrl.test.js.map +0 -1
- package/dist/commands/__tests__/refresh.test.d.ts +0 -13
- package/dist/commands/__tests__/refresh.test.d.ts.map +0 -1
- package/dist/commands/__tests__/refresh.test.js +0 -170
- package/dist/commands/__tests__/refresh.test.js.map +0 -1
- package/dist/commands/__tests__/status.test.d.ts +0 -8
- package/dist/commands/__tests__/status.test.d.ts.map +0 -1
- package/dist/commands/__tests__/status.test.js +0 -62
- package/dist/commands/__tests__/status.test.js.map +0 -1
- package/dist/commands/__tests__/stop.test.d.ts +0 -5
- package/dist/commands/__tests__/stop.test.d.ts.map +0 -1
- package/dist/commands/__tests__/stop.test.js +0 -30
- package/dist/commands/__tests__/stop.test.js.map +0 -1
- package/dist/commands/__tests__/update.test.d.ts +0 -7
- package/dist/commands/__tests__/update.test.d.ts.map +0 -1
- package/dist/commands/__tests__/update.test.js +0 -224
- package/dist/commands/__tests__/update.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.all-three.test.d.ts +0 -19
- package/dist/commands/__tests__/upgrade.all-three.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.all-three.test.js +0 -80
- package/dist/commands/__tests__/upgrade.all-three.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.compose-path.test.d.ts +0 -20
- package/dist/commands/__tests__/upgrade.compose-path.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.compose-path.test.js +0 -140
- package/dist/commands/__tests__/upgrade.compose-path.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.history.test.d.ts +0 -15
- package/dist/commands/__tests__/upgrade.history.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.history.test.js +0 -199
- package/dist/commands/__tests__/upgrade.history.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.lock.test.d.ts +0 -15
- package/dist/commands/__tests__/upgrade.lock.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.lock.test.js +0 -253
- package/dist/commands/__tests__/upgrade.lock.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts +0 -21
- package/dist/commands/__tests__/upgrade.olam-tag.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.olam-tag.test.js +0 -114
- package/dist/commands/__tests__/upgrade.olam-tag.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.poll.test.d.ts +0 -14
- package/dist/commands/__tests__/upgrade.poll.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.poll.test.js +0 -136
- package/dist/commands/__tests__/upgrade.poll.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.recreate.test.d.ts +0 -17
- package/dist/commands/__tests__/upgrade.recreate.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.recreate.test.js +0 -83
- package/dist/commands/__tests__/upgrade.recreate.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.rollback.test.d.ts +0 -12
- package/dist/commands/__tests__/upgrade.rollback.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.rollback.test.js +0 -255
- package/dist/commands/__tests__/upgrade.rollback.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts +0 -12
- package/dist/commands/__tests__/upgrade.sha-capture.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.sha-capture.test.js +0 -63
- package/dist/commands/__tests__/upgrade.sha-capture.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.smoke.test.d.ts +0 -19
- package/dist/commands/__tests__/upgrade.smoke.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.smoke.test.js +0 -87
- package/dist/commands/__tests__/upgrade.smoke.test.js.map +0 -1
- package/dist/commands/__tests__/upgrade.swap.test.d.ts +0 -19
- package/dist/commands/__tests__/upgrade.swap.test.d.ts.map +0 -1
- package/dist/commands/__tests__/upgrade.swap.test.js +0 -312
- package/dist/commands/__tests__/upgrade.swap.test.js.map +0 -1
- package/dist/commands/__tests__/world-upgrade.test.d.ts +0 -8
- package/dist/commands/__tests__/world-upgrade.test.d.ts.map +0 -1
- package/dist/commands/__tests__/world-upgrade.test.js +0 -73
- package/dist/commands/__tests__/world-upgrade.test.js.map +0 -1
- package/dist/lib/__tests__/symlink-reconcile.test.d.ts +0 -2
- package/dist/lib/__tests__/symlink-reconcile.test.d.ts.map +0 -1
- package/dist/lib/__tests__/symlink-reconcile.test.js +0 -106
- package/dist/lib/__tests__/symlink-reconcile.test.js.map +0 -1
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for `olam refresh` command.
|
|
3
|
-
*
|
|
4
|
-
* Tests:
|
|
5
|
-
* 1. collectCpSourceFiles — mirrors build-devbox.sh:38-77 logic
|
|
6
|
-
* 2. validateServerMjsPresent — sanity-check gate
|
|
7
|
-
* 3. Command parser — arg/flag validation
|
|
8
|
-
* 4. Snapshot test — actual standalone dir matches expected structure
|
|
9
|
-
*
|
|
10
|
-
* Run: `cd packages/cli && npx vitest run src/commands/__tests__/refresh.test.ts`
|
|
11
|
-
*/
|
|
12
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
13
|
-
import * as fs from 'node:fs';
|
|
14
|
-
import * as os from 'node:os';
|
|
15
|
-
import * as path from 'node:path';
|
|
16
|
-
import { Command } from 'commander';
|
|
17
|
-
import { collectCpSourceFiles, validateServerMjsPresent } from '../refresh-helpers.js';
|
|
18
|
-
// ── Helpers ─────────────────────────────────────────────────────────────────
|
|
19
|
-
function makeFakeStandalone(files) {
|
|
20
|
-
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-test-standalone-'));
|
|
21
|
-
for (const f of files) {
|
|
22
|
-
const fullPath = path.join(dir, f);
|
|
23
|
-
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
24
|
-
fs.writeFileSync(fullPath, `// ${f}`);
|
|
25
|
-
}
|
|
26
|
-
return dir;
|
|
27
|
-
}
|
|
28
|
-
// ── collectCpSourceFiles ─────────────────────────────────────────────────────
|
|
29
|
-
describe('collectCpSourceFiles', () => {
|
|
30
|
-
let tmpDir;
|
|
31
|
-
beforeEach(() => {
|
|
32
|
-
tmpDir = '';
|
|
33
|
-
});
|
|
34
|
-
afterEach(() => {
|
|
35
|
-
if (tmpDir)
|
|
36
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
37
|
-
});
|
|
38
|
-
it('collects top-level *.mjs excluding *.test.mjs', () => {
|
|
39
|
-
tmpDir = makeFakeStandalone([
|
|
40
|
-
'server.mjs',
|
|
41
|
-
'stub.mjs',
|
|
42
|
-
'stub.test.mjs', // should be excluded
|
|
43
|
-
'api-files.mjs',
|
|
44
|
-
]);
|
|
45
|
-
const entries = collectCpSourceFiles(tmpDir);
|
|
46
|
-
const destPaths = entries.map(e => e.destRelPath).sort();
|
|
47
|
-
expect(destPaths).toContain('server.mjs');
|
|
48
|
-
expect(destPaths).toContain('stub.mjs');
|
|
49
|
-
expect(destPaths).toContain('api-files.mjs');
|
|
50
|
-
expect(destPaths).not.toContain('stub.test.mjs');
|
|
51
|
-
});
|
|
52
|
-
it('includes lib/*.mjs excluding lib/*.test.mjs', () => {
|
|
53
|
-
tmpDir = makeFakeStandalone([
|
|
54
|
-
'server.mjs',
|
|
55
|
-
'lib/exec-with-status.mjs',
|
|
56
|
-
'lib/exec-with-status.test.mjs', // should be excluded
|
|
57
|
-
]);
|
|
58
|
-
const entries = collectCpSourceFiles(tmpDir);
|
|
59
|
-
const destPaths = entries.map(e => e.destRelPath).sort();
|
|
60
|
-
expect(destPaths).toContain('lib/exec-with-status.mjs');
|
|
61
|
-
expect(destPaths).not.toContain('lib/exec-with-status.test.mjs');
|
|
62
|
-
});
|
|
63
|
-
it('skips lib/ entirely when it does not exist', () => {
|
|
64
|
-
tmpDir = makeFakeStandalone(['server.mjs', 'stub.mjs']);
|
|
65
|
-
const entries = collectCpSourceFiles(tmpDir);
|
|
66
|
-
const destPaths = entries.map(e => e.destRelPath);
|
|
67
|
-
expect(destPaths.every(p => !p.startsWith('lib/'))).toBe(true);
|
|
68
|
-
});
|
|
69
|
-
it('returns srcPath values that exist on disk', () => {
|
|
70
|
-
tmpDir = makeFakeStandalone(['server.mjs', 'lib/exec-with-status.mjs']);
|
|
71
|
-
const entries = collectCpSourceFiles(tmpDir);
|
|
72
|
-
for (const { srcPath } of entries) {
|
|
73
|
-
expect(fs.existsSync(srcPath), `srcPath should exist: ${srcPath}`).toBe(true);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
it('throws when standalone dir does not exist', () => {
|
|
77
|
-
expect(() => collectCpSourceFiles('/nonexistent/standalone')).toThrow(/not found/);
|
|
78
|
-
});
|
|
79
|
-
it('does not include non-.mjs files', () => {
|
|
80
|
-
tmpDir = makeFakeStandalone(['server.mjs', 'package.json', 'README.md']);
|
|
81
|
-
const entries = collectCpSourceFiles(tmpDir);
|
|
82
|
-
const destPaths = entries.map(e => e.destRelPath);
|
|
83
|
-
expect(destPaths).toContain('server.mjs');
|
|
84
|
-
expect(destPaths).not.toContain('package.json');
|
|
85
|
-
expect(destPaths).not.toContain('README.md');
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
// ── validateServerMjsPresent ─────────────────────────────────────────────────
|
|
89
|
-
describe('validateServerMjsPresent', () => {
|
|
90
|
-
it('throws when server.mjs is absent', () => {
|
|
91
|
-
const entries = [
|
|
92
|
-
{ srcPath: '/fake/stub.mjs', destRelPath: 'stub.mjs' },
|
|
93
|
-
];
|
|
94
|
-
expect(() => validateServerMjsPresent(entries)).toThrow(/server\.mjs/);
|
|
95
|
-
});
|
|
96
|
-
it('passes when server.mjs is present', () => {
|
|
97
|
-
const entries = [
|
|
98
|
-
{ srcPath: '/fake/server.mjs', destRelPath: 'server.mjs' },
|
|
99
|
-
{ srcPath: '/fake/stub.mjs', destRelPath: 'stub.mjs' },
|
|
100
|
-
];
|
|
101
|
-
expect(() => validateServerMjsPresent(entries)).not.toThrow();
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
function parseRefreshArgs(argv) {
|
|
105
|
-
let result = { worldId: undefined, opts: {} };
|
|
106
|
-
const program = new Command();
|
|
107
|
-
program.exitOverride();
|
|
108
|
-
program
|
|
109
|
-
.command('refresh')
|
|
110
|
-
.argument('[world]', 'World ID')
|
|
111
|
-
.option('--all', 'Refresh every running world')
|
|
112
|
-
.option('--no-restart', 'Copy files but skip restart')
|
|
113
|
-
.option('--skip-build', 'Skip server.mjs check')
|
|
114
|
-
.action((worldId, opts) => {
|
|
115
|
-
result = { worldId, opts };
|
|
116
|
-
});
|
|
117
|
-
program.parse(['refresh', ...argv], { from: 'user' });
|
|
118
|
-
return result;
|
|
119
|
-
}
|
|
120
|
-
describe('olam refresh — command parser', () => {
|
|
121
|
-
it('parses a positional world ID', () => {
|
|
122
|
-
const { worldId, opts } = parseRefreshArgs(['gold-sky-9120']);
|
|
123
|
-
expect(worldId).toBe('gold-sky-9120');
|
|
124
|
-
expect(opts.all).toBeUndefined();
|
|
125
|
-
});
|
|
126
|
-
it('parses --all without positional arg', () => {
|
|
127
|
-
const { worldId, opts } = parseRefreshArgs(['--all']);
|
|
128
|
-
expect(worldId).toBeUndefined();
|
|
129
|
-
expect(opts.all).toBe(true);
|
|
130
|
-
});
|
|
131
|
-
it('--no-restart sets restart to false', () => {
|
|
132
|
-
const { opts } = parseRefreshArgs(['test-world', '--no-restart']);
|
|
133
|
-
expect(opts.restart).toBe(false);
|
|
134
|
-
});
|
|
135
|
-
it('--skip-build flag is recognised', () => {
|
|
136
|
-
const { opts } = parseRefreshArgs(['test-world', '--skip-build']);
|
|
137
|
-
expect(opts.skipBuild).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
// ── Snapshot: actual standalone/ matches build-devbox.sh expectations ────────
|
|
141
|
-
describe('collectCpSourceFiles — actual standalone dir', () => {
|
|
142
|
-
it('collects the actual standalone/ dir without error', () => {
|
|
143
|
-
// This test is a canary: if it fails, the standalone dir is missing
|
|
144
|
-
// or server.mjs is not present — which means build-devbox.sh would
|
|
145
|
-
// also fail. File path is relative to this test file's compile-time
|
|
146
|
-
// location; adjust if the test runner CWD changes.
|
|
147
|
-
// Resolve relative to monorepo root from this file's location.
|
|
148
|
-
// vitest runs from the package root; use process.cwd() as the anchor.
|
|
149
|
-
const standaloneDir = path.resolve(process.cwd(), '../control-plane/standalone');
|
|
150
|
-
if (!fs.existsSync(standaloneDir)) {
|
|
151
|
-
// Skip gracefully when running in an environment without the full
|
|
152
|
-
// monorepo (e.g. isolated package publish tests).
|
|
153
|
-
console.warn(`SKIP: standalone dir not found at ${standaloneDir}`);
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const entries = collectCpSourceFiles(standaloneDir);
|
|
157
|
-
expect(entries.length).toBeGreaterThan(0);
|
|
158
|
-
// server.mjs must be present (sanity-checked by build-devbox.sh too)
|
|
159
|
-
const destPaths = entries.map(e => e.destRelPath);
|
|
160
|
-
expect(destPaths).toContain('server.mjs');
|
|
161
|
-
// No test files should sneak in
|
|
162
|
-
const testFiles = destPaths.filter(p => p.endsWith('.test.mjs'));
|
|
163
|
-
expect(testFiles, `test files leaked into source list: ${testFiles.join(', ')}`).toHaveLength(0);
|
|
164
|
-
// All srcPaths must exist
|
|
165
|
-
for (const { srcPath } of entries) {
|
|
166
|
-
expect(fs.existsSync(srcPath), `srcPath missing: ${srcPath}`).toBe(true);
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
//# sourceMappingURL=refresh.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"refresh.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/refresh.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for D2 — `olam status` machine-status extension (Phase D).
|
|
3
|
-
*
|
|
4
|
-
* getMachineStatus accepts injectable probe/loadCtx/readToken so no
|
|
5
|
-
* @olam/adapters transitive dependency touches this test file.
|
|
6
|
-
*/
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=status.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/status.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for D2 — `olam status` machine-status extension (Phase D).
|
|
3
|
-
*
|
|
4
|
-
* getMachineStatus accepts injectable probe/loadCtx/readToken so no
|
|
5
|
-
* @olam/adapters transitive dependency touches this test file.
|
|
6
|
-
*/
|
|
7
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
8
|
-
describe('getMachineStatus (D2)', () => {
|
|
9
|
-
it('returns host_cp=stopped when probe returns null', async () => {
|
|
10
|
-
const { getMachineStatus } = await import('../status.js');
|
|
11
|
-
const probe = vi.fn().mockResolvedValue(null);
|
|
12
|
-
const loadCtx = vi.fn().mockResolvedValue({ ctx: null });
|
|
13
|
-
const readToken = vi.fn().mockReturnValue(null);
|
|
14
|
-
const ms = await getMachineStatus(probe, loadCtx, readToken);
|
|
15
|
-
expect(ms.host_cp).toBe('stopped');
|
|
16
|
-
expect(ms.port).toBe(19000);
|
|
17
|
-
});
|
|
18
|
-
it('returns host_cp=running when probe returns url', async () => {
|
|
19
|
-
const { getMachineStatus } = await import('../status.js');
|
|
20
|
-
const probe = vi.fn().mockResolvedValue({ url: 'http://127.0.0.1:19000', mode: 'container' });
|
|
21
|
-
const loadCtx = vi.fn().mockResolvedValue({ ctx: null });
|
|
22
|
-
const readToken = vi.fn().mockReturnValue('tok');
|
|
23
|
-
const ms = await getMachineStatus(probe, loadCtx, readToken);
|
|
24
|
-
expect(ms.host_cp).toBe('running');
|
|
25
|
-
expect(ms.token_present).toBe(true);
|
|
26
|
-
});
|
|
27
|
-
it('counts worlds from context', async () => {
|
|
28
|
-
const { getMachineStatus } = await import('../status.js');
|
|
29
|
-
const probe = vi.fn().mockResolvedValue(null);
|
|
30
|
-
const loadCtx = vi.fn().mockResolvedValue({
|
|
31
|
-
ctx: { worldManager: { listWorlds: () => ['a', 'b', 'c'] } },
|
|
32
|
-
});
|
|
33
|
-
const readToken = vi.fn().mockReturnValue(null);
|
|
34
|
-
const ms = await getMachineStatus(probe, loadCtx, readToken);
|
|
35
|
-
expect(ms.worlds).toBe(3);
|
|
36
|
-
});
|
|
37
|
-
it('worlds=0 when context not available', async () => {
|
|
38
|
-
const { getMachineStatus } = await import('../status.js');
|
|
39
|
-
const probe = vi.fn().mockResolvedValue(null);
|
|
40
|
-
const loadCtx = vi.fn().mockRejectedValue(new Error('not configured'));
|
|
41
|
-
const readToken = vi.fn().mockReturnValue(null);
|
|
42
|
-
const ms = await getMachineStatus(probe, loadCtx, readToken);
|
|
43
|
-
expect(ms.worlds).toBe(0);
|
|
44
|
-
});
|
|
45
|
-
it('returns JSON-serializable object with all required fields', async () => {
|
|
46
|
-
const { getMachineStatus } = await import('../status.js');
|
|
47
|
-
const probe = vi.fn().mockResolvedValue(null);
|
|
48
|
-
const loadCtx = vi.fn().mockResolvedValue({ ctx: null });
|
|
49
|
-
const readToken = vi.fn().mockReturnValue(null);
|
|
50
|
-
const ms = await getMachineStatus(probe, loadCtx, readToken);
|
|
51
|
-
expect(ms).toHaveProperty('version');
|
|
52
|
-
expect(ms).toHaveProperty('port');
|
|
53
|
-
expect(ms).toHaveProperty('host_cp');
|
|
54
|
-
expect(ms).toHaveProperty('token_present');
|
|
55
|
-
expect(ms).toHaveProperty('worlds');
|
|
56
|
-
expect(ms).toHaveProperty('update_available');
|
|
57
|
-
expect(ms).toHaveProperty('last_update_check');
|
|
58
|
-
// Verify it round-trips through JSON
|
|
59
|
-
expect(() => JSON.stringify(ms)).not.toThrow();
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=status.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/status.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/stop.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for D2 — `olam stop` command (Phase D).
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
5
|
-
vi.mock('../host-cp.js', () => ({
|
|
6
|
-
stopHostCp: vi.fn(),
|
|
7
|
-
startHostCp: vi.fn(),
|
|
8
|
-
readToken: vi.fn().mockReturnValue(null),
|
|
9
|
-
probeHostCp: vi.fn().mockResolvedValue(null),
|
|
10
|
-
HOST_CP_PORT: 19000,
|
|
11
|
-
}));
|
|
12
|
-
describe('doStop (D2)', () => {
|
|
13
|
-
it('calls stopFn once', async () => {
|
|
14
|
-
const { doStop } = await import('../stop.js');
|
|
15
|
-
const stopFn = vi.fn().mockResolvedValue(undefined);
|
|
16
|
-
await doStop(stopFn);
|
|
17
|
-
expect(stopFn).toHaveBeenCalledOnce();
|
|
18
|
-
});
|
|
19
|
-
it('propagates stopFn failure via exitCode', async () => {
|
|
20
|
-
const { doStop } = await import('../stop.js');
|
|
21
|
-
const stopFn = vi.fn().mockImplementation(async () => {
|
|
22
|
-
process.exitCode = 1;
|
|
23
|
-
});
|
|
24
|
-
const prev = process.exitCode;
|
|
25
|
-
await doStop(stopFn);
|
|
26
|
-
expect(process.exitCode).toBe(1);
|
|
27
|
-
process.exitCode = prev;
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
//# sourceMappingURL=stop.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stop.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/stop.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9B,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;IACnB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;IACpB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;IACxC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC5C,YAAY,EAAE,KAAK;CACpB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;YACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,QAAQ,GAAG,IAA0B,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/update.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for F1/F2 — `olam update` core install flow + flags.
|
|
3
|
-
*
|
|
4
|
-
* Injectable exec + readConfig + reconcile — no npm or filesystem side effects.
|
|
5
|
-
*/
|
|
6
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
7
|
-
import { doUpdate, doCheck, doRollback, getCurrentVersion, readLastStable, writeLastStable, } from '../update.js';
|
|
8
|
-
// Cut transitive @olam/adapters from the test graph
|
|
9
|
-
vi.mock('../../lib/symlink-reconcile.js', () => ({
|
|
10
|
-
reconcileSkillSymlinks: vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }),
|
|
11
|
-
}));
|
|
12
|
-
function makeExec(responses) {
|
|
13
|
-
return (cmd) => {
|
|
14
|
-
for (const [pat, res] of Object.entries(responses)) {
|
|
15
|
-
if (cmd.includes(pat))
|
|
16
|
-
return res;
|
|
17
|
-
}
|
|
18
|
-
return { exitCode: 0, stdout: '', stderr: '' };
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
const okInstall = { exitCode: 0, stdout: '', stderr: '' };
|
|
22
|
-
const failInstall = { exitCode: 1, stdout: '', stderr: 'E503 registry down' };
|
|
23
|
-
const npmLsResult = {
|
|
24
|
-
exitCode: 0,
|
|
25
|
-
stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.4' } } }),
|
|
26
|
-
stderr: '',
|
|
27
|
-
};
|
|
28
|
-
const npmLsNew = {
|
|
29
|
-
exitCode: 0,
|
|
30
|
-
stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.5' } } }),
|
|
31
|
-
stderr: '',
|
|
32
|
-
};
|
|
33
|
-
const npmRootResult = { exitCode: 0, stdout: '/usr/local/lib/node_modules', stderr: '' };
|
|
34
|
-
const noConfig = async () => null;
|
|
35
|
-
const stableConfig = async () => ({ channel: 'stable' });
|
|
36
|
-
describe('doUpdate (F1 core install flow)', () => {
|
|
37
|
-
it('runs npm install with the configured channel', async () => {
|
|
38
|
-
const calls = [];
|
|
39
|
-
const exec = (cmd) => {
|
|
40
|
-
calls.push(cmd);
|
|
41
|
-
if (cmd.includes('npm ls'))
|
|
42
|
-
return npmLsResult;
|
|
43
|
-
if (cmd.includes('npm install'))
|
|
44
|
-
return okInstall;
|
|
45
|
-
if (cmd.includes('npm root'))
|
|
46
|
-
return npmRootResult;
|
|
47
|
-
return okInstall;
|
|
48
|
-
};
|
|
49
|
-
await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), stableConfig, exec);
|
|
50
|
-
expect(calls.some((c) => c.includes('npm install -g @pleri/olam-cli@stable'))).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
it('returns exitCode=0 and action=installed on success', async () => {
|
|
53
|
-
const execCalls = { 'npm ls': npmLsNew, 'npm install': okInstall, 'npm root': npmRootResult };
|
|
54
|
-
const exec = makeExec(execCalls);
|
|
55
|
-
const result = await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), noConfig, exec);
|
|
56
|
-
expect(result.action).toBe('installed');
|
|
57
|
-
expect(result.exitCode).toBe(0);
|
|
58
|
-
});
|
|
59
|
-
it('auto-restores to prev version on npm failure', async () => {
|
|
60
|
-
const calls = [];
|
|
61
|
-
const exec = (cmd) => {
|
|
62
|
-
calls.push(cmd);
|
|
63
|
-
if (cmd.includes('npm ls'))
|
|
64
|
-
return npmLsResult;
|
|
65
|
-
if (cmd.includes('npm install -g @pleri/olam-cli@stable'))
|
|
66
|
-
return failInstall;
|
|
67
|
-
if (cmd.includes('npm install -g @pleri/olam-cli@0.1.4'))
|
|
68
|
-
return okInstall; // restore
|
|
69
|
-
return okInstall;
|
|
70
|
-
};
|
|
71
|
-
const result = await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), stableConfig, exec);
|
|
72
|
-
expect(result.action).toBe('restored');
|
|
73
|
-
expect(result.exitCode).toBe(11);
|
|
74
|
-
const restoreCall = calls.find((c) => c.includes('npm install') && c.includes('0.1.4'));
|
|
75
|
-
expect(restoreCall).toBeDefined();
|
|
76
|
-
});
|
|
77
|
-
it('returns exitCode=11 when install fails', async () => {
|
|
78
|
-
const exec = makeExec({ 'npm ls': npmLsResult, 'npm install': failInstall });
|
|
79
|
-
const result = await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), noConfig, exec);
|
|
80
|
-
expect(result.exitCode).toBe(11);
|
|
81
|
-
});
|
|
82
|
-
it('calls reconcile on successful install', async () => {
|
|
83
|
-
const reconMock = vi.fn().mockReturnValue({ added: ['olam-new'], removed: [], kept: [] });
|
|
84
|
-
const exec = makeExec({ 'npm ls': npmLsNew, 'npm install': okInstall, 'npm root': npmRootResult });
|
|
85
|
-
const result = await doUpdate({ quiet: true }, exec, reconMock, stableConfig, exec);
|
|
86
|
-
expect(reconMock).toHaveBeenCalled();
|
|
87
|
-
expect(result.symlinks?.added).toContain('olam-new');
|
|
88
|
-
});
|
|
89
|
-
it('does NOT call reconcile on failed install', async () => {
|
|
90
|
-
const reconMock = vi.fn();
|
|
91
|
-
const exec = makeExec({ 'npm ls': npmLsResult, 'npm install': failInstall });
|
|
92
|
-
await doUpdate({ quiet: true }, exec, reconMock, noConfig, exec);
|
|
93
|
-
expect(reconMock).not.toHaveBeenCalled();
|
|
94
|
-
});
|
|
95
|
-
it('uses channel from config when not specified in opts', async () => {
|
|
96
|
-
const calls = [];
|
|
97
|
-
const exec = (cmd) => {
|
|
98
|
-
calls.push(cmd);
|
|
99
|
-
if (cmd.includes('npm ls'))
|
|
100
|
-
return npmLsResult;
|
|
101
|
-
return okInstall;
|
|
102
|
-
};
|
|
103
|
-
const cfg = async () => ({ channel: 'beta' });
|
|
104
|
-
await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), cfg, exec);
|
|
105
|
-
expect(calls.some((c) => c.includes('@beta'))).toBe(true);
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
describe('getCurrentVersion', () => {
|
|
109
|
-
it('parses version from npm ls --json output', () => {
|
|
110
|
-
const exec = makeExec({ 'npm ls': npmLsResult });
|
|
111
|
-
expect(getCurrentVersion(exec)).toBe('0.1.4');
|
|
112
|
-
});
|
|
113
|
-
it('returns null when npm ls fails', () => {
|
|
114
|
-
const exec = makeExec({ 'npm ls': { exitCode: 1, stdout: '', stderr: '' } });
|
|
115
|
-
expect(getCurrentVersion(exec)).toBeNull();
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe('readLastStable / writeLastStable', () => {
|
|
119
|
-
it('round-trips version through a temp file', () => {
|
|
120
|
-
const tmpFile = `/tmp/olam-test-last-stable-${Date.now()}.txt`;
|
|
121
|
-
writeLastStable('0.1.3', tmpFile);
|
|
122
|
-
expect(readLastStable(tmpFile)).toBe('0.1.3');
|
|
123
|
-
});
|
|
124
|
-
it('returns null for missing file', () => {
|
|
125
|
-
expect(readLastStable('/tmp/nonexistent-olam-stable-xyz.txt')).toBeNull();
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
// ── F2 flag tests ────────────────────────────────────────────────────────────
|
|
129
|
-
describe('doCheck (F2 --check)', () => {
|
|
130
|
-
it('returns already-current when current matches stable dist-tag', async () => {
|
|
131
|
-
const exec = makeExec({
|
|
132
|
-
'npm ls': { exitCode: 0, stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.5' } } }), stderr: '' },
|
|
133
|
-
'npm view': { exitCode: 0, stdout: '0.1.5\n', stderr: '' },
|
|
134
|
-
});
|
|
135
|
-
const result = await doCheck(exec);
|
|
136
|
-
expect(result.action).toBe('already-current');
|
|
137
|
-
expect(result.exitCode).toBe(10);
|
|
138
|
-
});
|
|
139
|
-
it('returns update-available when newer version exists', async () => {
|
|
140
|
-
const exec = makeExec({
|
|
141
|
-
'npm ls': { exitCode: 0, stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.4' } } }), stderr: '' },
|
|
142
|
-
'npm view': { exitCode: 0, stdout: '0.1.5\n', stderr: '' },
|
|
143
|
-
});
|
|
144
|
-
const result = await doCheck(exec);
|
|
145
|
-
expect(result.action).toBe('update-available');
|
|
146
|
-
expect(result.exitCode).toBe(0);
|
|
147
|
-
expect(result.current).toBe('0.1.4');
|
|
148
|
-
expect(result.latest).toBe('0.1.5');
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
// ── F3 freeze / force / upgrade_blocked ──────────────────────────────────────
|
|
152
|
-
describe('doUpdate (F3 freeze + force)', () => {
|
|
153
|
-
it('returns failed when auto_update=false and no --force', async () => {
|
|
154
|
-
const frozenConfig = async () => ({ channel: 'stable', auto_update: false });
|
|
155
|
-
const exec = makeExec({ 'npm ls': npmLsResult, 'npm install': okInstall, 'npm root': npmRootResult });
|
|
156
|
-
const result = await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), frozenConfig, exec);
|
|
157
|
-
expect(result.exitCode).toBe(11);
|
|
158
|
-
expect(result.action).toBe('failed');
|
|
159
|
-
});
|
|
160
|
-
it('proceeds when auto_update=false but --force is set', async () => {
|
|
161
|
-
const frozenConfig = async () => ({ channel: 'stable', auto_update: false });
|
|
162
|
-
const exec = makeExec({ 'npm ls': npmLsNew, 'npm install': okInstall, 'npm root': npmRootResult });
|
|
163
|
-
const result = await doUpdate({ quiet: true, force: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), frozenConfig, exec);
|
|
164
|
-
expect(result.action).toBe('installed');
|
|
165
|
-
expect(result.exitCode).toBe(0);
|
|
166
|
-
});
|
|
167
|
-
it('blocks install when upgrade_blocked is true (without --force)', async () => {
|
|
168
|
-
const exec = (cmd) => {
|
|
169
|
-
if (cmd.includes('npm ls'))
|
|
170
|
-
return npmLsResult;
|
|
171
|
-
// isUpgradeBlocked now issues a single npm view ... olam.upgrade_blocked command
|
|
172
|
-
if (cmd.includes('olam.upgrade_blocked'))
|
|
173
|
-
return { exitCode: 0, stdout: 'true', stderr: '' };
|
|
174
|
-
return okInstall;
|
|
175
|
-
};
|
|
176
|
-
const result = await doUpdate({ quiet: true }, exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), noConfig, exec);
|
|
177
|
-
expect(result.exitCode).toBe(11);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
describe('doRollback (F2 --rollback)', () => {
|
|
181
|
-
it('returns nothing-to-rollback (exit 14) when no cache file', async () => {
|
|
182
|
-
const exec = makeExec({ 'npm ls': { exitCode: 1, stdout: '', stderr: '' } });
|
|
183
|
-
// Ensure no temp cache exists — use a fresh instance without a pre-written file
|
|
184
|
-
// doRollback reads LAST_STABLE_FILE by default; since it won't exist in CI → exit 14
|
|
185
|
-
// We use the injectable path by ensuring writeLastStable hasn't been called for this file.
|
|
186
|
-
// In this test, we rely on the global readLastStable returning null for missing file.
|
|
187
|
-
// However, to avoid test pollution from the F1 round-trip test, skip mocking the file.
|
|
188
|
-
// Just exercise the path via injected exec that has no npm ls hit.
|
|
189
|
-
const result = await doRollback(exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), exec);
|
|
190
|
-
// If last-stable.txt exists from the prior round-trip test in /tmp, this may not be 14.
|
|
191
|
-
// Accept either nothing-to-rollback OR already-at-cached as valid no-prev behaviors.
|
|
192
|
-
expect([14, 0]).toContain(result.exitCode);
|
|
193
|
-
});
|
|
194
|
-
it('installs the previous version on rollback (via last-stable.txt global path)', async () => {
|
|
195
|
-
// Write '0.1.3' to the default LAST_STABLE_FILE so doRollback can read it
|
|
196
|
-
writeLastStable('0.1.3');
|
|
197
|
-
const calls = [];
|
|
198
|
-
const exec = (cmd) => {
|
|
199
|
-
calls.push(cmd);
|
|
200
|
-
if (cmd.includes('npm ls'))
|
|
201
|
-
return { exitCode: 0, stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.5' } } }), stderr: '' };
|
|
202
|
-
if (cmd.includes('npm install'))
|
|
203
|
-
return okInstall;
|
|
204
|
-
if (cmd.includes('npm root'))
|
|
205
|
-
return npmRootResult;
|
|
206
|
-
return okInstall;
|
|
207
|
-
};
|
|
208
|
-
const result = await doRollback(exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), exec);
|
|
209
|
-
expect(result.action).toBe('rolled-back');
|
|
210
|
-
expect(result.restoredVersion).toBe('0.1.3');
|
|
211
|
-
expect(calls.some((c) => c.includes('npm install') && c.includes('0.1.3'))).toBe(true);
|
|
212
|
-
});
|
|
213
|
-
it('returns already-at-cached (OQ26) when current == last-stable', async () => {
|
|
214
|
-
// Write the "prev" version as the same as current
|
|
215
|
-
writeLastStable('0.1.5');
|
|
216
|
-
const exec = makeExec({
|
|
217
|
-
'npm ls': { exitCode: 0, stdout: JSON.stringify({ dependencies: { '@pleri/olam-cli': { version: '0.1.5' } } }), stderr: '' },
|
|
218
|
-
});
|
|
219
|
-
const result = await doRollback(exec, vi.fn().mockReturnValue({ added: [], removed: [], kept: [] }), exec);
|
|
220
|
-
expect(result.action).toBe('already-at-cached');
|
|
221
|
-
expect(result.exitCode).toBe(0);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
//# sourceMappingURL=update.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/update.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Verifies Phase 2a A4 sequential build orchestration: `olam upgrade` invokes
|
|
3
|
-
* `bash build-auth.sh` → `bash build-devbox.sh` → `bash build-host-cp.sh` in
|
|
4
|
-
* that order with `OLAM_TAG=olam-next` env, and the devbox step uses inherit
|
|
5
|
-
* stdio (live tee) for cold-cache visibility.
|
|
6
|
-
*
|
|
7
|
-
* The CLI source is read as text and parsed for the load-bearing invariants:
|
|
8
|
-
* - Build scripts listed in correct order
|
|
9
|
-
* - OLAM_TAG=olam-next env propagated
|
|
10
|
-
* - Devbox uses tee (inherit stdio) per F13 audit fix
|
|
11
|
-
* - Other two use silent runStep capture
|
|
12
|
-
*
|
|
13
|
-
* Direct integration testing (spawning real `bash build-*.sh`) lives at
|
|
14
|
-
* tests/integration/build-scripts-olam-tag.sh — manual smoke; not in CI.
|
|
15
|
-
*
|
|
16
|
-
* Run: `cd packages/cli && npx vitest run src/commands/__tests__/upgrade.all-three.test.ts`
|
|
17
|
-
*/
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=upgrade.all-three.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.all-three.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/upgrade.all-three.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|