1
+ import 'package:checks/checks.dart' ;
2
+ import 'package:test/scaffolding.dart' ;
3
+ import 'package:zulip/api/model/events.dart' ;
4
+ import 'package:zulip/api/model/model.dart' ;
5
+ import 'package:zulip/api/route/messages.dart' ;
6
+ import 'package:zulip/model/message_list.dart' ;
7
+ import 'package:zulip/model/narrow.dart' ;
8
+ import 'package:zulip/model/store.dart' ;
9
+ import '../api/fake_api.dart' ;
10
+ import '../model/binding.dart' ;
11
+ import '../model/test_store.dart' ;
12
+ import '../example_data.dart' as eg;
13
+
14
+ const int userId = 1 ;
15
+ const int streamId = 2 ;
16
+
17
+ Future <PerAccountStore > setupStore (ZulipStream stream) async {
18
+ await TestZulipBinding .instance.globalStore.add (eg.selfAccount, eg.initialSnapshot ());
19
+ PerAccountStore store = await TestZulipBinding .instance.globalStore.perAccount (eg.selfAccount.id);
20
+ store.addUser (eg.user (userId: userId));
21
+ store.addStream (stream);
22
+ return store;
23
+ }
24
+
25
+ void main () async {
26
+ TestZulipBinding .ensureInitialized ();
27
+ const narrow = StreamNarrow (streamId);
28
+
29
+ final ZulipStream stream = eg.stream (streamId: streamId);
30
+ PerAccountStore store = await setupStore (stream);
31
+
32
+ group ('update message tests' , () {
33
+
34
+ test ('find message in message list returns index of message' , () async {
35
+ MessageListView messageList = MessageListView .init (store: store, narrow: narrow);
36
+
37
+ final connection = store.connection as FakeApiConnection ;
38
+ Message m1 = eg.streamMessage (id: 792 , stream: stream);
39
+ Message m2 = eg.streamMessage (id: 793 , stream: stream);
40
+ Message m3 = eg.streamMessage (id: 794 , stream: stream);
41
+
42
+ connection.prepare (json: GetMessagesResult (
43
+ anchor: m1.id,
44
+ foundNewest: true ,
45
+ foundOldest: true ,
46
+ foundAnchor: true ,
47
+ historyLimited: false ,
48
+ messages: [m1, m2, m3],
49
+ ).toJson ());
50
+
51
+ await messageList.fetch ();
52
+
53
+ check (messageList.messages.length).equals (3 );
54
+
55
+ int idx = messageList.findMessageWithId (793 );
56
+ check (idx).equals (1 );
57
+
58
+ idx = messageList.findMessageWithId (999 );
59
+ check (idx).equals (- 1 );
60
+ });
61
+
62
+ test ('update events are correctly applied to message' , () async {
63
+ MessageListView messageList = MessageListView .init (store: store, narrow: narrow);
64
+
65
+ final connection = store.connection as FakeApiConnection ;
66
+ String oldContent = "<p>Hello, world</p>" ;
67
+ String newContent = "<p>Hello, edited</p>" ;
68
+ int newTimestamp = 99999 ;
69
+
70
+ Message m = eg.streamMessage (id: 243 , stream: stream, content: oldContent);
71
+ connection.prepare (json: GetMessagesResult (
72
+ anchor: m.id,
73
+ foundNewest: true ,
74
+ foundOldest: true ,
75
+ foundAnchor: true ,
76
+ historyLimited: false ,
77
+ messages: [m],
78
+ ).toJson ());
79
+
80
+ await messageList.fetch ();
81
+
82
+ UpdateMessageEvent updateEvent = UpdateMessageEvent (
83
+ id: 1 ,
84
+ messageId: m.id,
85
+ messageIds: [m.id],
86
+ flags: m.flags,
87
+ renderedContent: newContent,
88
+ editTimestamp: newTimestamp
89
+ );
90
+
91
+ Message oldMessage = messageList.messages[0 ];
92
+ check (oldMessage.content).equals (oldContent);
93
+
94
+ messageList.maybeUpdateMessage (updateEvent);
95
+
96
+ Message updatedMessage = messageList.messages[0 ];
97
+
98
+ check (updatedMessage.content).equals (newContent);
99
+ check (updatedMessage.lastEditTimestamp).equals (newTimestamp);
100
+
101
+ });
102
+ });
103
+ }
0 commit comments