@@ -207,7 +207,8 @@ void main() {
207207 ..content.not ((it) => it.equals (updateEvent.renderedContent! ))
208208 ..lastEditTimestamp.isNull ()
209209 ..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);
211212
212213 await store.handleEvent (updateEvent);
213214 checkNotifiedOnce ();
@@ -216,7 +217,8 @@ void main() {
216217 ..content.equals (updateEvent.renderedContent! )
217218 ..lastEditTimestamp.equals (updateEvent.editTimestamp)
218219 ..flags.equals (updateEvent.flags)
219- ..isMeMessage.equals (updateEvent.isMeMessage! );
220+ ..isMeMessage.equals (updateEvent.isMeMessage! )
221+ ..editState.equals (MessageEditState .edited);
220222 });
221223
222224 test ('ignore when message unknown' , () async {
@@ -269,6 +271,79 @@ void main() {
269271 test ('rendering-only update does not change timestamp (for old server versions)' , () async {
270272 await checkRenderingOnly (legacy: true );
271273 });
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+ });
272347 });
273348
274349 group ('handleUpdateMessageFlagsEvent' , () {
0 commit comments