@solidnumber/cli 1.7.2 → 1.7.3
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/audit.js +1 -1
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/brand.js +122 -0
- package/dist/commands/brand.js.map +1 -1
- package/dist/commands/clone.d.ts.map +1 -1
- package/dist/commands/clone.js +67 -0
- package/dist/commands/clone.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +4 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/demo.d.ts +12 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +257 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +377 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inventory.js +5 -5
- package/dist/commands/inventory.js.map +1 -1
- package/dist/commands/payment.js +101 -0
- package/dist/commands/payment.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +42 -0
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/sandbox.d.ts.map +1 -1
- package/dist/commands/sandbox.js +113 -0
- package/dist/commands/sandbox.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -4
- package/dist/lib/config.js.map +1 -1
- package/package.json +2 -1
- package/dist/__tests__/commands/auth.test.d.ts +0 -6
- package/dist/__tests__/commands/auth.test.d.ts.map +0 -1
- package/dist/__tests__/commands/auth.test.js +0 -91
- package/dist/__tests__/commands/auth.test.js.map +0 -1
- package/dist/__tests__/commands/billing.test.d.ts +0 -6
- package/dist/__tests__/commands/billing.test.d.ts.map +0 -1
- package/dist/__tests__/commands/billing.test.js +0 -141
- package/dist/__tests__/commands/billing.test.js.map +0 -1
- package/dist/__tests__/commands/company.test.d.ts +0 -6
- package/dist/__tests__/commands/company.test.d.ts.map +0 -1
- package/dist/__tests__/commands/company.test.js +0 -129
- package/dist/__tests__/commands/company.test.js.map +0 -1
- package/dist/__tests__/commands/deploy.test.d.ts +0 -8
- package/dist/__tests__/commands/deploy.test.d.ts.map +0 -1
- package/dist/__tests__/commands/deploy.test.js +0 -190
- package/dist/__tests__/commands/deploy.test.js.map +0 -1
- package/dist/__tests__/commands/history.test.d.ts +0 -8
- package/dist/__tests__/commands/history.test.d.ts.map +0 -1
- package/dist/__tests__/commands/history.test.js +0 -213
- package/dist/__tests__/commands/history.test.js.map +0 -1
- package/dist/__tests__/commands/import.test.d.ts +0 -4
- package/dist/__tests__/commands/import.test.d.ts.map +0 -1
- package/dist/__tests__/commands/import.test.js +0 -71
- package/dist/__tests__/commands/import.test.js.map +0 -1
- package/dist/__tests__/commands/logs.test.d.ts +0 -5
- package/dist/__tests__/commands/logs.test.d.ts.map +0 -1
- package/dist/__tests__/commands/logs.test.js +0 -124
- package/dist/__tests__/commands/logs.test.js.map +0 -1
- package/dist/__tests__/commands/migrate.test.d.ts +0 -9
- package/dist/__tests__/commands/migrate.test.d.ts.map +0 -1
- package/dist/__tests__/commands/migrate.test.js +0 -277
- package/dist/__tests__/commands/migrate.test.js.map +0 -1
- package/dist/__tests__/commands/pages.test.d.ts +0 -5
- package/dist/__tests__/commands/pages.test.d.ts.map +0 -1
- package/dist/__tests__/commands/pages.test.js +0 -103
- package/dist/__tests__/commands/pages.test.js.map +0 -1
- package/dist/__tests__/commands/push.test.d.ts +0 -6
- package/dist/__tests__/commands/push.test.d.ts.map +0 -1
- package/dist/__tests__/commands/push.test.js +0 -113
- package/dist/__tests__/commands/push.test.js.map +0 -1
- package/dist/__tests__/commands/sandbox.test.d.ts +0 -5
- package/dist/__tests__/commands/sandbox.test.d.ts.map +0 -1
- package/dist/__tests__/commands/sandbox.test.js +0 -132
- package/dist/__tests__/commands/sandbox.test.js.map +0 -1
- package/dist/__tests__/commands/serve.test.d.ts +0 -5
- package/dist/__tests__/commands/serve.test.d.ts.map +0 -1
- package/dist/__tests__/commands/serve.test.js +0 -115
- package/dist/__tests__/commands/serve.test.js.map +0 -1
- package/dist/__tests__/commands/site.test.d.ts +0 -5
- package/dist/__tests__/commands/site.test.d.ts.map +0 -1
- package/dist/__tests__/commands/site.test.js +0 -92
- package/dist/__tests__/commands/site.test.js.map +0 -1
- package/dist/__tests__/commands/test.test.d.ts +0 -5
- package/dist/__tests__/commands/test.test.d.ts.map +0 -1
- package/dist/__tests__/commands/test.test.js +0 -220
- package/dist/__tests__/commands/test.test.js.map +0 -1
- package/dist/__tests__/integration/smoke.test.d.ts +0 -7
- package/dist/__tests__/integration/smoke.test.d.ts.map +0 -1
- package/dist/__tests__/integration/smoke.test.js +0 -135
- package/dist/__tests__/integration/smoke.test.js.map +0 -1
- package/dist/__tests__/lib/api-client.test.d.ts +0 -6
- package/dist/__tests__/lib/api-client.test.d.ts.map +0 -1
- package/dist/__tests__/lib/api-client.test.js +0 -74
- package/dist/__tests__/lib/api-client.test.js.map +0 -1
- package/dist/__tests__/lib/company-isolation.test.d.ts +0 -19
- package/dist/__tests__/lib/company-isolation.test.d.ts.map +0 -1
- package/dist/__tests__/lib/company-isolation.test.js +0 -96
- package/dist/__tests__/lib/company-isolation.test.js.map +0 -1
- package/dist/__tests__/lib/config.test.d.ts +0 -6
- package/dist/__tests__/lib/config.test.d.ts.map +0 -1
- package/dist/__tests__/lib/config.test.js +0 -131
- package/dist/__tests__/lib/config.test.js.map +0 -1
- package/dist/__tests__/setup.d.ts +0 -4
- package/dist/__tests__/setup.d.ts.map +0 -1
- package/dist/__tests__/setup.js +0 -25
- package/dist/__tests__/setup.js.map +0 -1
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Agent test command tests
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const api_client_1 = require("../../lib/api-client");
|
|
7
|
-
jest.mock('../../lib/api-client', () => ({
|
|
8
|
-
apiClient: {
|
|
9
|
-
agentTest: jest.fn(),
|
|
10
|
-
agentTestResults: jest.fn(),
|
|
11
|
-
},
|
|
12
|
-
handleApiError: jest.fn((e) => ({ message: e?.message || 'Error', status: 500 })),
|
|
13
|
-
}));
|
|
14
|
-
const mockApi = api_client_1.apiClient;
|
|
15
|
-
describe('test command', () => {
|
|
16
|
-
beforeEach(() => jest.clearAllMocks());
|
|
17
|
-
describe('single test — pass', () => {
|
|
18
|
-
it('sends prompt and validates contains assertions', async () => {
|
|
19
|
-
mockApi.agentTest.mockResolvedValue({
|
|
20
|
-
data: {
|
|
21
|
-
passed: true,
|
|
22
|
-
agent_type: 'customer_service',
|
|
23
|
-
prompt: 'what are your hours',
|
|
24
|
-
response: 'We are open Monday through Friday, 9am to 5pm.',
|
|
25
|
-
latency_ms: 450,
|
|
26
|
-
assertions_passed: [
|
|
27
|
-
{ type: 'contains', value: 'monday', passed: true },
|
|
28
|
-
{ type: 'contains', value: 'friday', passed: true },
|
|
29
|
-
],
|
|
30
|
-
assertions_failed: [],
|
|
31
|
-
assertion_count: 2,
|
|
32
|
-
},
|
|
33
|
-
status: 200,
|
|
34
|
-
success: true,
|
|
35
|
-
});
|
|
36
|
-
const result = await mockApi.agentTest({
|
|
37
|
-
agent_type: 'customer_service',
|
|
38
|
-
prompt: 'what are your hours',
|
|
39
|
-
assertions: ['monday', 'friday'],
|
|
40
|
-
});
|
|
41
|
-
expect(result.data.passed).toBe(true);
|
|
42
|
-
expect(result.data.assertions_passed).toHaveLength(2);
|
|
43
|
-
expect(result.data.assertions_failed).toHaveLength(0);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe('single test — fail', () => {
|
|
47
|
-
it('fails when response missing required content', async () => {
|
|
48
|
-
mockApi.agentTest.mockResolvedValue({
|
|
49
|
-
data: {
|
|
50
|
-
passed: false,
|
|
51
|
-
agent_type: 'customer_service',
|
|
52
|
-
prompt: 'what are your hours',
|
|
53
|
-
response: 'Please contact us for more information.',
|
|
54
|
-
latency_ms: 380,
|
|
55
|
-
assertions_passed: [],
|
|
56
|
-
assertions_failed: [
|
|
57
|
-
{ type: 'contains', value: 'monday', passed: false },
|
|
58
|
-
],
|
|
59
|
-
assertion_count: 1,
|
|
60
|
-
},
|
|
61
|
-
status: 200,
|
|
62
|
-
success: true,
|
|
63
|
-
});
|
|
64
|
-
const result = await mockApi.agentTest({
|
|
65
|
-
agent_type: 'customer_service',
|
|
66
|
-
prompt: 'what are your hours',
|
|
67
|
-
assertions: ['monday'],
|
|
68
|
-
});
|
|
69
|
-
expect(result.data.passed).toBe(false);
|
|
70
|
-
expect(result.data.assertions_failed).toHaveLength(1);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
describe('not-contains assertions', () => {
|
|
74
|
-
it('passes when forbidden content is absent', async () => {
|
|
75
|
-
mockApi.agentTest.mockResolvedValue({
|
|
76
|
-
data: {
|
|
77
|
-
passed: true,
|
|
78
|
-
assertions_passed: [
|
|
79
|
-
{ type: 'not_contains', value: 'competitor', passed: true },
|
|
80
|
-
],
|
|
81
|
-
assertions_failed: [],
|
|
82
|
-
},
|
|
83
|
-
status: 200,
|
|
84
|
-
success: true,
|
|
85
|
-
});
|
|
86
|
-
const result = await mockApi.agentTest({
|
|
87
|
-
agent_type: 'customer_service',
|
|
88
|
-
prompt: 'tell me about your product',
|
|
89
|
-
not_assertions: ['competitor'],
|
|
90
|
-
});
|
|
91
|
-
expect(result.data.passed).toBe(true);
|
|
92
|
-
});
|
|
93
|
-
it('fails when forbidden content is present', async () => {
|
|
94
|
-
mockApi.agentTest.mockResolvedValue({
|
|
95
|
-
data: {
|
|
96
|
-
passed: false,
|
|
97
|
-
assertions_passed: [],
|
|
98
|
-
assertions_failed: [
|
|
99
|
-
{ type: 'not_contains', value: 'free trial', passed: false },
|
|
100
|
-
],
|
|
101
|
-
},
|
|
102
|
-
status: 200,
|
|
103
|
-
success: true,
|
|
104
|
-
});
|
|
105
|
-
const result = await mockApi.agentTest({
|
|
106
|
-
agent_type: 'customer_service',
|
|
107
|
-
prompt: 'pricing info',
|
|
108
|
-
not_assertions: ['free trial'],
|
|
109
|
-
});
|
|
110
|
-
expect(result.data.passed).toBe(false);
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
describe('combined assertions', () => {
|
|
114
|
-
it('supports both contains and not-contains in same test', async () => {
|
|
115
|
-
mockApi.agentTest.mockResolvedValue({
|
|
116
|
-
data: {
|
|
117
|
-
passed: true,
|
|
118
|
-
assertions_passed: [
|
|
119
|
-
{ type: 'contains', value: 'pricing', passed: true },
|
|
120
|
-
{ type: 'not_contains', value: 'competitor', passed: true },
|
|
121
|
-
],
|
|
122
|
-
assertions_failed: [],
|
|
123
|
-
assertion_count: 2,
|
|
124
|
-
},
|
|
125
|
-
status: 200,
|
|
126
|
-
success: true,
|
|
127
|
-
});
|
|
128
|
-
const result = await mockApi.agentTest({
|
|
129
|
-
agent_type: 'customer_service',
|
|
130
|
-
prompt: 'tell me about pricing',
|
|
131
|
-
assertions: ['pricing'],
|
|
132
|
-
not_assertions: ['competitor'],
|
|
133
|
-
});
|
|
134
|
-
expect(result.data.passed).toBe(true);
|
|
135
|
-
expect(result.data.assertion_count).toBe(2);
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
describe('no assertions (response-only mode)', () => {
|
|
139
|
-
it('returns response without pass/fail when no assertions given', async () => {
|
|
140
|
-
mockApi.agentTest.mockResolvedValue({
|
|
141
|
-
data: {
|
|
142
|
-
passed: true,
|
|
143
|
-
agent_type: 'customer_service',
|
|
144
|
-
prompt: 'hello',
|
|
145
|
-
response: 'Hi! How can I help you today?',
|
|
146
|
-
latency_ms: 200,
|
|
147
|
-
assertions_passed: [],
|
|
148
|
-
assertions_failed: [],
|
|
149
|
-
assertion_count: 0,
|
|
150
|
-
},
|
|
151
|
-
status: 200,
|
|
152
|
-
success: true,
|
|
153
|
-
});
|
|
154
|
-
const result = await mockApi.agentTest({
|
|
155
|
-
agent_type: 'customer_service',
|
|
156
|
-
prompt: 'hello',
|
|
157
|
-
});
|
|
158
|
-
expect(result.data.response).toBeDefined();
|
|
159
|
-
expect(result.data.assertion_count).toBe(0);
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
describe('test execution errors', () => {
|
|
163
|
-
it('handles agent execution failures', async () => {
|
|
164
|
-
mockApi.agentTest.mockResolvedValue({
|
|
165
|
-
data: {
|
|
166
|
-
passed: false,
|
|
167
|
-
agent_type: 'customer_service',
|
|
168
|
-
prompt: 'test',
|
|
169
|
-
response: null,
|
|
170
|
-
error: 'Agent timeout after 30s',
|
|
171
|
-
latency_ms: 30000,
|
|
172
|
-
assertions_passed: [],
|
|
173
|
-
assertions_failed: [{ type: 'execution', detail: 'Agent timeout after 30s' }],
|
|
174
|
-
},
|
|
175
|
-
status: 200,
|
|
176
|
-
success: true,
|
|
177
|
-
});
|
|
178
|
-
const result = await mockApi.agentTest({
|
|
179
|
-
agent_type: 'customer_service',
|
|
180
|
-
prompt: 'test',
|
|
181
|
-
timeout_seconds: 30,
|
|
182
|
-
});
|
|
183
|
-
expect(result.data.passed).toBe(false);
|
|
184
|
-
expect(result.data.error).toContain('timeout');
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
describe('test results history', () => {
|
|
188
|
-
it('fetches recent test results', async () => {
|
|
189
|
-
mockApi.agentTestResults.mockResolvedValue({
|
|
190
|
-
data: {
|
|
191
|
-
results: [
|
|
192
|
-
{ timestamp: '2026-03-28T14:00:00Z', agent_type: 'customer_service', success: true, latency_ms: 450, tokens_used: 120 },
|
|
193
|
-
{ timestamp: '2026-03-28T13:00:00Z', agent_type: 'growth_intelligence', success: false, latency_ms: 1200, tokens_used: 300 },
|
|
194
|
-
],
|
|
195
|
-
count: 2,
|
|
196
|
-
},
|
|
197
|
-
status: 200,
|
|
198
|
-
success: true,
|
|
199
|
-
});
|
|
200
|
-
const result = await mockApi.agentTestResults(24, 50);
|
|
201
|
-
expect(mockApi.agentTestResults).toHaveBeenCalledWith(24, 50);
|
|
202
|
-
expect(result.data.results).toHaveLength(2);
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
describe('agent name resolution', () => {
|
|
206
|
-
it('resolves agent names to types', () => {
|
|
207
|
-
// Verify the mapping is used in test calls
|
|
208
|
-
const nameMap = {
|
|
209
|
-
sarah: 'customer_service',
|
|
210
|
-
marcus: 'growth_intelligence',
|
|
211
|
-
ada: 'orchestrator',
|
|
212
|
-
};
|
|
213
|
-
for (const [name, type] of Object.entries(nameMap)) {
|
|
214
|
-
expect(type).toBeDefined();
|
|
215
|
-
expect(type).not.toBe(name); // Name !== type
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
//# sourceMappingURL=test.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test.test.js","sourceRoot":"","sources":["../../../src/__tests__/commands/test.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Smoke tests — verify the CLI binary doesn't crash on basic operations.
|
|
3
|
-
* These run the actual compiled JS, not the TypeScript source.
|
|
4
|
-
* NO API calls — just verifies the CLI starts, shows help, and exits cleanly.
|
|
5
|
-
*/
|
|
6
|
-
export {};
|
|
7
|
-
//# sourceMappingURL=smoke.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smoke.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/smoke.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Smoke tests — verify the CLI binary doesn't crash on basic operations.
|
|
4
|
-
* These run the actual compiled JS, not the TypeScript source.
|
|
5
|
-
* NO API calls — just verifies the CLI starts, shows help, and exits cleanly.
|
|
6
|
-
*/
|
|
7
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
-
if (k2 === undefined) k2 = k;
|
|
9
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(o, k2, desc);
|
|
14
|
-
}) : (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
o[k2] = m[k];
|
|
17
|
-
}));
|
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
-
}) : function(o, v) {
|
|
21
|
-
o["default"] = v;
|
|
22
|
-
});
|
|
23
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
-
var ownKeys = function(o) {
|
|
25
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
-
var ar = [];
|
|
27
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
-
return ar;
|
|
29
|
-
};
|
|
30
|
-
return ownKeys(o);
|
|
31
|
-
};
|
|
32
|
-
return function (mod) {
|
|
33
|
-
if (mod && mod.__esModule) return mod;
|
|
34
|
-
var result = {};
|
|
35
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
-
__setModuleDefault(result, mod);
|
|
37
|
-
return result;
|
|
38
|
-
};
|
|
39
|
-
})();
|
|
40
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
const child_process_1 = require("child_process");
|
|
42
|
-
const path = __importStar(require("path"));
|
|
43
|
-
const fs = __importStar(require("fs"));
|
|
44
|
-
const CLI_PATH = path.join(__dirname, '..', '..', '..', 'dist', 'index.js');
|
|
45
|
-
function run(args) {
|
|
46
|
-
return (0, child_process_1.execSync)(`node ${CLI_PATH} ${args}`, {
|
|
47
|
-
timeout: 10000,
|
|
48
|
-
env: { ...process.env, HOME: '/tmp/solid-test-home', SOLID_API_KEY: '' },
|
|
49
|
-
}).toString();
|
|
50
|
-
}
|
|
51
|
-
function runSafe(args) {
|
|
52
|
-
try {
|
|
53
|
-
const stdout = (0, child_process_1.execSync)(`node ${CLI_PATH} ${args}`, {
|
|
54
|
-
timeout: 10000,
|
|
55
|
-
env: { ...process.env, HOME: '/tmp/solid-test-home', SOLID_API_KEY: '' },
|
|
56
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
57
|
-
}).toString();
|
|
58
|
-
return { stdout, exitCode: 0 };
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
return { stdout: e.stdout?.toString() || '', exitCode: e.status || 1 };
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
describe('CLI Smoke Tests', () => {
|
|
65
|
-
beforeAll(() => {
|
|
66
|
-
// Verify dist exists
|
|
67
|
-
if (!fs.existsSync(CLI_PATH)) {
|
|
68
|
-
throw new Error(`CLI not built. Run: npm run build\nExpected: ${CLI_PATH}`);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
it('--version prints a valid semver', () => {
|
|
72
|
-
const output = run('--version');
|
|
73
|
-
expect(output.trim()).toMatch(/^\d+\.\d+\.\d+$/);
|
|
74
|
-
});
|
|
75
|
-
it('--version matches package.json', () => {
|
|
76
|
-
const output = run('--version').trim();
|
|
77
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', '..', 'package.json'), 'utf-8'));
|
|
78
|
-
expect(output).toBe(pkg.version);
|
|
79
|
-
});
|
|
80
|
-
it('--help shows command list', () => {
|
|
81
|
-
const output = run('--help');
|
|
82
|
-
expect(output).toContain('auth');
|
|
83
|
-
expect(output).toContain('company');
|
|
84
|
-
expect(output).toContain('pages');
|
|
85
|
-
expect(output).toContain('site');
|
|
86
|
-
expect(output).toContain('clone');
|
|
87
|
-
expect(output).toContain('billing');
|
|
88
|
-
});
|
|
89
|
-
it('completion outputs zsh script', () => {
|
|
90
|
-
const output = run('completion');
|
|
91
|
-
expect(output).toContain('#compdef solid');
|
|
92
|
-
expect(output).toContain('_solid');
|
|
93
|
-
});
|
|
94
|
-
it('completion --bash outputs bash script', () => {
|
|
95
|
-
const output = run('completion --bash');
|
|
96
|
-
expect(output).toContain('_solid_completions');
|
|
97
|
-
expect(output).toContain('complete -F');
|
|
98
|
-
});
|
|
99
|
-
it('completion --fish outputs fish script', () => {
|
|
100
|
-
const output = run('completion --fish');
|
|
101
|
-
expect(output).toContain('complete -c solid');
|
|
102
|
-
});
|
|
103
|
-
it('auth status without credentials exits without crashing', () => {
|
|
104
|
-
const result = runSafe('auth status');
|
|
105
|
-
// Should not hang or segfault — exit code 0 or 1 are both fine
|
|
106
|
-
expect(result.exitCode).toBeLessThanOrEqual(1);
|
|
107
|
-
});
|
|
108
|
-
it('unknown command shows help, not a crash', () => {
|
|
109
|
-
const result = runSafe('nonexistent-command');
|
|
110
|
-
expect(result.exitCode).toBeLessThanOrEqual(1);
|
|
111
|
-
});
|
|
112
|
-
it('pages --help does not crash', () => {
|
|
113
|
-
const output = run('pages --help');
|
|
114
|
-
expect(output).toContain('list');
|
|
115
|
-
expect(output).toContain('publish');
|
|
116
|
-
});
|
|
117
|
-
it('site --help does not crash', () => {
|
|
118
|
-
const output = run('site --help');
|
|
119
|
-
expect(output).toContain('list');
|
|
120
|
-
expect(output).toContain('create');
|
|
121
|
-
expect(output).toContain('templates');
|
|
122
|
-
});
|
|
123
|
-
it('billing --help does not crash', () => {
|
|
124
|
-
const output = run('billing --help');
|
|
125
|
-
expect(output).toContain('status');
|
|
126
|
-
expect(output).toContain('checkout-link');
|
|
127
|
-
expect(output).toContain('invoice');
|
|
128
|
-
});
|
|
129
|
-
it('seo --help does not crash', () => {
|
|
130
|
-
const output = run('seo --help');
|
|
131
|
-
expect(output).toContain('site-audit');
|
|
132
|
-
expect(output).toContain('report');
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
//# sourceMappingURL=smoke.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smoke.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/smoke.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/lib/api-client.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* API Client tests — verifies error handling and request shapes.
|
|
4
|
-
* Mocks axios so NO real HTTP calls are made.
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
const api_client_1 = require("../../lib/api-client");
|
|
11
|
-
const axios_1 = __importDefault(require("axios"));
|
|
12
|
-
describe('handleApiError', () => {
|
|
13
|
-
it('extracts detail from axios error response', () => {
|
|
14
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(true);
|
|
15
|
-
const error = {
|
|
16
|
-
isAxiosError: true,
|
|
17
|
-
response: { status: 404, data: { detail: 'Not found' } },
|
|
18
|
-
message: 'Request failed',
|
|
19
|
-
};
|
|
20
|
-
const result = (0, api_client_1.handleApiError)(error);
|
|
21
|
-
expect(result.message).toBe('Not found');
|
|
22
|
-
expect(result.status).toBe(404);
|
|
23
|
-
});
|
|
24
|
-
it('extracts message field when detail is missing', () => {
|
|
25
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(true);
|
|
26
|
-
const error = {
|
|
27
|
-
isAxiosError: true,
|
|
28
|
-
response: { status: 400, data: { message: 'Bad request' } },
|
|
29
|
-
message: 'Request failed',
|
|
30
|
-
};
|
|
31
|
-
const result = (0, api_client_1.handleApiError)(error);
|
|
32
|
-
expect(result.message).toBe('Bad request');
|
|
33
|
-
expect(result.status).toBe(400);
|
|
34
|
-
});
|
|
35
|
-
it('falls back to axios message when no response data', () => {
|
|
36
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(true);
|
|
37
|
-
const error = {
|
|
38
|
-
isAxiosError: true,
|
|
39
|
-
response: { status: 500, data: {} },
|
|
40
|
-
message: 'Network Error',
|
|
41
|
-
};
|
|
42
|
-
const result = (0, api_client_1.handleApiError)(error);
|
|
43
|
-
expect(result.message).toBe('Network Error');
|
|
44
|
-
});
|
|
45
|
-
it('handles non-axios Error objects', () => {
|
|
46
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(false);
|
|
47
|
-
const result = (0, api_client_1.handleApiError)(new Error('Connection timeout'));
|
|
48
|
-
expect(result.message).toBe('Connection timeout');
|
|
49
|
-
expect(result.status).toBe(500);
|
|
50
|
-
});
|
|
51
|
-
it('handles unknown error types', () => {
|
|
52
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(false);
|
|
53
|
-
const result = (0, api_client_1.handleApiError)('some string error');
|
|
54
|
-
expect(result.message).toBe('Unknown error');
|
|
55
|
-
expect(result.status).toBe(500);
|
|
56
|
-
});
|
|
57
|
-
it('handles null/undefined errors', () => {
|
|
58
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(false);
|
|
59
|
-
const result = (0, api_client_1.handleApiError)(null);
|
|
60
|
-
expect(result.message).toBe('Unknown error');
|
|
61
|
-
});
|
|
62
|
-
it('returns 401 status for auth errors', () => {
|
|
63
|
-
jest.spyOn(axios_1.default, 'isAxiosError').mockReturnValue(true);
|
|
64
|
-
const error = {
|
|
65
|
-
isAxiosError: true,
|
|
66
|
-
response: { status: 401, data: { detail: 'Token expired' } },
|
|
67
|
-
message: 'Unauthorized',
|
|
68
|
-
};
|
|
69
|
-
const result = (0, api_client_1.handleApiError)(error);
|
|
70
|
-
expect(result.status).toBe(401);
|
|
71
|
-
expect(result.message).toBe('Token expired');
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
//# sourceMappingURL=api-client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/api-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Company Isolation Tests — CRITICAL SECURITY
|
|
3
|
-
*
|
|
4
|
-
* Verifies that the CLI cannot cross company boundaries.
|
|
5
|
-
* An AI agent bot with a JWT for company 42 must NEVER be able to
|
|
6
|
-
* read, write, or modify data belonging to company 43.
|
|
7
|
-
*
|
|
8
|
-
* The CLI relies on the backend for enforcement (JWT contains company_id,
|
|
9
|
-
* RLS policies on all 420 tables, middleware checks). These tests verify
|
|
10
|
-
* the CLI's CONTRIBUTION to isolation:
|
|
11
|
-
*
|
|
12
|
-
* 1. Every API call includes X-Company-ID header
|
|
13
|
-
* 2. Company switch replaces the JWT entirely (not just a header)
|
|
14
|
-
* 3. Config never falls back to a default company_id
|
|
15
|
-
* 4. Logout clears ALL company context
|
|
16
|
-
* 5. Reserved company IDs (1, 2, 3) are never used in normal operations
|
|
17
|
-
*/
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=company-isolation.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"company-isolation.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/lib/company-isolation.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Company Isolation Tests — CRITICAL SECURITY
|
|
4
|
-
*
|
|
5
|
-
* Verifies that the CLI cannot cross company boundaries.
|
|
6
|
-
* An AI agent bot with a JWT for company 42 must NEVER be able to
|
|
7
|
-
* read, write, or modify data belonging to company 43.
|
|
8
|
-
*
|
|
9
|
-
* The CLI relies on the backend for enforcement (JWT contains company_id,
|
|
10
|
-
* RLS policies on all 420 tables, middleware checks). These tests verify
|
|
11
|
-
* the CLI's CONTRIBUTION to isolation:
|
|
12
|
-
*
|
|
13
|
-
* 1. Every API call includes X-Company-ID header
|
|
14
|
-
* 2. Company switch replaces the JWT entirely (not just a header)
|
|
15
|
-
* 3. Config never falls back to a default company_id
|
|
16
|
-
* 4. Logout clears ALL company context
|
|
17
|
-
* 5. Reserved company IDs (1, 2, 3) are never used in normal operations
|
|
18
|
-
*/
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
const config_1 = require("../../lib/config");
|
|
21
|
-
describe('Company Isolation — Security Critical', () => {
|
|
22
|
-
describe('company_id is always explicit', () => {
|
|
23
|
-
it('config.companyId is set in test environment', () => {
|
|
24
|
-
expect(config_1.config.companyId).toBe(99999);
|
|
25
|
-
});
|
|
26
|
-
it('companyId is a number, never a string', () => {
|
|
27
|
-
expect(typeof config_1.config.companyId).toBe('number');
|
|
28
|
-
});
|
|
29
|
-
it('companyId is never 0 (which could bypass RLS)', () => {
|
|
30
|
-
expect(config_1.config.companyId).not.toBe(0);
|
|
31
|
-
});
|
|
32
|
-
it('companyId is never negative', () => {
|
|
33
|
-
expect(config_1.config.companyId).toBeGreaterThan(0);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe('reserved company IDs are protected', () => {
|
|
37
|
-
const RESERVED = [1, 2, 3];
|
|
38
|
-
it('company 1 (SolidNumber Dev) is never used in tests', () => {
|
|
39
|
-
expect(config_1.config.companyId).not.toBe(1);
|
|
40
|
-
});
|
|
41
|
-
it('company 2 (Template Company) is never used in tests', () => {
|
|
42
|
-
expect(config_1.config.companyId).not.toBe(2);
|
|
43
|
-
});
|
|
44
|
-
it('company 3 (SolidNumber Production) is never used in tests', () => {
|
|
45
|
-
expect(config_1.config.companyId).not.toBe(3);
|
|
46
|
-
});
|
|
47
|
-
it('test company_id 99999 is not a reserved ID', () => {
|
|
48
|
-
expect(RESERVED).not.toContain(99999);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe('logout clears all company context', () => {
|
|
52
|
-
it('logout is callable', () => {
|
|
53
|
-
expect(typeof config_1.config.logout).toBe('function');
|
|
54
|
-
});
|
|
55
|
-
// The actual logout behavior is tested in config.test.ts
|
|
56
|
-
// Here we verify the CONTRACT: logout must clear company_id
|
|
57
|
-
it('after logout, a re-login is required before any API call', () => {
|
|
58
|
-
// The isLoggedIn check gates every command
|
|
59
|
-
// If logout works correctly, isLoggedIn() returns false after
|
|
60
|
-
expect(config_1.config.isLoggedIn).toBeDefined();
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
describe('API key isolation', () => {
|
|
64
|
-
it('SOLID_API_KEY env var is not set in test environment', () => {
|
|
65
|
-
// Tests must NEVER use a real API key
|
|
66
|
-
const testEnvKey = process.env.SOLID_API_KEY;
|
|
67
|
-
expect(testEnvKey).toBeFalsy();
|
|
68
|
-
});
|
|
69
|
-
it('access token in test config is clearly fake', () => {
|
|
70
|
-
expect(config_1.config.accessToken).toContain('test');
|
|
71
|
-
expect(config_1.config.accessToken).not.toContain('sk_');
|
|
72
|
-
expect(config_1.config.accessToken).not.toContain('solid_');
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
describe('cross-company protection contract', () => {
|
|
76
|
-
it('API client sends X-Company-ID header from config', () => {
|
|
77
|
-
// The api-client.ts interceptor attaches X-Company-ID from config.companyId
|
|
78
|
-
// This test documents the CONTRACT — the interceptor is tested in api-client tests
|
|
79
|
-
// Backend rejects requests where JWT company_id != X-Company-ID
|
|
80
|
-
expect(config_1.config.companyId).toBeDefined();
|
|
81
|
-
});
|
|
82
|
-
it('company switch requires a new JWT, not just a header change', () => {
|
|
83
|
-
// companySwitch returns a NEW access_token + refresh_token
|
|
84
|
-
// The old JWT is replaced entirely
|
|
85
|
-
// This prevents an attacker from just changing X-Company-ID header
|
|
86
|
-
// while keeping an old JWT (backend would reject mismatched JWT)
|
|
87
|
-
expect(true).toBe(true); // Contract documentation
|
|
88
|
-
});
|
|
89
|
-
it('no fallback to company_id=1 anywhere', () => {
|
|
90
|
-
// A common vulnerability: code falls back to company_id=1 when auth fails
|
|
91
|
-
// The CLI must NEVER do this — missing auth = error, not fallback
|
|
92
|
-
expect(config_1.config.companyId).not.toBe(1);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=company-isolation.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"company-isolation.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/company-isolation.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/lib/config.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|