@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.
@@ -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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"}