@@ -207,7 +207,8 @@ void main() {
207
207
..content.not ((it) => it.equals (updateEvent.renderedContent! ))
208
208
..lastEditTimestamp.isNull ()
209
209
..flags.not ((it) => it.deepEquals (updateEvent.flags))
210
- ..isMeMessage.not ((it) => it.equals (updateEvent.isMeMessage! ));
210
+ ..isMeMessage.not ((it) => it.equals (updateEvent.isMeMessage! ))
211
+ ..editState.equals (MessageEditState .none);
211
212
212
213
await store.handleEvent (updateEvent);
213
214
checkNotifiedOnce ();
@@ -216,7 +217,8 @@ void main() {
216
217
..content.equals (updateEvent.renderedContent! )
217
218
..lastEditTimestamp.equals (updateEvent.editTimestamp)
218
219
..flags.equals (updateEvent.flags)
219
- ..isMeMessage.equals (updateEvent.isMeMessage! );
220
+ ..isMeMessage.equals (updateEvent.isMeMessage! )
221
+ ..editState.equals (MessageEditState .edited);
220
222
});
221
223
222
224
test ('ignore when message unknown' , () async {
@@ -269,6 +271,79 @@ void main() {
269
271
test ('rendering-only update does not change timestamp (for old server versions)' , () async {
270
272
await checkRenderingOnly (legacy: true );
271
273
});
274
+
275
+ group ('Handle message edit state update' , () {
276
+ final message = eg.streamMessage ();
277
+ final otherMessage = eg.streamMessage ();
278
+
279
+ Future <void > sendEvent (Message message, UpdateMessageEvent event) async {
280
+ await prepare ();
281
+ await prepareMessages ([message, otherMessage]);
282
+
283
+ await store.handleEvent (event);
284
+ checkNotifiedOnce ();
285
+ }
286
+
287
+ test ('message not moved update' , () async {
288
+ await sendEvent (message, eg.updateMessageEditEvent (message));
289
+ check (store).messages[message.id].editState.equals (MessageEditState .edited);
290
+ check (store).messages[otherMessage.id].editState.equals (MessageEditState .none);
291
+ });
292
+
293
+ test ('message topic moved update' , () async {
294
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
295
+ origTopic: 'old topic' ,
296
+ newTopic: 'new topic' ));
297
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
298
+ });
299
+
300
+ test ('message topic resolved update' , () async {
301
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
302
+ origTopic: 'new topic' ,
303
+ newTopic: '✔ new topic' ));
304
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .none)));
305
+ });
306
+
307
+ test ('message topic unresolved update' , () async {
308
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
309
+ origTopic: '✔ new topic' ,
310
+ newTopic: 'new topic' ));
311
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .none)));
312
+ });
313
+
314
+ test ('message topic both resolved and edited update' , () async {
315
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
316
+ origTopic: 'new topic' ,
317
+ newTopic: '✔ new topic 2' ));
318
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
319
+ });
320
+
321
+ test ('message topic both unresolved and edited update' , () async {
322
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
323
+ origTopic: '✔ new topic' ,
324
+ newTopic: 'new topic 2' ));
325
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
326
+ });
327
+
328
+ test ('message stream moved update' , () async {
329
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
330
+ origTopic: 'topic' ,
331
+ newTopic: 'topic' ,
332
+ newStreamId: 20 ));
333
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
334
+ });
335
+
336
+ test ('message is both moved and updated' , () async {
337
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
338
+ origTopic: 'topic' ,
339
+ newTopic: 'topic' ,
340
+ newStreamId: 20 ,
341
+ origContent: 'old content' ,
342
+ newContent: 'new content' ));
343
+ check (store).messages[message.id].editState.equals (MessageEditState .edited);
344
+ check (store).messages[otherMessage.id].editState.equals (MessageEditState .moved);
345
+ });
346
+ });
272
347
});
273
348
274
349
group ('handleUpdateMessageFlagsEvent' , () {
0 commit comments