| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { buildCloudStatusPayload } from './src/server/routes/cloud.js';
- import { isCloudUserAuthenticated, sanitizeCloudUser } from './src/cloud/cloud-api.js';
- function assert(condition, message) {
- if (!condition) throw new Error(message);
- }
- console.log('\n── Cloud Auth Guards ──');
- const invalidUser = {
- id: 'app',
- code: 203,
- detail: 'Please login first',
- _status: 203,
- };
- assert(!isCloudUserAuthenticated(invalidUser), '203 login prompt should be treated as logged out');
- const rawUser = {
- id: 10007716,
- name: 'mzp@ih5.cn',
- nickName: 'mz',
- companyName: 'ivx',
- picture: '//file.example/avatar.png',
- domain: 'demo.visuallogic.ai',
- status: 1,
- worksCount: 42,
- isPro: true,
- extra: { anthropicKey: 'secret' },
- _setCookie: 'ih5bearer=secret',
- _status: 200,
- };
- assert(isCloudUserAuthenticated(rawUser), 'valid user payload should be accepted');
- const safeUser = sanitizeCloudUser(rawUser);
- assert(safeUser.id === rawUser.id, 'sanitized user should keep id');
- assert(safeUser.companyName === rawUser.companyName, 'sanitized user should keep company name');
- assert(!('extra' in safeUser), 'sanitized user must drop secret extra payload');
- assert(!('_setCookie' in safeUser), 'sanitized user must drop cookie data');
- const connected = buildCloudStatusPayload(safeUser);
- assert(connected.connected === true, 'connected payload should mark connected');
- assert(connected.loggedIn === true, 'connected payload should mark logged in');
- assert(connected.user?.name === rawUser.name, 'connected payload should include sanitized user');
- const loggedOut = buildCloudStatusPayload(null, 'No cookie');
- assert(loggedOut.connected === false, 'logged out payload should mark disconnected');
- assert(loggedOut.loggedIn === false, 'logged out payload should mark logged out');
- assert(loggedOut.error === 'No cookie', 'logged out payload should preserve error');
- console.log('PASS test-cloud-auth.js');
|