@@ -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,80 @@ 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
+ ));
298
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
299
+ });
300
+
301
+ test ('message topic resolved update' , () async {
302
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
303
+ origTopic: 'new topic' ,
304
+ newTopic: '✔ new topic' ,
305
+ ));
306
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .none)));
307
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
308
+ origTopic: '✔ new topic' ,
309
+ newTopic: 'new topic 2' ,
310
+ ));
311
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
312
+ });
313
+
314
+ test ('message topic unresolved update' , () async {
315
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
316
+ origTopic: '✔ new topic' ,
317
+ newTopic: 'new topic' ,
318
+ ));
319
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .none)));
320
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
321
+ origTopic: 'new topic' ,
322
+ newTopic: '✔ new topic 2' ,
323
+ ));
324
+ check (store).messages.values.every (((message) => message.editState.equals (MessageEditState .moved)));
325
+ });
326
+
327
+ test ('message stream moved update' , () async {
328
+ await sendEvent (message, eg.updateMessageMoveEvent ([message, otherMessage],
329
+ origTopic: 'topic' ,
330
+ newTopic: 'topic' ,
331
+ newStreamId: 20 ,
332
+ ));
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
+ origContent: 'old content' ,
341
+ origRenderedContent: 'old content' ,
342
+ newStreamId: 20 ,
343
+ ));
344
+ check (store).messages[message.id].editState.equals (MessageEditState .edited);
345
+ check (store).messages[otherMessage.id].editState.equals (MessageEditState .moved);
346
+ });
347
+ });
272
348
});
273
349
274
350
group ('handleUpdateMessageFlagsEvent' , () {
0 commit comments