feat: add test environment for mock user (#1748)
This commit is contained in:
@@ -12,7 +12,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@affine-test/fixtures@workspace:../../tests/fixtures, @affine-test/fixtures@workspace:^":
|
"@affine-test/fixtures@workspace:*, @affine-test/fixtures@workspace:../../tests/fixtures":
|
||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine-test/fixtures@workspace:../../tests/fixtures"
|
resolution: "@affine-test/fixtures@workspace:../../tests/fixtures"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@@ -161,7 +161,7 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine/workspace@workspace:../../packages/workspace"
|
resolution: "@affine/workspace@workspace:../../packages/workspace"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@affine-test/fixtures": "workspace:^"
|
"@affine-test/fixtures": "workspace:*"
|
||||||
"@affine/component": "workspace:*"
|
"@affine/component": "workspace:*"
|
||||||
"@affine/debug": "workspace:*"
|
"@affine/debug": "workspace:*"
|
||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
"lint": "next lint"
|
"lint": "next lint"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@affine-test/fixtures": "workspace:*",
|
||||||
"@affine/component": "workspace:*",
|
"@affine/component": "workspace:*",
|
||||||
"@affine/debug": "workspace:*",
|
"@affine/debug": "workspace:*",
|
||||||
"@affine/env": "workspace:*",
|
"@affine/env": "workspace:*",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { getLoginStorage } from '@affine/workspace/affine/login';
|
import { getLoginStorage } from '@affine/workspace/affine/login';
|
||||||
import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils';
|
import { createEmptyBlockSuiteWorkspace } from '@affine/workspace/utils';
|
||||||
import { atom } from 'jotai/index';
|
import { atom } from 'jotai';
|
||||||
|
|
||||||
import { BlockSuiteWorkspace } from '../../shared';
|
import { BlockSuiteWorkspace } from '../../shared';
|
||||||
import { affineApis } from '../../shared/apis';
|
import { affineApis } from '../../shared/apis';
|
||||||
|
|||||||
39
apps/web/src/shared/__tests__/apis.spec.ts
Normal file
39
apps/web/src/shared/__tests__/apis.spec.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* @vitest-environment node
|
||||||
|
*/
|
||||||
|
import { loginResponseSchema } from '@affine/workspace/affine/login';
|
||||||
|
import { beforeAll, describe, expect, it, vi } from 'vitest';
|
||||||
|
|
||||||
|
import type { affineApis as API } from '../apis';
|
||||||
|
|
||||||
|
let affineApis: typeof API;
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
// @ts-expect-error
|
||||||
|
globalThis.window = undefined;
|
||||||
|
affineApis = (await import('../apis')).affineApis;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('apis', () => {
|
||||||
|
it('should defined', async () => {
|
||||||
|
expect(affineApis).toBeDefined();
|
||||||
|
expect(affineApis).toBe(globalThis.AFFINE_APIS);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('login mock user', async () => {
|
||||||
|
const setItem = vi.fn((key: string, value: unknown) => {
|
||||||
|
expect(key).toBe('affine-login-v2');
|
||||||
|
expect(value).toBeTypeOf('string');
|
||||||
|
loginResponseSchema.parse(JSON.parse(value as string));
|
||||||
|
});
|
||||||
|
vi.stubGlobal('localStorage', {
|
||||||
|
setItem,
|
||||||
|
});
|
||||||
|
expect(globalThis.AFFINE_DEBUG).toBeDefined();
|
||||||
|
expect(globalThis.AFFINE_DEBUG.loginMockUser1).toBeTypeOf('function');
|
||||||
|
expect(globalThis.AFFINE_DEBUG.loginMockUser2).toBeTypeOf('function');
|
||||||
|
await (globalThis.AFFINE_DEBUG.loginMockUser1 as () => Promise<unknown>)();
|
||||||
|
await (globalThis.AFFINE_DEBUG.loginMockUser2 as () => Promise<unknown>)();
|
||||||
|
expect(setItem).toBeCalledTimes(2);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -18,11 +18,7 @@ if (typeof window === 'undefined') {
|
|||||||
// This is for Server side rendering support
|
// This is for Server side rendering support
|
||||||
prefixUrl = new URL('http://' + config.serverAPI + '/').origin;
|
prefixUrl = new URL('http://' + config.serverAPI + '/').origin;
|
||||||
} else {
|
} else {
|
||||||
try {
|
prefixUrl = serverAPI;
|
||||||
new URL(serverAPI);
|
|
||||||
} catch (e) {
|
|
||||||
console.warn('serverAPI is not a valid URL', config.serverAPI);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const params = new URLSearchParams(window.location.search);
|
const params = new URLSearchParams(window.location.search);
|
||||||
@@ -40,6 +36,41 @@ if (!globalThis.AFFINE_APIS) {
|
|||||||
jotaiStore.set(currentAffineUserAtom, parseIdToken(response.token));
|
jotaiStore.set(currentAffineUserAtom, parseIdToken(response.token));
|
||||||
setLoginStorage(response);
|
setLoginStorage(response);
|
||||||
};
|
};
|
||||||
|
const loginMockUser1 = async () => {
|
||||||
|
const user1 = await import('@affine-test/fixtures/built-in-user1.json');
|
||||||
|
const data = await fetch(prefixUrl + 'api/user/token', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
type: 'DebugLoginUser',
|
||||||
|
email: user1.email,
|
||||||
|
password: user1.password,
|
||||||
|
}),
|
||||||
|
}).then(r => r.json());
|
||||||
|
setLogin(data);
|
||||||
|
};
|
||||||
|
const loginMockUser2 = async () => {
|
||||||
|
const user2 = await import('@affine-test/fixtures/built-in-user2.json');
|
||||||
|
const data = await fetch(prefixUrl + 'api/user/token', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
type: 'DebugLoginUser',
|
||||||
|
email: user2.email,
|
||||||
|
password: user2.password,
|
||||||
|
}),
|
||||||
|
}).then(r => r.json());
|
||||||
|
setLogin(data);
|
||||||
|
};
|
||||||
|
|
||||||
|
globalThis.AFFINE_DEBUG = {
|
||||||
|
loginMockUser1,
|
||||||
|
loginMockUser2,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
@@ -50,6 +81,8 @@ declare global {
|
|||||||
| undefined
|
| undefined
|
||||||
| (ReturnType<typeof createUserApis> &
|
| (ReturnType<typeof createUserApis> &
|
||||||
ReturnType<typeof createWorkspaceApis>);
|
ReturnType<typeof createWorkspaceApis>);
|
||||||
|
// eslint-disable-next-line no-var
|
||||||
|
var AFFINE_DEBUG: Record<string, unknown>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { affineApis };
|
export { affineApis };
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"./affine/sync": "./src/affine/sync.js"
|
"./affine/sync": "./src/affine/sync.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@affine-test/fixtures": "workspace:^",
|
"@affine-test/fixtures": "workspace:*",
|
||||||
"@affine/component": "workspace:*",
|
"@affine/component": "workspace:*",
|
||||||
"@affine/debug": "workspace:*",
|
"@affine/debug": "workspace:*",
|
||||||
"@affine/env": "workspace:*",
|
"@affine/env": "workspace:*",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export default function getConfig() {
|
|||||||
gitVersion: 'UNKNOWN',
|
gitVersion: 'UNKNOWN',
|
||||||
hash: 'UNKNOWN',
|
hash: 'UNKNOWN',
|
||||||
editorVersion: 'UNKNOWN',
|
editorVersion: 'UNKNOWN',
|
||||||
serverAPI: 'http://localhost:3000/api',
|
serverAPI: 'http://localhost:3000/',
|
||||||
enableBroadCastChannelProvider: true,
|
enableBroadCastChannelProvider: true,
|
||||||
enableIndexedDBProvider: true,
|
enableIndexedDBProvider: true,
|
||||||
enableDebugPage: true,
|
enableDebugPage: true,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@affine-test/fixtures@workspace:^, @affine-test/fixtures@workspace:tests/fixtures":
|
"@affine-test/fixtures@workspace:*, @affine-test/fixtures@workspace:tests/fixtures":
|
||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine-test/fixtures@workspace:tests/fixtures"
|
resolution: "@affine-test/fixtures@workspace:tests/fixtures"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@@ -170,6 +170,7 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine/web@workspace:apps/web"
|
resolution: "@affine/web@workspace:apps/web"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@affine-test/fixtures": "workspace:*"
|
||||||
"@affine/component": "workspace:*"
|
"@affine/component": "workspace:*"
|
||||||
"@affine/debug": "workspace:*"
|
"@affine/debug": "workspace:*"
|
||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
@@ -227,7 +228,7 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine/workspace@workspace:packages/workspace"
|
resolution: "@affine/workspace@workspace:packages/workspace"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@affine-test/fixtures": "workspace:^"
|
"@affine-test/fixtures": "workspace:*"
|
||||||
"@affine/component": "workspace:*"
|
"@affine/component": "workspace:*"
|
||||||
"@affine/debug": "workspace:*"
|
"@affine/debug": "workspace:*"
|
||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
|
|||||||
Reference in New Issue
Block a user