Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33319624
D9909.1768840327.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D9909.1768840327.diff
View Options
diff --git a/lib/ops/user-store-ops.js b/lib/ops/user-store-ops.js
--- a/lib/ops/user-store-ops.js
+++ b/lib/ops/user-store-ops.js
@@ -49,6 +49,13 @@
}));
}
+function convertUserInfoToClientDBUserInfo(user: UserInfo): ClientDBUserInfo {
+ return {
+ id: user.id,
+ userInfo: JSON.stringify(user),
+ };
+}
+
const userStoreOpsHandlers: BaseStoreOpsHandlers<
UserInfos,
UserStoreOperation,
@@ -79,12 +86,34 @@
return processedUserInfos;
},
- convertOpsToClientDBOps(): $ReadOnlyArray<ClientDBUserStoreOperation> {
- return [];
+ convertOpsToClientDBOps(
+ ops: $ReadOnlyArray<UserStoreOperation>,
+ ): $ReadOnlyArray<ClientDBUserStoreOperation> {
+ return ops.map(operation => {
+ if (
+ operation.type === 'remove_users' ||
+ operation.type === 'remove_all_users'
+ ) {
+ return operation;
+ }
+ return {
+ type: 'replace_user',
+ payload: convertUserInfoToClientDBUserInfo(operation.payload),
+ };
+ });
},
- translateClientDBData(): UserInfos {
- return {};
+ translateClientDBData(users: $ReadOnlyArray<ClientDBUserInfo>): UserInfos {
+ const userInfos: { [id: string]: UserInfo } = {};
+ users.forEach(dbUser => {
+ userInfos[dbUser.id] = JSON.parse(dbUser.userInfo);
+ });
+
+ return userInfos;
},
};
-export { userStoreOpsHandlers, convertUserInfosToReplaceUserOps };
+export {
+ userStoreOpsHandlers,
+ convertUserInfosToReplaceUserOps,
+ convertUserInfoToClientDBUserInfo,
+};
diff --git a/web/database/queries/user-quries.test.js b/web/database/queries/user-quries.test.js
new file mode 100644
--- /dev/null
+++ b/web/database/queries/user-quries.test.js
@@ -0,0 +1,106 @@
+// @flow
+
+import {
+ convertUserInfoToClientDBUserInfo,
+ userStoreOpsHandlers,
+} from 'lib/ops/user-store-ops.js';
+import type { UserInfo } from 'lib/types/user-types.js';
+
+import { getDatabaseModule } from '../db-module.js';
+import type { EmscriptenModule } from '../types/module.js';
+import { type SQLiteQueryExecutor } from '../types/sqlite-query-executor.js';
+import { clearSensitiveData } from '../utils/db-utils.js';
+
+const FILE_PATH = 'test.sqlite';
+
+const TEST_USER_1: UserInfo = {
+ id: '256',
+ username: 'Test1',
+ relationshipStatus: 2,
+ avatar: {
+ type: 'image',
+ uri: 'av1',
+ },
+};
+const TEST_USER_2: UserInfo = {
+ id: '512',
+ username: 'Test2',
+ relationshipStatus: 3,
+ avatar: {
+ type: 'image',
+ uri: 'av2',
+ },
+};
+
+describe('User Store queries', () => {
+ let queryExecutor: ?SQLiteQueryExecutor = null;
+ let dbModule: ?EmscriptenModule = null;
+
+ beforeAll(async () => {
+ dbModule = getDatabaseModule();
+ });
+
+ beforeEach(() => {
+ if (!dbModule) {
+ return;
+ }
+ queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH);
+ queryExecutor?.replaceUser(convertUserInfoToClientDBUserInfo(TEST_USER_1));
+ queryExecutor?.replaceUser(convertUserInfoToClientDBUserInfo(TEST_USER_2));
+ });
+
+ afterEach(() => {
+ if (!dbModule || !queryExecutor) {
+ return;
+ }
+ clearSensitiveData(dbModule, FILE_PATH, queryExecutor);
+ });
+
+ it('should return all users', () => {
+ const users = queryExecutor?.getAllUsers();
+ expect(users?.length).toBe(2);
+ });
+
+ it('should remove all users', () => {
+ queryExecutor?.removeAllUsers();
+ const users = queryExecutor?.getAllUsers();
+ expect(users?.length).toBe(0);
+ });
+
+ it('should update user avatar', () => {
+ const user2Updated: UserInfo = {
+ id: '512',
+ username: 'Test2',
+ avatar: {
+ type: 'image',
+ uri: 'new_av',
+ },
+ };
+
+ queryExecutor?.replaceUser(convertUserInfoToClientDBUserInfo(user2Updated));
+
+ const dbUsers = queryExecutor?.getAllUsers();
+ if (!dbUsers) {
+ throw new Error('users not defined');
+ }
+ expect(dbUsers.length).toBe(2);
+
+ const users = userStoreOpsHandlers.translateClientDBData(dbUsers);
+ expect(users['512']).toBeDefined();
+ expect(users['512'].avatar?.uri).toBe(user2Updated.avatar?.uri);
+ expect(users['512'].relationshipStatus).not.toBeDefined();
+ });
+
+ it('should remove user', () => {
+ queryExecutor?.removeUsers(['512']);
+
+ const dbUsers = queryExecutor?.getAllUsers();
+ if (!dbUsers) {
+ throw new Error('users not defined');
+ }
+ expect(dbUsers.length).toBe(1);
+
+ const users = userStoreOpsHandlers.translateClientDBData(dbUsers);
+ expect(users['256']).toBeDefined();
+ });
+});
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Jan 19, 4:32 PM (4 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5956835
Default Alt Text
D9909.1768840327.diff (4 KB)
Attached To
Mode
D9909: [SQLite] add functions to convert user data and tests to user store methods
Attached
Detach File
Event Timeline
Log In to Comment