@skillsmith/cli 0.7.0 → 0.7.2
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/CHANGELOG.md +8 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +8 -40
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/login.test.js +12 -32
- package/dist/src/commands/login.test.js.map +1 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils/skills-directory.d.ts.map +1 -1
- package/dist/src/utils/skills-directory.js +5 -3
- package/dist/src/utils/skills-directory.js.map +1 -1
- package/dist/src/utils/startup-header-gate.d.ts +29 -0
- package/dist/src/utils/startup-header-gate.d.ts.map +1 -0
- package/dist/src/utils/startup-header-gate.js +44 -0
- package/dist/src/utils/startup-header-gate.js.map +1 -0
- package/dist/src/utils/startup-header-gate.test.d.ts +2 -0
- package/dist/src/utils/startup-header-gate.test.d.ts.map +1 -0
- package/dist/src/utils/startup-header-gate.test.js +46 -0
- package/dist/src/utils/startup-header-gate.test.js.map +1 -0
- package/dist/tests/skills-directory.test.js +11 -0
- package/dist/tests/skills-directory.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/commands/login.post-login-sync.test.d.ts +0 -2
- package/dist/src/commands/login.post-login-sync.test.d.ts.map +0 -1
- package/dist/src/commands/login.post-login-sync.test.js +0 -120
- package/dist/src/commands/login.post-login-sync.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.post-login-sync.test.d.ts","sourceRoot":"","sources":["../../../src/commands/login.post-login-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
// SMI-4917 Bug 3: post-login registry auto-sync.
|
|
2
|
-
// PLS-1: device-code success path runs the post-login sync.
|
|
3
|
-
// PLS-2: a failed post-login sync is non-fatal — login still exits 0.
|
|
4
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
-
import { mockDeviceCodeSuccess } from './login.test-helpers.js';
|
|
6
|
-
vi.mock('readline', () => {
|
|
7
|
-
const createInterface = vi.fn();
|
|
8
|
-
return { default: { createInterface }, createInterface };
|
|
9
|
-
});
|
|
10
|
-
vi.mock('@skillsmith/core', () => ({
|
|
11
|
-
loadCredentials: vi.fn(),
|
|
12
|
-
storeCredentials: vi.fn(),
|
|
13
|
-
getApiKey: vi.fn(),
|
|
14
|
-
getApiBaseUrl: vi.fn().mockReturnValue('https://api.skillsmith.app/functions/v1'),
|
|
15
|
-
storeApiKey: vi.fn(),
|
|
16
|
-
isValidApiKeyFormat: vi.fn(),
|
|
17
|
-
}));
|
|
18
|
-
vi.mock('@inquirer/prompts', () => ({ password: vi.fn() }));
|
|
19
|
-
vi.mock('open', () => ({ default: vi.fn() }));
|
|
20
|
-
// postLoginSync (SMI-4917) opens a DB and runs runRegistrySync — both stubbed.
|
|
21
|
-
const mockOpenCliDatabase = vi.fn();
|
|
22
|
-
const mockRunRegistrySync = vi.fn();
|
|
23
|
-
vi.mock('../utils/open-database.js', () => ({
|
|
24
|
-
openCliDatabase: (...args) => mockOpenCliDatabase(...args),
|
|
25
|
-
}));
|
|
26
|
-
vi.mock('./run-registry-sync.js', () => ({
|
|
27
|
-
runRegistrySync: (...args) => mockRunRegistrySync(...args),
|
|
28
|
-
}));
|
|
29
|
-
vi.mock('ora', () => {
|
|
30
|
-
const spinner = {
|
|
31
|
-
start: vi.fn(() => spinner),
|
|
32
|
-
succeed: vi.fn(() => spinner),
|
|
33
|
-
warn: vi.fn(() => spinner),
|
|
34
|
-
fail: vi.fn(() => spinner),
|
|
35
|
-
stop: vi.fn(() => spinner),
|
|
36
|
-
text: '',
|
|
37
|
-
};
|
|
38
|
-
return { default: vi.fn(() => spinner) };
|
|
39
|
-
});
|
|
40
|
-
import { createLoginCommand } from './login.js';
|
|
41
|
-
import { loadCredentials, storeCredentials } from '@skillsmith/core';
|
|
42
|
-
const mockLoadCredentials = vi.mocked(loadCredentials);
|
|
43
|
-
const mockStoreCredentials = vi.mocked(storeCredentials);
|
|
44
|
-
async function runCommand(args = []) {
|
|
45
|
-
const cmd = createLoginCommand();
|
|
46
|
-
await cmd.parseAsync(['node', 'login', ...args]);
|
|
47
|
-
}
|
|
48
|
-
describe('SMI-4917 Bug 3: postLoginSync', () => {
|
|
49
|
-
let consoleLogSpy;
|
|
50
|
-
let consoleErrorSpy;
|
|
51
|
-
let processExitSpy;
|
|
52
|
-
let originalEnv;
|
|
53
|
-
let originalFetch;
|
|
54
|
-
beforeEach(() => {
|
|
55
|
-
vi.clearAllMocks();
|
|
56
|
-
vi.useFakeTimers();
|
|
57
|
-
originalEnv = { ...process.env };
|
|
58
|
-
originalFetch = global.fetch;
|
|
59
|
-
process.env['CI'] = 'true';
|
|
60
|
-
delete process.env['SKILLSMITH_API_KEY'];
|
|
61
|
-
mockLoadCredentials.mockResolvedValue(null);
|
|
62
|
-
mockStoreCredentials.mockResolvedValue(undefined);
|
|
63
|
-
mockOpenCliDatabase.mockResolvedValue({ close: vi.fn() });
|
|
64
|
-
mockRunRegistrySync.mockResolvedValue({
|
|
65
|
-
success: true,
|
|
66
|
-
skillsAdded: 0,
|
|
67
|
-
skillsUpdated: 0,
|
|
68
|
-
skillsUnchanged: 0,
|
|
69
|
-
totalProcessed: 0,
|
|
70
|
-
errors: [],
|
|
71
|
-
durationMs: 1,
|
|
72
|
-
dryRun: false,
|
|
73
|
-
});
|
|
74
|
-
consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
75
|
-
consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
76
|
-
processExitSpy = vi
|
|
77
|
-
.spyOn(process, 'exit')
|
|
78
|
-
.mockImplementation((code) => {
|
|
79
|
-
vi.clearAllTimers();
|
|
80
|
-
throw new Error(`process.exit(${code ?? 0})`);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
afterEach(() => {
|
|
84
|
-
vi.useRealTimers();
|
|
85
|
-
process.env = originalEnv;
|
|
86
|
-
global.fetch = originalFetch;
|
|
87
|
-
consoleLogSpy.mockRestore();
|
|
88
|
-
consoleErrorSpy.mockRestore();
|
|
89
|
-
processExitSpy.mockRestore();
|
|
90
|
-
});
|
|
91
|
-
it('PLS-1: device-code success path runs the post-login registry sync', async () => {
|
|
92
|
-
mockDeviceCodeSuccess();
|
|
93
|
-
mockRunRegistrySync.mockResolvedValue({
|
|
94
|
-
success: true,
|
|
95
|
-
skillsAdded: 12,
|
|
96
|
-
skillsUpdated: 0,
|
|
97
|
-
skillsUnchanged: 0,
|
|
98
|
-
totalProcessed: 12,
|
|
99
|
-
errors: [],
|
|
100
|
-
durationMs: 1,
|
|
101
|
-
dryRun: false,
|
|
102
|
-
});
|
|
103
|
-
const run = runCommand();
|
|
104
|
-
run.catch(() => { });
|
|
105
|
-
await vi.runAllTimersAsync();
|
|
106
|
-
await expect(run).rejects.toThrow('process.exit(0)');
|
|
107
|
-
expect(mockRunRegistrySync).toHaveBeenCalledTimes(1);
|
|
108
|
-
});
|
|
109
|
-
it('PLS-2: a failed post-login sync is non-fatal — login still exits 0', async () => {
|
|
110
|
-
mockDeviceCodeSuccess();
|
|
111
|
-
// Sync fails; credentials were already persisted, so login must still succeed.
|
|
112
|
-
mockRunRegistrySync.mockRejectedValue(new Error('registry unreachable'));
|
|
113
|
-
const run = runCommand();
|
|
114
|
-
run.catch(() => { });
|
|
115
|
-
await vi.runAllTimersAsync();
|
|
116
|
-
await expect(run).rejects.toThrow('process.exit(0)');
|
|
117
|
-
expect(mockStoreCredentials).toHaveBeenCalled();
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
//# sourceMappingURL=login.post-login-sync.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.post-login-sync.test.js","sourceRoot":"","sources":["../../../src/commands/login.post-login-sync.test.ts"],"names":[],"mappings":"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"}
|