@wireapp/core 17.22.1 → 17.24.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/package.json +2 -2
- package/src/main/Account.d.ts +10 -1
- package/src/main/Account.js +8 -2
- package/src/main/Account.js.map +1 -1
- package/src/main/Account.ts +15 -2
- package/src/main/broadcast/BroadcastService.js +3 -4
- package/src/main/broadcast/BroadcastService.js.map +1 -1
- package/src/main/broadcast/BroadcastService.ts +3 -5
- package/src/main/conversation/ConversationService.d.ts +4 -6
- package/src/main/conversation/ConversationService.js +26 -59
- package/src/main/conversation/ConversationService.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.js +0 -38
- package/src/main/conversation/ConversationService.test.node.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.ts +1 -50
- package/src/main/conversation/ConversationService.ts +32 -116
- package/src/main/conversation/message/MessageService.d.ts +42 -12
- package/src/main/conversation/message/MessageService.js +147 -275
- package/src/main/conversation/message/MessageService.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.js +117 -10
- package/src/main/conversation/message/MessageService.test.node.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.ts +183 -40
- package/src/main/conversation/message/MessageService.ts +209 -354
- package/src/main/conversation/message/UserClientsUtil.d.ts +22 -0
- package/src/main/conversation/message/UserClientsUtil.js +38 -0
- package/src/main/conversation/message/UserClientsUtil.js.map +1 -0
- package/src/main/conversation/message/UserClientsUtil.ts +44 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.d.ts +1 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.js +42 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.js.map +1 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.ts +44 -0
- package/src/main/cryptography/CryptographyService.d.ts +6 -1
- package/src/main/cryptography/CryptographyService.js +14 -2
- package/src/main/cryptography/CryptographyService.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.node.js +2 -2
- package/src/main/cryptography/CryptographyService.test.node.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.node.ts +5 -4
- package/src/main/cryptography/CryptographyService.ts +22 -4
- package/src/main/util/TypePredicateUtil.js +3 -9
- package/src/main/util/TypePredicateUtil.js.map +1 -1
- package/src/main/util/TypePredicateUtil.ts +3 -9
|
@@ -24,8 +24,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
24
24
|
const uuidjs_1 = __importDefault(require("uuidjs"));
|
|
25
25
|
const http_status_codes_1 = require("http-status-codes");
|
|
26
26
|
const api_client_1 = require("@wireapp/api-client");
|
|
27
|
+
const protocol_messaging_1 = require("@wireapp/protocol-messaging");
|
|
27
28
|
const cryptography_1 = require("../../cryptography");
|
|
28
29
|
const MessageService_1 = require("./MessageService");
|
|
30
|
+
const PayloadHelper_1 = require("../../test/PayloadHelper");
|
|
29
31
|
const baseMessageSendingStatus = {
|
|
30
32
|
deleted: {},
|
|
31
33
|
missing: {},
|
|
@@ -33,8 +35,16 @@ const baseMessageSendingStatus = {
|
|
|
33
35
|
redundant: {},
|
|
34
36
|
time: new Date().toISOString(),
|
|
35
37
|
};
|
|
36
|
-
const user1 = {
|
|
37
|
-
|
|
38
|
+
const user1 = {
|
|
39
|
+
id: uuidjs_1.default.genV4().toString(),
|
|
40
|
+
domain: '1.wire.test',
|
|
41
|
+
clients: ['client1.1', 'client1.2', 'client1.3', 'client1.4'],
|
|
42
|
+
};
|
|
43
|
+
const user2 = {
|
|
44
|
+
id: uuidjs_1.default.genV4().toString(),
|
|
45
|
+
domain: '2.wire.test',
|
|
46
|
+
clients: ['client2.1', 'client2.2', 'client2.3', 'client2.4'],
|
|
47
|
+
};
|
|
38
48
|
function generateQualifiedRecipients(users) {
|
|
39
49
|
const payload = {};
|
|
40
50
|
users.forEach(({ id, domain, clients }) => {
|
|
@@ -43,21 +53,45 @@ function generateQualifiedRecipients(users) {
|
|
|
43
53
|
});
|
|
44
54
|
return payload;
|
|
45
55
|
}
|
|
56
|
+
function generateRecipients(users) {
|
|
57
|
+
return users.reduce((acc, { id, clients }) => {
|
|
58
|
+
acc[id] = clients;
|
|
59
|
+
return acc;
|
|
60
|
+
}, {});
|
|
61
|
+
}
|
|
62
|
+
function fakeEncrypt(_, recipients) {
|
|
63
|
+
const encryptedPayload = Object.entries(recipients).reduce((acc, [domain, users]) => {
|
|
64
|
+
acc[domain] = Object.entries(users).reduce((userClients, [userId, clients]) => {
|
|
65
|
+
userClients[userId] = clients.reduce((payloads, client) => {
|
|
66
|
+
payloads[client] = new Uint8Array();
|
|
67
|
+
return payloads;
|
|
68
|
+
}, {});
|
|
69
|
+
return userClients;
|
|
70
|
+
}, {});
|
|
71
|
+
return acc;
|
|
72
|
+
}, {});
|
|
73
|
+
return Promise.resolve(encryptedPayload);
|
|
74
|
+
}
|
|
46
75
|
describe('MessageService', () => {
|
|
47
76
|
const apiClient = new api_client_1.APIClient();
|
|
48
77
|
const cryptographyService = new cryptography_1.CryptographyService(apiClient, {});
|
|
49
78
|
const messageService = new MessageService_1.MessageService(apiClient, cryptographyService);
|
|
79
|
+
beforeEach(() => {
|
|
80
|
+
spyOn(cryptographyService, 'encryptQualified').and.callFake(fakeEncrypt);
|
|
81
|
+
});
|
|
50
82
|
describe('sendFederatedMessage', () => {
|
|
51
83
|
it('sends a message', async () => {
|
|
52
84
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.returnValue(Promise.resolve(baseMessageSendingStatus));
|
|
53
85
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
54
|
-
await messageService.
|
|
86
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
87
|
+
conversationId: { id: 'convid', domain: '' },
|
|
88
|
+
});
|
|
55
89
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalled();
|
|
56
90
|
});
|
|
57
91
|
describe('client mismatch', () => {
|
|
58
92
|
it('handles client mismatch internally if no onClientMismatch is given', async () => {
|
|
59
93
|
let spyCounter = 0;
|
|
60
|
-
const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { missing: { '2.wire.test': { [user2.id]: ['client22'] } } });
|
|
94
|
+
const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { deleted: { [user1.domain]: { [user1.id]: [user1.clients[0]] } }, missing: { '2.wire.test': { [user2.id]: ['client22'] } } });
|
|
61
95
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.callFake(() => {
|
|
62
96
|
spyCounter++;
|
|
63
97
|
if (spyCounter === 1) {
|
|
@@ -71,9 +105,11 @@ describe('MessageService', () => {
|
|
|
71
105
|
return Promise.resolve(baseMessageSendingStatus);
|
|
72
106
|
});
|
|
73
107
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
74
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(Promise.resolve({ '2.wire.test': { [user2.id]: { client22: new Uint8Array() } } }));
|
|
75
108
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
76
|
-
await messageService.
|
|
109
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
110
|
+
reportMissing: true,
|
|
111
|
+
conversationId: { id: 'convid', domain: '' },
|
|
112
|
+
});
|
|
77
113
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
78
114
|
});
|
|
79
115
|
it('continues message sending if onClientMismatch returns true', async () => {
|
|
@@ -93,9 +129,12 @@ describe('MessageService', () => {
|
|
|
93
129
|
return Promise.resolve(baseMessageSendingStatus);
|
|
94
130
|
});
|
|
95
131
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
96
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(Promise.resolve({ '2.wire.test': { [user2.id]: { client22: new Uint8Array() } } }));
|
|
97
132
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
98
|
-
await messageService.
|
|
133
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
134
|
+
reportMissing: true,
|
|
135
|
+
onClientMismatch,
|
|
136
|
+
conversationId: { id: 'convid', domain: '' },
|
|
137
|
+
});
|
|
99
138
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
100
139
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
101
140
|
});
|
|
@@ -111,13 +150,81 @@ describe('MessageService', () => {
|
|
|
111
150
|
return Promise.reject(error);
|
|
112
151
|
});
|
|
113
152
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
114
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(Promise.resolve({ '2.wire.test': { [user2.id]: { client22: new Uint8Array() } } }));
|
|
115
153
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
116
|
-
await messageService.
|
|
154
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
155
|
+
reportMissing: true,
|
|
156
|
+
onClientMismatch,
|
|
157
|
+
conversationId: { id: 'convid', domain: '' },
|
|
158
|
+
});
|
|
117
159
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(1);
|
|
118
160
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
119
161
|
});
|
|
120
162
|
});
|
|
121
163
|
});
|
|
164
|
+
describe('sendMessage', () => {
|
|
165
|
+
const generateUsers = (userCount, clientsPerUser) => {
|
|
166
|
+
return Array.from(Array(userCount)).map((_, i) => ({
|
|
167
|
+
id: `user${i}`,
|
|
168
|
+
domain: `${i}.domain`,
|
|
169
|
+
clients: Array.from(Array(clientsPerUser)).map((_, j) => `client${i}${j}`),
|
|
170
|
+
}));
|
|
171
|
+
};
|
|
172
|
+
const clientId = 'sendingClient';
|
|
173
|
+
const conversationId = 'conv1';
|
|
174
|
+
const createMessage = (content) => {
|
|
175
|
+
const customTextMessage = protocol_messaging_1.GenericMessage.create({
|
|
176
|
+
messageId: (0, PayloadHelper_1.getUUID)(),
|
|
177
|
+
text: protocol_messaging_1.Text.create({ content }),
|
|
178
|
+
});
|
|
179
|
+
return protocol_messaging_1.GenericMessage.encode(customTextMessage).finish();
|
|
180
|
+
};
|
|
181
|
+
it('should send regular to conversation', async () => {
|
|
182
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
183
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
184
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
185
|
+
conversationId,
|
|
186
|
+
});
|
|
187
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.any(Object), true);
|
|
188
|
+
});
|
|
189
|
+
it('should send protobuf message to conversation', async () => {
|
|
190
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
191
|
+
spyOn(apiClient.conversation.api, 'postOTRProtobufMessage').and.returnValue(Promise.resolve({}));
|
|
192
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
193
|
+
conversationId,
|
|
194
|
+
sendAsProtobuf: true,
|
|
195
|
+
});
|
|
196
|
+
expect(apiClient.conversation.api.postOTRProtobufMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.any(Object), true);
|
|
197
|
+
});
|
|
198
|
+
it('should broadcast regular message if no conversationId is given', async () => {
|
|
199
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
200
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastMessage').and.returnValue(Promise.resolve({}));
|
|
201
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message));
|
|
202
|
+
expect(apiClient.broadcast.api.postBroadcastMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
203
|
+
});
|
|
204
|
+
it('should broadcast protobuf message if no conversationId is given', async () => {
|
|
205
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
206
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastProtobufMessage').and.returnValue(Promise.resolve({}));
|
|
207
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
208
|
+
sendAsProtobuf: true,
|
|
209
|
+
});
|
|
210
|
+
expect(apiClient.broadcast.api.postBroadcastProtobufMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
211
|
+
});
|
|
212
|
+
it('should not send as external if payload small', async () => {
|
|
213
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
214
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
215
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
216
|
+
conversationId,
|
|
217
|
+
});
|
|
218
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.objectContaining({ data: undefined }), true);
|
|
219
|
+
});
|
|
220
|
+
it('should send as external if payload is big', async () => {
|
|
221
|
+
const longMessage = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem';
|
|
222
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
223
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(30, 10)), createMessage(longMessage), {
|
|
224
|
+
conversationId,
|
|
225
|
+
});
|
|
226
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.objectContaining({ data: jasmine.any(String) }), true);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
122
229
|
});
|
|
123
230
|
//# sourceMappingURL=MessageService.test.node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageService.test.node.js","sourceRoot":"","sources":["MessageService.test.node.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;AAEH,oDAA0B;AAC1B,yDAA8C;AAC9C,oDAA8C;AAE9C,qDAAuD;AACvD,qDAAgD;AAEhD,MAAM,wBAAwB,GAAyB;IACrD,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,EAAE;IACb,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CAC/B,CAAC;AAGF,MAAM,KAAK,GAAa,EAAC,EAAE,EAAE,gBAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAC,CAAC;AAClH,MAAM,KAAK,GAAa,EAAC,EAAE,EAAE,gBAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAC,CAAC;AAElH,SAAS,2BAA2B,CAAC,KAAiB;IACpD,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAC,EAAE,EAAE;QACtC,OAAO,CAAC,MAAM,MAAd,OAAO,CAAC,MAAM,IAAM,EAAE,EAAC;QACvB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;IAClC,MAAM,mBAAmB,GAAG,IAAI,kCAAmB,CAAC,SAAS,EAAE,EAAS,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,IAAI,+BAAc,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC1E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;YAC/B,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjH,MAAM,UAAU,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAE/D,MAAM,cAAc,CAAC,uBAAuB,CAC1C,gBAAgB,EAChB,EAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAC,EAC1B,UAAU,EACV,IAAI,UAAU,EAAE,CACjB,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC/B,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;gBAClF,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,MAAM,cAAc,mCAAO,wBAAwB,KAAE,OAAO,EAAE,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAC,EAAC,GAAC,CAAC;gBAC3G,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACtE,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,KAAK,CAAC,EAAE;wBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;wBACzB,KAAa,CAAC,QAAQ,GAAG;4BACxB,MAAM,EAAE,+BAAW,CAAC,mBAAmB;4BACvC,IAAI,EAAE,cAAc;yBACrB,CAAC;wBACF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBAC9B;oBACD,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClG,KAAK,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,WAAW,CAC5D,OAAO,CAAC,OAAO,CAAC,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,EAAC,EAAC,EAAC,CAAC,CAC7E,CAAC;gBAEF,MAAM,UAAU,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE/D,MAAM,cAAc,CAAC,uBAAuB,CAC1C,gBAAgB,EAChB,EAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAC,EAC1B,UAAU,EACV,IAAI,UAAU,EAAE,EAChB,EAAC,aAAa,EAAE,IAAI,EAAC,CACtB,CAAC;gBACF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpF,MAAM,cAAc,mCAAO,wBAAwB,KAAE,OAAO,EAAE,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAC,EAAC,GAAC,CAAC;gBAC3G,IAAI,UAAU,GAAG,CAAC,CAAC;gBACnB,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACtE,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,KAAK,CAAC,EAAE;wBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;wBACzB,KAAa,CAAC,QAAQ,GAAG;4BACxB,MAAM,EAAE,+BAAW,CAAC,mBAAmB;4BACvC,IAAI,EAAE,cAAc;yBACrB,CAAC;wBACF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBAC9B;oBACD,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClG,KAAK,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,WAAW,CAC5D,OAAO,CAAC,OAAO,CAAC,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,EAAC,EAAC,EAAC,CAAC,CAC7E,CAAC;gBAEF,MAAM,UAAU,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE/D,MAAM,cAAc,CAAC,uBAAuB,CAC1C,gBAAgB,EAChB,EAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAC,EAC1B,UAAU,EACV,IAAI,UAAU,EAAE,EAChB,EAAC,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAC,CACxC,CAAC;gBACF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC7E,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;gBACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrF,MAAM,cAAc,mCAAO,wBAAwB,KAAE,OAAO,EAAE,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,EAAC,EAAC,GAAC,CAAC;gBAC3G,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACtE,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAa,CAAC,QAAQ,GAAG;wBACxB,MAAM,EAAE,+BAAW,CAAC,mBAAmB;wBACvC,IAAI,EAAE,cAAc;qBACrB,CAAC;oBACF,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClG,KAAK,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,WAAW,CAC5D,OAAO,CAAC,OAAO,CAAC,EAAC,aAAa,EAAE,EAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,EAAC,EAAC,EAAC,CAAC,CAC7E,CAAC;gBAEF,MAAM,UAAU,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAE/D,MAAM,cAAc,CAAC,uBAAuB,CAC1C,gBAAgB,EAChB,EAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAC,EAC1B,UAAU,EACV,IAAI,UAAU,EAAE,EAChB,EAAC,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAC,CACxC,CAAC;gBACF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBAC7E,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"MessageService.test.node.js","sourceRoot":"","sources":["MessageService.test.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,18 @@
|
|
|
20
20
|
import UUID from 'uuidjs';
|
|
21
21
|
import {StatusCodes} from 'http-status-codes';
|
|
22
22
|
import {APIClient} from '@wireapp/api-client';
|
|
23
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
ClientMismatch,
|
|
25
|
+
MessageSendingStatus,
|
|
26
|
+
OTRRecipients,
|
|
27
|
+
QualifiedOTRRecipients,
|
|
28
|
+
QualifiedUserClients,
|
|
29
|
+
UserClients,
|
|
30
|
+
} from '@wireapp/api-client/src/conversation';
|
|
31
|
+
import {GenericMessage, Text} from '@wireapp/protocol-messaging';
|
|
24
32
|
import {CryptographyService} from '../../cryptography';
|
|
25
33
|
import {MessageService} from './MessageService';
|
|
34
|
+
import {getUUID} from '../../test/PayloadHelper';
|
|
26
35
|
|
|
27
36
|
const baseMessageSendingStatus: MessageSendingStatus = {
|
|
28
37
|
deleted: {},
|
|
@@ -33,8 +42,16 @@ const baseMessageSendingStatus: MessageSendingStatus = {
|
|
|
33
42
|
};
|
|
34
43
|
|
|
35
44
|
type TestUser = {id: string; domain: string; clients: string[]};
|
|
36
|
-
const user1: TestUser = {
|
|
37
|
-
|
|
45
|
+
const user1: TestUser = {
|
|
46
|
+
id: UUID.genV4().toString(),
|
|
47
|
+
domain: '1.wire.test',
|
|
48
|
+
clients: ['client1.1', 'client1.2', 'client1.3', 'client1.4'],
|
|
49
|
+
};
|
|
50
|
+
const user2: TestUser = {
|
|
51
|
+
id: UUID.genV4().toString(),
|
|
52
|
+
domain: '2.wire.test',
|
|
53
|
+
clients: ['client2.1', 'client2.2', 'client2.3', 'client2.4'],
|
|
54
|
+
};
|
|
38
55
|
|
|
39
56
|
function generateQualifiedRecipients(users: TestUser[]): QualifiedUserClients {
|
|
40
57
|
const payload: QualifiedUserClients = {};
|
|
@@ -45,28 +62,55 @@ function generateQualifiedRecipients(users: TestUser[]): QualifiedUserClients {
|
|
|
45
62
|
return payload;
|
|
46
63
|
}
|
|
47
64
|
|
|
65
|
+
function generateRecipients(users: TestUser[]): UserClients {
|
|
66
|
+
return users.reduce((acc, {id, clients}) => {
|
|
67
|
+
acc[id] = clients;
|
|
68
|
+
return acc;
|
|
69
|
+
}, {} as UserClients);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function fakeEncrypt(_: unknown, recipients: QualifiedUserClients): Promise<QualifiedOTRRecipients> {
|
|
73
|
+
const encryptedPayload = Object.entries(recipients).reduce((acc, [domain, users]) => {
|
|
74
|
+
acc[domain] = Object.entries(users).reduce((userClients, [userId, clients]) => {
|
|
75
|
+
userClients[userId] = clients.reduce((payloads, client) => {
|
|
76
|
+
payloads[client] = new Uint8Array();
|
|
77
|
+
return payloads;
|
|
78
|
+
}, {} as any);
|
|
79
|
+
return userClients;
|
|
80
|
+
}, {} as OTRRecipients<Uint8Array>);
|
|
81
|
+
return acc;
|
|
82
|
+
}, {} as QualifiedOTRRecipients);
|
|
83
|
+
return Promise.resolve(encryptedPayload);
|
|
84
|
+
}
|
|
85
|
+
|
|
48
86
|
describe('MessageService', () => {
|
|
49
87
|
const apiClient = new APIClient();
|
|
50
88
|
const cryptographyService = new CryptographyService(apiClient, {} as any);
|
|
51
89
|
const messageService = new MessageService(apiClient, cryptographyService);
|
|
90
|
+
|
|
91
|
+
beforeEach(() => {
|
|
92
|
+
spyOn(cryptographyService, 'encryptQualified').and.callFake(fakeEncrypt);
|
|
93
|
+
});
|
|
94
|
+
|
|
52
95
|
describe('sendFederatedMessage', () => {
|
|
53
96
|
it('sends a message', async () => {
|
|
54
97
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.returnValue(Promise.resolve(baseMessageSendingStatus));
|
|
55
98
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
56
99
|
|
|
57
|
-
await messageService.
|
|
58
|
-
'
|
|
59
|
-
|
|
60
|
-
recipients,
|
|
61
|
-
new Uint8Array(),
|
|
62
|
-
);
|
|
100
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
101
|
+
conversationId: {id: 'convid', domain: ''},
|
|
102
|
+
});
|
|
63
103
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalled();
|
|
64
104
|
});
|
|
65
105
|
|
|
66
106
|
describe('client mismatch', () => {
|
|
67
107
|
it('handles client mismatch internally if no onClientMismatch is given', async () => {
|
|
68
108
|
let spyCounter = 0;
|
|
69
|
-
const clientMismatch = {
|
|
109
|
+
const clientMismatch = {
|
|
110
|
+
...baseMessageSendingStatus,
|
|
111
|
+
deleted: {[user1.domain]: {[user1.id]: [user1.clients[0]]}},
|
|
112
|
+
missing: {'2.wire.test': {[user2.id]: ['client22']}},
|
|
113
|
+
};
|
|
70
114
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.callFake(() => {
|
|
71
115
|
spyCounter++;
|
|
72
116
|
if (spyCounter === 1) {
|
|
@@ -80,19 +124,13 @@ describe('MessageService', () => {
|
|
|
80
124
|
return Promise.resolve(baseMessageSendingStatus);
|
|
81
125
|
});
|
|
82
126
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
83
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(
|
|
84
|
-
Promise.resolve({'2.wire.test': {[user2.id]: {client22: new Uint8Array()}}}),
|
|
85
|
-
);
|
|
86
127
|
|
|
87
128
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
88
129
|
|
|
89
|
-
await messageService.
|
|
90
|
-
|
|
91
|
-
{id: 'convid', domain: ''},
|
|
92
|
-
|
|
93
|
-
new Uint8Array(),
|
|
94
|
-
{reportMissing: true},
|
|
95
|
-
);
|
|
130
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
131
|
+
reportMissing: true,
|
|
132
|
+
conversationId: {id: 'convid', domain: ''},
|
|
133
|
+
});
|
|
96
134
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
97
135
|
});
|
|
98
136
|
|
|
@@ -113,19 +151,14 @@ describe('MessageService', () => {
|
|
|
113
151
|
return Promise.resolve(baseMessageSendingStatus);
|
|
114
152
|
});
|
|
115
153
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
116
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(
|
|
117
|
-
Promise.resolve({'2.wire.test': {[user2.id]: {client22: new Uint8Array()}}}),
|
|
118
|
-
);
|
|
119
154
|
|
|
120
155
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
121
156
|
|
|
122
|
-
await messageService.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{reportMissing: true, onClientMismatch},
|
|
128
|
-
);
|
|
157
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
158
|
+
reportMissing: true,
|
|
159
|
+
onClientMismatch,
|
|
160
|
+
conversationId: {id: 'convid', domain: ''},
|
|
161
|
+
});
|
|
129
162
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
130
163
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
131
164
|
});
|
|
@@ -142,22 +175,132 @@ describe('MessageService', () => {
|
|
|
142
175
|
return Promise.reject(error);
|
|
143
176
|
});
|
|
144
177
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
145
|
-
spyOn(cryptographyService, 'encryptQualified').and.returnValue(
|
|
146
|
-
Promise.resolve({'2.wire.test': {[user2.id]: {client22: new Uint8Array()}}}),
|
|
147
|
-
);
|
|
148
178
|
|
|
149
179
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
150
180
|
|
|
151
|
-
await messageService.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
{reportMissing: true, onClientMismatch},
|
|
157
|
-
);
|
|
181
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
182
|
+
reportMissing: true,
|
|
183
|
+
onClientMismatch,
|
|
184
|
+
conversationId: {id: 'convid', domain: ''},
|
|
185
|
+
});
|
|
158
186
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(1);
|
|
159
187
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
160
188
|
});
|
|
161
189
|
});
|
|
162
190
|
});
|
|
191
|
+
|
|
192
|
+
describe('sendMessage', () => {
|
|
193
|
+
const generateUsers = (userCount: number, clientsPerUser: number): TestUser[] => {
|
|
194
|
+
return Array.from(Array(userCount)).map<TestUser>((_, i) => ({
|
|
195
|
+
id: `user${i}`,
|
|
196
|
+
domain: `${i}.domain`,
|
|
197
|
+
clients: Array.from(Array(clientsPerUser)).map((_, j) => `client${i}${j}`),
|
|
198
|
+
}));
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const clientId = 'sendingClient';
|
|
202
|
+
const conversationId = 'conv1';
|
|
203
|
+
const createMessage = (content: string) => {
|
|
204
|
+
const customTextMessage = GenericMessage.create({
|
|
205
|
+
messageId: getUUID(),
|
|
206
|
+
text: Text.create({content}),
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
return GenericMessage.encode(customTextMessage).finish();
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
it('should send regular to conversation', async () => {
|
|
213
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
214
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
215
|
+
|
|
216
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
217
|
+
conversationId,
|
|
218
|
+
});
|
|
219
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
220
|
+
clientId,
|
|
221
|
+
conversationId,
|
|
222
|
+
jasmine.any(Object),
|
|
223
|
+
true,
|
|
224
|
+
);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('should send protobuf message to conversation', async () => {
|
|
228
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
229
|
+
spyOn(apiClient.conversation.api, 'postOTRProtobufMessage').and.returnValue(
|
|
230
|
+
Promise.resolve({} as ClientMismatch),
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
234
|
+
conversationId,
|
|
235
|
+
sendAsProtobuf: true,
|
|
236
|
+
});
|
|
237
|
+
expect(apiClient.conversation.api.postOTRProtobufMessage).toHaveBeenCalledWith(
|
|
238
|
+
clientId,
|
|
239
|
+
conversationId,
|
|
240
|
+
jasmine.any(Object),
|
|
241
|
+
true,
|
|
242
|
+
);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('should broadcast regular message if no conversationId is given', async () => {
|
|
246
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
247
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
248
|
+
|
|
249
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message));
|
|
250
|
+
expect(apiClient.broadcast.api.postBroadcastMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it('should broadcast protobuf message if no conversationId is given', async () => {
|
|
254
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
255
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastProtobufMessage').and.returnValue(
|
|
256
|
+
Promise.resolve({} as ClientMismatch),
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
260
|
+
sendAsProtobuf: true,
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
expect(apiClient.broadcast.api.postBroadcastProtobufMessage).toHaveBeenCalledWith(
|
|
264
|
+
clientId,
|
|
265
|
+
jasmine.any(Object),
|
|
266
|
+
true,
|
|
267
|
+
);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('should not send as external if payload small', async () => {
|
|
271
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
272
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
273
|
+
|
|
274
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
275
|
+
conversationId,
|
|
276
|
+
});
|
|
277
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
278
|
+
clientId,
|
|
279
|
+
conversationId,
|
|
280
|
+
jasmine.objectContaining({data: undefined}),
|
|
281
|
+
true,
|
|
282
|
+
);
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
it('should send as external if payload is big', async () => {
|
|
286
|
+
const longMessage =
|
|
287
|
+
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem';
|
|
288
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
289
|
+
|
|
290
|
+
await messageService.sendMessage(
|
|
291
|
+
clientId,
|
|
292
|
+
generateRecipients(generateUsers(30, 10)),
|
|
293
|
+
createMessage(longMessage),
|
|
294
|
+
{
|
|
295
|
+
conversationId,
|
|
296
|
+
},
|
|
297
|
+
);
|
|
298
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
299
|
+
clientId,
|
|
300
|
+
conversationId,
|
|
301
|
+
jasmine.objectContaining({data: jasmine.any(String)}),
|
|
302
|
+
true,
|
|
303
|
+
);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
163
306
|
});
|