From 6e48314c0e58989849f66a4ffe387d906623ef69 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Fri, 7 Jul 2023 21:34:01 +0530 Subject: [PATCH] fix: add tc fix null meta (#502) --- .../src/lib/chat/helpers/payloadHelper.ts | 4 +- packages/restapi/src/lib/chat/updateGroup.ts | 8 +- packages/restapi/src/lib/types/metaTypes.ts | 3 + .../tests/lib/chat/createGroup.test.ts | 148 ++++++++++++++++ .../tests/lib/chat/updateGroup.test.ts | 163 ++++++++++++++++++ 5 files changed, 324 insertions(+), 2 deletions(-) create mode 100644 packages/restapi/tests/lib/chat/createGroup.test.ts create mode 100644 packages/restapi/tests/lib/chat/updateGroup.test.ts diff --git a/packages/restapi/src/lib/chat/helpers/payloadHelper.ts b/packages/restapi/src/lib/chat/helpers/payloadHelper.ts index bb6f683cc..0ac280991 100644 --- a/packages/restapi/src/lib/chat/helpers/payloadHelper.ts +++ b/packages/restapi/src/lib/chat/helpers/payloadHelper.ts @@ -202,7 +202,8 @@ export const updateGroupPayload = ( members: Array, admins: Array, address: string, - verificationProof: string + verificationProof: string, + meta?: string | null ): IUpdateGroupRequestPayload => { const body = { groupName: groupName, @@ -212,6 +213,7 @@ export const updateGroupPayload = ( admins: admins, address: address, verificationProof: verificationProof, + ...(meta !== undefined && { meta: meta }), }; return body; }; diff --git a/packages/restapi/src/lib/chat/updateGroup.ts b/packages/restapi/src/lib/chat/updateGroup.ts index 77b048d72..92c1762d9 100644 --- a/packages/restapi/src/lib/chat/updateGroup.ts +++ b/packages/restapi/src/lib/chat/updateGroup.ts @@ -24,6 +24,10 @@ export interface ChatUpdateGroupType extends EnvOptionsType { members: Array; admins: Array; pgpPrivateKey?: string; + // If meta is not passed, old meta is not affected + // If passed as null will update to null + // If passed as string will update to that value + meta?: string | null; } /** @@ -43,6 +47,7 @@ export const updateGroup = async ( signer = null, env = Constants.ENV.PROD, pgpPrivateKey = null, + meta, } = options || {}; try { if (account == null && signer == null) { @@ -93,7 +98,8 @@ export const updateGroup = async ( convertedMembers, convertedAdmins, connectedUser.did, - verificationProof + verificationProof, + meta ); return axios diff --git a/packages/restapi/src/lib/types/metaTypes.ts b/packages/restapi/src/lib/types/metaTypes.ts index bbd766976..e87c1ee7b 100644 --- a/packages/restapi/src/lib/types/metaTypes.ts +++ b/packages/restapi/src/lib/types/metaTypes.ts @@ -24,6 +24,9 @@ const enum META_ACTION { REMOVE_LISTENER = 10, PROMOTE_TO_SPEAKER = 11, DEMOTE_FROM_SPEARKER = 12, + PROMOTE_TO_COHOST = 13, + DEMOTE_FROM_COHOST = 14, + USER_INTERACTION = 15, // For MIC_ON | MIC_OFF | RAISE_HAND | EMOJI REACTION | or any other user activity } export type META_MESSAGE_META = { diff --git a/packages/restapi/tests/lib/chat/createGroup.test.ts b/packages/restapi/tests/lib/chat/createGroup.test.ts new file mode 100644 index 000000000..5c8db3987 --- /dev/null +++ b/packages/restapi/tests/lib/chat/createGroup.test.ts @@ -0,0 +1,148 @@ +import * as chai from 'chai'; +import { expect } from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import { ethers } from 'ethers'; +import Constants from '../../../src/lib/constants'; +import { createGroup } from '../../../src/lib/chat'; +import { GroupDTO } from '../../../src/lib/types'; +import { + adjectives, + animals, + colors, + uniqueNamesGenerator, +} from 'unique-names-generator'; +const _env = Constants.ENV.DEV; +let account: string; +let signer: any; +let groupName: string; +let groupDescription: string; +const groupImage = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAvklEQVR4AcXBsW2FMBiF0Y8r3GQb6jeBxRauYRpo4yGQkMd4A7kg7Z/GUfSKe8703fKDkTATZsJsrr0RlZSJ9r4RLayMvLmJjnQS1d6IhJkwE2bT13U/DBzp5BN73xgRZsJMmM1HOolqb/yWiWpvjJSUiRZWopIykTATZsJs5g+1N6KSMiO1N/5DmAkzYTa9Lh6MhJkwE2ZzSZlo7xvRwson3txERzqJhJkwE2bT6+JhoKTMJ2pvjAgzYSbMfgDlXixqjH6gRgAAAABJRU5ErkJggg=='; +const meta = 'Random Group Meta'; + +describe('Create Group', () => { + beforeEach(() => { + const WALLET1 = ethers.Wallet.createRandom(); + signer = new ethers.Wallet(WALLET1.privateKey); + account = `eip155:${signer.address}`; + + groupName = uniqueNamesGenerator({ + dictionaries: [adjectives, colors, animals], + }); + groupDescription = uniqueNamesGenerator({ + dictionaries: [adjectives, colors, animals], + }); + }); + it('View Control - Public | Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: true, + signer, + env: _env, + meta, + }); + await expectGroup(group, true, admins, members, true); + }); + it('View Control - Public | Without Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: true, + signer, + env: _env, + }); + await expectGroup(group, true, admins, members, false); + }); + it('View Control - Private | Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: false, + signer, + env: _env, + meta, + }); + await expectGroup(group, false, admins, members, true); + }); + it('View Control - Private | Without Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: false, + signer, + env: _env, + }); + await expectGroup(group, false, admins, members, false); + }); +}); + +/** + * HELPER FUNCTIONS + */ +const expectGroup = async ( + group: GroupDTO, + isPublic: boolean, + admins: string[], + pendingMembers: string[], + HasMeta: boolean +) => { + expect(group).to.exist; + expect(group.members).to.be.an('array'); + expect(group.members.length).to.equal(1); + expect(group.members[0].wallet).to.equal(account); + expect(group.members[0].isAdmin).to.be.true; + expect(group.members[0].image).to.be.a('string'); + expect(group.pendingMembers).to.be.an('array'); + expect(group.pendingMembers.length).to.equal(pendingMembers.length); + expect(group.pendingMembers[0].wallet).to.equal(pendingMembers[0]); + expect(group.pendingMembers[1].wallet).to.equal(pendingMembers[1]); + expect(group.groupImage).to.equal(groupImage); + expect(group.groupName).to.equal(groupName); + expect(group.groupDescription).to.equal(groupDescription); + expect(group.isPublic).to.equal(isPublic); + expect(group.groupCreator).to.equal(account); + expect(group.chatId).to.be.a('string'); + expect(group.scheduleAt).to.be.null; + expect(group.scheduleEnd).to.be.null; + expect(group.groupType).to.equal('default'); + expect((group as any).status).to.be.null; + expect((group as any).eventType).to.equal('create'); + if (!HasMeta) { + expect((group as any).meta).to.be.null; + } else { + expect((group as any).meta).to.equal(meta); + } +}; diff --git a/packages/restapi/tests/lib/chat/updateGroup.test.ts b/packages/restapi/tests/lib/chat/updateGroup.test.ts new file mode 100644 index 000000000..2b71156c0 --- /dev/null +++ b/packages/restapi/tests/lib/chat/updateGroup.test.ts @@ -0,0 +1,163 @@ +import * as chai from 'chai'; +import { expect } from 'chai'; +import * as chaiAsPromised from 'chai-as-promised'; +import { ethers } from 'ethers'; +import Constants from '../../../src/lib/constants'; +import { createGroup, updateGroup } from '../../../src/lib/chat'; +import { GroupDTO } from '../../../src/lib/types'; +import { + adjectives, + animals, + colors, + uniqueNamesGenerator, +} from 'unique-names-generator'; +const _env = Constants.ENV.DEV; +let account: string; +let signer: any; +let groupName: string; +let groupDescription: string; +const groupImage = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAvklEQVR4AcXBsW2FMBiF0Y8r3GQb6jeBxRauYRpo4yGQkMd4A7kg7Z/GUfSKe8703fKDkTATZsJsrr0RlZSJ9r4RLayMvLmJjnQS1d6IhJkwE2bT13U/DBzp5BN73xgRZsJMmM1HOolqb/yWiWpvjJSUiRZWopIykTATZsJs5g+1N6KSMiO1N/5DmAkzYTa9Lh6MhJkwE2ZzSZlo7xvRwson3txERzqJhJkwE2bT6+JhoKTMJ2pvjAgzYSbMfgDlXixqjH6gRgAAAABJRU5ErkJggg=='; +const meta = 'Random Group Meta'; + +describe('Update Group', () => { + beforeEach(() => { + const WALLET1 = ethers.Wallet.createRandom(); + signer = new ethers.Wallet(WALLET1.privateKey); + account = `eip155:${signer.address}`; + + groupName = uniqueNamesGenerator({ + dictionaries: [adjectives, colors, animals], + }); + groupDescription = uniqueNamesGenerator({ + dictionaries: [adjectives, colors, animals], + }); + }); + it('Add Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: true, + signer, + env: _env, + }); + const updatedGroup = await updateGroup({ + groupName, + groupDescription, + members: [account, ...members], + groupImage, + admins: [account], + chatId: group.chatId, + signer, + env: _env, + meta, + }); + await expectGroup(updatedGroup, true, admins, members, true); + }); + it('Remove Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: true, + signer, + env: _env, + meta, + }); + const updatedGroup = await updateGroup({ + groupName, + groupDescription, + members: [account, ...members], + groupImage, + admins: [account], + chatId: group.chatId, + signer, + env: _env, + meta: null, + }); + await expectGroup(updatedGroup, true, admins, members, false); + }); + it('Unchanged Meta Property', async () => { + const admins: string[] = []; + const members = [ + 'eip155:0x736Cd8461132a1B52d95D535230ca4cd4C8bD7e5', + 'eip155:0xDB0Bb1C25e36a5Ec9d199688bB01eADa4e70225E', + ]; + const group = await createGroup({ + groupName, + groupDescription, + members, + groupImage, + admins, + isPublic: true, + signer, + env: _env, + meta, + }); + groupDescription = 'New Grp Desc'; + const updatedGroup = await updateGroup({ + groupName, + groupDescription, + members: [account, ...members], + groupImage, + admins: [account], + chatId: group.chatId, + signer, + env: _env, + }); + await expectGroup(updatedGroup, true, admins, members, true); + }); +}); + +/** + * HELPER FUNCTIONS + */ +const expectGroup = async ( + group: GroupDTO, + isPublic: boolean, + admins: string[], + pendingMembers: string[], + HasMeta: boolean +) => { + expect(group).to.exist; + expect(group.members).to.be.an('array'); + expect(group.members.length).to.equal(1); + expect(group.members[0].wallet).to.equal(account); + expect(group.members[0].isAdmin).to.be.true; + expect(group.members[0].image).to.be.a('string'); + expect(group.pendingMembers).to.be.an('array'); + expect(group.pendingMembers.length).to.equal(pendingMembers.length); + expect(group.pendingMembers[0].wallet).to.equal(pendingMembers[0]); + expect(group.pendingMembers[1].wallet).to.equal(pendingMembers[1]); + expect(group.groupImage).to.equal(groupImage); + expect(group.groupName).to.equal(groupName); + expect(group.groupDescription).to.equal(groupDescription); + expect(group.isPublic).to.equal(isPublic); + expect(group.groupCreator).to.equal(account); + expect(group.chatId).to.be.a('string'); + expect(group.scheduleAt).to.be.null; + expect(group.scheduleEnd).to.be.null; + expect(group.groupType).to.equal('default'); + expect((group as any).status).to.be.null; + expect((group as any).eventType).to.equal('update'); + if (!HasMeta) { + expect((group as any).meta).to.be.null; + } else { + expect((group as any).meta).to.equal(meta); + } +};