mirror of
https://github.com/AppFlowy-IO/AppFlowy-Web.git
synced 2025-11-30 03:18:02 +08:00
fix: display wrong user avatar
This commit is contained in:
186
cypress/support/db-utils.ts
Normal file
186
cypress/support/db-utils.ts
Normal file
@@ -0,0 +1,186 @@
|
||||
import { databasePrefix } from '@/application/constants';
|
||||
|
||||
/**
|
||||
* IndexedDB utilities for Cypress tests
|
||||
* Provides helpers to interact with Dexie database in tests
|
||||
*/
|
||||
|
||||
export interface WorkspaceMemberProfile {
|
||||
workspace_id: string;
|
||||
user_uuid: string;
|
||||
person_id: string;
|
||||
name: string;
|
||||
email: string;
|
||||
role: number;
|
||||
avatar_url: string | null;
|
||||
cover_image_url: string | null;
|
||||
custom_image_url: string | null;
|
||||
description: string | null;
|
||||
invited: boolean;
|
||||
last_mentioned_at: number | null;
|
||||
updated_at: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class for IndexedDB operations in tests
|
||||
*/
|
||||
export class DBTestUtils {
|
||||
private dbName = `${databasePrefix}_cache`;
|
||||
|
||||
/**
|
||||
* Open the IndexedDB database
|
||||
*/
|
||||
openDB(version?: number): Cypress.Chainable<IDBDatabase> {
|
||||
return cy.window().then((win) => {
|
||||
return new Cypress.Promise<IDBDatabase>((resolve, reject) => {
|
||||
const request = win.indexedDB.open(this.dbName, version);
|
||||
|
||||
request.onsuccess = () => {
|
||||
resolve(request.result);
|
||||
};
|
||||
|
||||
request.onerror = () => {
|
||||
reject(request.error);
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current database version
|
||||
*/
|
||||
getDBVersion(): Cypress.Chainable<number> {
|
||||
return this.openDB().then((db) => {
|
||||
const version = db.version;
|
||||
|
||||
db.close();
|
||||
return version;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a table exists in the database
|
||||
*/
|
||||
tableExists(tableName: string): Cypress.Chainable<boolean> {
|
||||
return this.openDB().then((db) => {
|
||||
const exists = db.objectStoreNames.contains(tableName);
|
||||
|
||||
db.close();
|
||||
return exists;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get workspace member profile from database
|
||||
*/
|
||||
getWorkspaceMemberProfile(
|
||||
workspaceId: string,
|
||||
userUuid: string
|
||||
): Cypress.Chainable<WorkspaceMemberProfile | null> {
|
||||
return this.openDB().then((db) => {
|
||||
return new Cypress.Promise<WorkspaceMemberProfile | null>((resolve, reject) => {
|
||||
const transaction = db.transaction(['workspace_member_profiles'], 'readonly');
|
||||
const store = transaction.objectStore('workspace_member_profiles');
|
||||
const index = store.index('[workspace_id+user_uuid]');
|
||||
const request = index.get([workspaceId, userUuid]);
|
||||
|
||||
request.onsuccess = () => {
|
||||
resolve(request.result || null);
|
||||
};
|
||||
|
||||
request.onerror = () => {
|
||||
reject(request.error);
|
||||
};
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
db.close();
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Add or update workspace member profile
|
||||
*/
|
||||
putWorkspaceMemberProfile(profile: WorkspaceMemberProfile): Cypress.Chainable<void> {
|
||||
return this.openDB().then((db) => {
|
||||
return new Cypress.Promise<void>((resolve, reject) => {
|
||||
const transaction = db.transaction(['workspace_member_profiles'], 'readwrite');
|
||||
const store = transaction.objectStore('workspace_member_profiles');
|
||||
const request = store.put(profile);
|
||||
|
||||
request.onsuccess = () => {
|
||||
resolve();
|
||||
};
|
||||
|
||||
request.onerror = () => {
|
||||
reject(request.error);
|
||||
};
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
db.close();
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all data from workspace_member_profiles table
|
||||
*/
|
||||
clearWorkspaceMemberProfiles(): Cypress.Chainable<void> {
|
||||
return this.openDB().then((db) => {
|
||||
return new Cypress.Promise<void>((resolve, reject) => {
|
||||
const transaction = db.transaction(['workspace_member_profiles'], 'readwrite');
|
||||
const store = transaction.objectStore('workspace_member_profiles');
|
||||
const request = store.clear();
|
||||
|
||||
request.onsuccess = () => {
|
||||
resolve();
|
||||
};
|
||||
|
||||
request.onerror = () => {
|
||||
reject(request.error);
|
||||
};
|
||||
|
||||
transaction.oncomplete = () => {
|
||||
db.close();
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify database schema version and tables
|
||||
*/
|
||||
verifySchema(expectedVersion: number, expectedTables: string[]): Cypress.Chainable<boolean> {
|
||||
return this.openDB().then((db) => {
|
||||
const versionMatch = db.version === expectedVersion;
|
||||
const tablesMatch = expectedTables.every((table) => db.objectStoreNames.contains(table));
|
||||
|
||||
db.close();
|
||||
return versionMatch && tablesMatch;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the entire database (for cleanup)
|
||||
*/
|
||||
deleteDB(): Cypress.Chainable<void> {
|
||||
return cy.window().then((win) => {
|
||||
return new Cypress.Promise<void>((resolve, reject) => {
|
||||
const request = win.indexedDB.deleteDatabase(this.dbName);
|
||||
|
||||
request.onsuccess = () => {
|
||||
resolve();
|
||||
};
|
||||
|
||||
request.onerror = () => {
|
||||
reject(request.error);
|
||||
};
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Export singleton instance
|
||||
export const dbUtils = new DBTestUtils();
|
||||
Reference in New Issue
Block a user