test: add test case for affine
This commit is contained in:
1 parent
5095e2f27d
commit
9316bb4222
6 files changed
+112
-35
No files matched your search
@@ -1,18 +1,16 @@
|
||||
import { BaseProvider } from '../base';
|
||||
import { BaseProvider } from '../base.js';
|
||||
import type { ProviderConstructorParams } from '../base';
|
||||
import { User, Workspace as WS, WorkspaceMeta } from '../../types';
|
||||
import type { User, Workspace as WS, WorkspaceMeta } from '../../types';
|
||||
import { Workspace } from '@blocksuite/store';
|
||||
import { BlockSchema } from '@blocksuite/blocks/models';
|
||||
import { applyUpdate } from 'yjs';
|
||||
import { token, Callback } from './apis';
|
||||
import { varStorage as storage } from 'lib0/storage';
|
||||
import { storage } from './storage.js';
|
||||
import assert from 'assert';
|
||||
import { getAuthorizer } from './apis/token';
|
||||
import { WebsocketProvider } from './sync';
|
||||
import { WebsocketProvider } from './sync.js';
|
||||
// import { IndexedDBProvider } from '../local/indexeddb';
|
||||
import { getDefaultHeadImgBlob } from '../../utils';
|
||||
import { getDefaultHeadImgBlob } from '../../utils/index.js';
|
||||
import { getApis } from './apis/index.js';
|
||||
import type { Apis, WorkspaceDetail } from './apis';
|
||||
import type { Apis, WorkspaceDetail, Callback } from './apis';
|
||||
|
||||
export interface AffineProviderConstructorParams
|
||||
extends ProviderConstructorParams {
|
||||
@@ -23,8 +21,6 @@ export class AffineProvider extends BaseProvider {
|
||||
public id = 'affine';
|
||||
private _workspacesCache: Map<string, Workspace> = new Map();
|
||||
private _onTokenRefresh?: Callback = undefined;
|
||||
private readonly _authorizer = getAuthorizer();
|
||||
private _user: User | undefined = undefined;
|
||||
private _wsMap: Map<string, WebsocketProvider> = new Map();
|
||||
private _apis: Apis;
|
||||
// private _idbMap: Map<string, IndexedDBProvider> = new Map();
|
||||
@@ -36,29 +32,29 @@ export class AffineProvider extends BaseProvider {
|
||||
|
||||
override async init() {
|
||||
this._onTokenRefresh = () => {
|
||||
if (token.refresh) {
|
||||
storage.setItem('token', token.refresh);
|
||||
if (this._apis.token.refresh) {
|
||||
storage.setItem('token', this._apis.token.refresh);
|
||||
}
|
||||
};
|
||||
|
||||
token.onChange(this._onTokenRefresh);
|
||||
this._apis.token.onChange(this._onTokenRefresh);
|
||||
|
||||
// initial login token
|
||||
if (token.isExpired) {
|
||||
if (this._apis.token.isExpired) {
|
||||
try {
|
||||
const refreshToken = storage.getItem('token');
|
||||
await token.refreshToken(refreshToken);
|
||||
await this._apis.token.refreshToken(refreshToken);
|
||||
|
||||
if (token.refresh) {
|
||||
storage.set('token', token.refresh);
|
||||
if (this._apis.token.refresh) {
|
||||
storage.set('token', this._apis.token.refresh);
|
||||
}
|
||||
|
||||
assert(token.isLogin);
|
||||
assert(this._apis.token.isLogin);
|
||||
} catch (_) {
|
||||
// this._logger('Authorization failed, fallback to local mode');
|
||||
}
|
||||
} else {
|
||||
storage.setItem('token', token.refresh);
|
||||
storage.setItem('token', this._apis.token.refresh);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +87,7 @@ export class AffineProvider extends BaseProvider {
|
||||
}
|
||||
|
||||
override async loadWorkspaces() {
|
||||
if (!token.isLogin) {
|
||||
if (!this._apis.token.isLogin) {
|
||||
return [];
|
||||
}
|
||||
const workspacesList = await this._apis.getWorkspaces();
|
||||
@@ -171,24 +167,26 @@ export class AffineProvider extends BaseProvider {
|
||||
override async auth() {
|
||||
const refreshToken = await storage.getItem('token');
|
||||
if (refreshToken) {
|
||||
await token.refreshToken(refreshToken);
|
||||
if (token.isLogin && !token.isExpired) {
|
||||
await this._apis.token.refreshToken(refreshToken);
|
||||
if (this._apis.token.isLogin && !this._apis.token.isExpired) {
|
||||
// login success
|
||||
return;
|
||||
}
|
||||
}
|
||||
const user = await this._authorizer[0]?.();
|
||||
const user = await this._apis.signInWithGoogle?.();
|
||||
assert(user);
|
||||
this._user = {
|
||||
id: user.id,
|
||||
name: user.name,
|
||||
avatar: user.avatar_url,
|
||||
email: user.email,
|
||||
};
|
||||
}
|
||||
|
||||
public override async getUserInfo(): Promise<User | undefined> {
|
||||
return this._user;
|
||||
const user = this._apis.token.user;
|
||||
return user
|
||||
? {
|
||||
id: user.id,
|
||||
name: user.name,
|
||||
avatar: user.avatar_url,
|
||||
email: user.email,
|
||||
}
|
||||
: undefined;
|
||||
}
|
||||
|
||||
public override async deleteWorkspace(id: string): Promise<void> {
|
||||
@@ -265,7 +263,7 @@ export class AffineProvider extends BaseProvider {
|
||||
owner: undefined,
|
||||
isLocal: true,
|
||||
memberCount: 1,
|
||||
provider: 'local',
|
||||
provider: 'affine',
|
||||
};
|
||||
|
||||
if (!meta.avatar) {
|
||||
|
||||
Reference in new issue
Block a user