signal-desktop/ts/test-both/util/getGroupMemberships_test.ts

280 lines
7.4 KiB
TypeScript
Raw Normal View History

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import type { ConversationType } from '../../state/ducks/conversations';
import { generateAci, normalizeAci } from '../../types/ServiceId';
import type { ServiceIdString } from '../../types/ServiceId';
2023-08-16 20:54:39 +00:00
import { getDefaultConversationWithServiceId } from '../helpers/getDefaultConversation';
import { getGroupMemberships } from '../../util/getGroupMemberships';
describe('getGroupMemberships', () => {
2023-08-16 20:54:39 +00:00
const normalConversation1 = getDefaultConversationWithServiceId();
const normalConversation2 = getDefaultConversationWithServiceId();
const unregisteredConversation = getDefaultConversationWithServiceId({
discoveredUnregisteredAt: Date.now(),
});
function getConversationByServiceId(
serviceId: ServiceIdString
2021-10-26 22:59:08 +00:00
): undefined | ConversationType {
return [
normalConversation1,
normalConversation2,
unregisteredConversation,
2023-08-16 20:54:39 +00:00
].find(conversation => conversation.serviceId === serviceId);
}
describe('memberships', () => {
it('returns an empty array if passed undefined', () => {
const conversation = {};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).memberships;
assert.isEmpty(result);
});
it('returns an empty array if passed an empty array', () => {
const conversation = { memberships: [] };
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).memberships;
assert.isEmpty(result);
});
it("filters out conversation IDs that don't exist", () => {
const conversation = {
memberships: [
{
2023-08-16 20:54:39 +00:00
aci: generateAci(),
isAdmin: true,
},
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).memberships;
assert.isEmpty(result);
});
it('does not filter out unregistered conversations', () => {
const conversation = {
memberships: [
{
2023-08-16 20:54:39 +00:00
aci: normalizeAci(unregisteredConversation.serviceId, 'test'),
isAdmin: true,
},
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).memberships;
assert.lengthOf(result, 1);
assert.deepEqual(result[0], {
isAdmin: true,
member: unregisteredConversation,
});
});
it('hydrates memberships', () => {
const conversation = {
memberships: [
{
2023-08-16 20:54:39 +00:00
aci: normalizeAci(normalConversation2.serviceId, 'test'),
isAdmin: false,
},
{
2023-08-16 20:54:39 +00:00
aci: normalizeAci(normalConversation1.serviceId, 'test'),
isAdmin: true,
},
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).memberships;
assert.lengthOf(result, 2);
assert.deepEqual(result[0], {
isAdmin: false,
member: normalConversation2,
});
assert.deepEqual(result[1], {
isAdmin: true,
member: normalConversation1,
});
});
});
describe('pendingApprovalMemberships', () => {
it('returns an empty array if passed undefined', () => {
const conversation = {};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingApprovalMemberships;
assert.isEmpty(result);
});
it('returns an empty array if passed an empty array', () => {
const conversation = { pendingApprovalMemberships: [] };
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingApprovalMemberships;
assert.isEmpty(result);
});
it("filters out conversation IDs that don't exist", () => {
const conversation = {
2023-08-16 20:54:39 +00:00
pendingApprovalMemberships: [{ aci: generateAci() }],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingApprovalMemberships;
assert.isEmpty(result);
});
it('filters out unregistered conversations', () => {
const conversation = {
pendingApprovalMemberships: [
2023-08-16 20:54:39 +00:00
{ aci: normalizeAci(unregisteredConversation.serviceId, 'test') },
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingApprovalMemberships;
assert.isEmpty(result);
});
it('hydrates pending-approval memberships', () => {
const conversation = {
pendingApprovalMemberships: [
2023-08-16 20:54:39 +00:00
{ aci: normalizeAci(normalConversation2.serviceId, 'test') },
{ aci: normalizeAci(normalConversation1.serviceId, 'test') },
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingApprovalMemberships;
assert.lengthOf(result, 2);
assert.deepEqual(result[0], { member: normalConversation2 });
assert.deepEqual(result[1], { member: normalConversation1 });
});
});
describe('pendingMemberships', () => {
it('returns an empty array if passed undefined', () => {
const conversation = {};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingMemberships;
assert.isEmpty(result);
});
it('returns an empty array if passed an empty array', () => {
const conversation = { pendingMemberships: [] };
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingMemberships;
assert.isEmpty(result);
});
it("filters out conversation IDs that don't exist", () => {
const conversation = {
pendingMemberships: [
2021-10-26 22:59:08 +00:00
{
2023-08-16 20:54:39 +00:00
serviceId: generateAci(),
addedByUserId: normalizeAci(normalConversation1.serviceId, 'test'),
2021-10-26 22:59:08 +00:00
},
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingMemberships;
assert.isEmpty(result);
});
it('filters out unregistered conversations', () => {
const conversation = {
pendingMemberships: [
{
2023-08-16 20:54:39 +00:00
serviceId: unregisteredConversation.serviceId,
addedByUserId: normalizeAci(normalConversation1.serviceId, 'test'),
},
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingMemberships;
assert.isEmpty(result);
});
it('hydrates pending memberships', () => {
const abc = generateAci();
const xyz = generateAci();
2021-10-26 22:59:08 +00:00
const conversation = {
pendingMemberships: [
2023-08-16 20:54:39 +00:00
{ serviceId: normalConversation2.serviceId, addedByUserId: abc },
{ serviceId: normalConversation1.serviceId, addedByUserId: xyz },
],
};
2021-11-11 22:43:05 +00:00
const result = getGroupMemberships(
conversation,
getConversationByServiceId
2021-11-11 22:43:05 +00:00
).pendingMemberships;
assert.lengthOf(result, 2);
assert.deepEqual(result[0], {
member: normalConversation2,
2021-10-26 22:59:08 +00:00
metadata: { addedByUserId: abc },
});
assert.deepEqual(result[1], {
member: normalConversation1,
2021-10-26 22:59:08 +00:00
metadata: { addedByUserId: xyz },
});
});
});
});