signal-desktop/ts/test-both/groups/message_merge_test.ts
2022-03-15 17:11:28 -07:00

217 lines
5.3 KiB
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { UUID } from '../../types/UUID';
import {
_isGroupChangeMessageBounceable,
_mergeGroupChangeMessages,
} from '../../groups';
describe('group message merging', () => {
const defaultMessage = {
id: UUID.generate().toString(),
conversationId: UUID.generate().toString(),
timestamp: Date.now(),
sent_at: Date.now(),
received_at: Date.now(),
};
const uuid = UUID.generate().toString();
describe('_isGroupChangeMessageBounceable', () => {
it('should return true for admin approval add', () => {
assert.isTrue(
_isGroupChangeMessageBounceable({
...defaultMessage,
type: 'group-v2-change',
groupV2Change: {
details: [
{
type: 'admin-approval-add-one',
uuid,
},
],
},
})
);
});
it('should return true for bounce message', () => {
assert.isTrue(
_isGroupChangeMessageBounceable({
...defaultMessage,
type: 'group-v2-change',
groupV2Change: {
details: [
{
type: 'admin-approval-bounce',
times: 1,
isApprovalPending: true,
uuid,
},
],
},
})
);
});
it('should return false otherwise', () => {
assert.isFalse(
_isGroupChangeMessageBounceable({
...defaultMessage,
type: 'group-v2-change',
groupV2Change: {
details: [
{
type: 'admin-approval-remove-one',
uuid,
},
],
},
})
);
});
});
describe('_mergeGroupChangeMessages', () => {
const add = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-add-one' as const,
uuid,
},
],
},
};
const remove = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-remove-one' as const,
uuid,
},
],
},
};
const addOther = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-add-one' as const,
uuid: UUID.generate().toString(),
},
],
},
};
const removeOther = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-remove-one' as const,
uuid: UUID.generate().toString(),
},
],
},
};
const bounce = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-bounce' as const,
times: 1,
isApprovalPending: false,
uuid,
},
],
},
};
const bounceAndAdd = {
...defaultMessage,
type: 'group-v2-change' as const,
groupV2Change: {
details: [
{
type: 'admin-approval-bounce' as const,
times: 1,
isApprovalPending: true,
uuid,
},
],
},
};
it('should merge add with remove if uuid matches', () => {
assert.deepStrictEqual(
_mergeGroupChangeMessages(add, remove)?.groupV2Change?.details,
[
{
isApprovalPending: false,
times: 1,
type: 'admin-approval-bounce',
uuid,
},
]
);
});
it('should not merge add with remove if uuid does not match', () => {
assert.isUndefined(_mergeGroupChangeMessages(add, removeOther));
});
it('should merge bounce with add if uuid matches', () => {
assert.deepStrictEqual(
_mergeGroupChangeMessages(bounce, add)?.groupV2Change?.details,
[
{
isApprovalPending: true,
times: 1,
type: 'admin-approval-bounce',
uuid,
},
]
);
});
it('should merge bounce and add with remove if uuid matches', () => {
assert.deepStrictEqual(
_mergeGroupChangeMessages(bounceAndAdd, remove)?.groupV2Change?.details,
[
{
isApprovalPending: false,
times: 2,
type: 'admin-approval-bounce',
uuid,
},
]
);
});
it('should not merge bounce with add if uuid does not match', () => {
assert.isUndefined(_mergeGroupChangeMessages(bounce, addOther));
});
it('should not merge bounce and add with add', () => {
assert.isUndefined(_mergeGroupChangeMessages(bounceAndAdd, add));
});
it('should not merge bounce and add with remove if uuid does not match', () => {
assert.isUndefined(_mergeGroupChangeMessages(bounceAndAdd, removeOther));
});
it('should not merge bounce with remove', () => {
assert.isUndefined(_mergeGroupChangeMessages(bounce, remove));
});
});
});