@@ -67,193 +67,130 @@ void main() {
67
67
}
68
68
}
69
69
70
+ void checkHandleMessages (List <Message > oldMessages, List <Message > newMessages) {
71
+ setupModel (oldMessages);
72
+ model.handleMessages (newMessages);
73
+ final expectedMessages = [...oldMessages, ...newMessages]
74
+ ..removeWhere ((m) => m is ! StreamMessage )
75
+ ..sort ((m1, m2) => m1.id.compareTo (m2.id));
76
+ checkMatchesMessages (model, expectedMessages);
77
+ }
78
+
70
79
group ('single tracker' , () {
71
80
test ('batch goes before the existing messages' , () {
72
- final existingMessages = [
81
+ checkHandleMessages ( [
73
82
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
74
83
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
75
- ];
76
- setupModel (existingMessages);
77
-
78
- final messages = [
84
+ ], [
79
85
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
80
86
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
81
- ];
82
- model.handleMessages (messages);
83
-
84
- checkMatchesMessages (model,
85
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
87
+ ]);
86
88
});
87
89
88
90
test ('batch goes after the existing messages' , () {
89
- final existingMessages = [
91
+ checkHandleMessages ( [
90
92
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
91
93
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
92
- ];
93
- setupModel (existingMessages);
94
-
95
- final messages = [
94
+ ], [
96
95
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 500 ),
97
96
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 600 ),
98
- ];
99
- model.handleMessages (messages);
100
-
101
- checkMatchesMessages (model,
102
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
97
+ ]);
103
98
});
104
99
105
100
test ('batch is interspersed among the existing messages' , () {
106
- final existingMessages = [
101
+ checkHandleMessages ( [
107
102
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
108
103
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
109
- ];
110
- setupModel (existingMessages);
111
-
112
- final messages = [
104
+ ], [
113
105
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
114
106
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
115
107
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 500 ),
116
- ];
117
- model.handleMessages (messages);
118
-
119
- checkMatchesMessages (model,
120
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
108
+ ]);
121
109
});
122
110
123
111
test ('batch contains some of already-existing messages' , () {
124
- final existingMessages = [
112
+ checkHandleMessages ( [
125
113
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
126
114
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
127
115
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
128
- ];
129
- setupModel (existingMessages);
130
-
131
- final messages = [
116
+ ], [
132
117
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
133
118
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
134
119
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
135
120
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 500 ),
136
- ];
137
- model.handleMessages (messages);
138
-
139
- checkMatchesMessages (model,
140
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
121
+ ]);
141
122
});
142
123
143
124
test ('batch with both DM and stream messages -> ignores DM, processes stream messages' , () {
144
- final existingMessages = [
125
+ checkHandleMessages ( [
145
126
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
146
127
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
147
- ];
148
- setupModel (existingMessages);
149
-
150
- final dmMessage = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser], id: 400 );
151
- final messages = [
128
+ ], [
152
129
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
153
- dmMessage,
130
+ eg. dmMessage (from : eg.otherUser, to : [eg.selfUser], id : 400 ) ,
154
131
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 500 ),
155
- ];
156
- model.handleMessages (messages);
157
-
158
- checkMatchesMessages (model,
159
- [...existingMessages, ...messages..remove (dmMessage)]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
132
+ ]);
160
133
});
161
134
});
162
135
163
136
group ('multiple trackers' , () {
164
137
test ('batch goes before the existing messages' , () {
165
- final existingMessages = [
138
+ checkHandleMessages ( [
166
139
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
167
140
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 500 ),
168
141
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 600 ),
169
- ];
170
- setupModel (existingMessages);
171
-
172
- final messages = [
142
+ ], [
173
143
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
174
144
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 400 ),
175
- ];
176
- model.handleMessages (messages);
177
-
178
- checkMatchesMessages (model,
179
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
145
+ ]);
180
146
});
181
147
182
148
test ('batch goes after the existing messages' , () {
183
- final existingMessages = [
149
+ checkHandleMessages ( [
184
150
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
185
151
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 600 ),
186
- ];
187
- setupModel (existingMessages);
188
-
189
- final messages = [
152
+ ], [
190
153
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 400 ),
191
154
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 500 ),
192
155
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 700 ),
193
- ];
194
- model.handleMessages (messages);
195
-
196
- checkMatchesMessages (model,
197
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
156
+ ]);
198
157
});
199
158
200
159
test ('batch is interspersed among the existing messages' , () {
201
- final existingMessages = [
160
+ checkHandleMessages ( [
202
161
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
203
162
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
204
163
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 500 ),
205
164
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 700 ),
206
- ];
207
- setupModel (existingMessages);
208
-
209
- final messages = [
165
+ ], [
210
166
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
211
167
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 400 ),
212
168
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 600 ),
213
169
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 800 ),
214
- ];
215
- model.handleMessages (messages);
216
-
217
- checkMatchesMessages (model,
218
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
170
+ ]);
219
171
});
220
172
221
173
test ('batch contains some of already-existing messages' , () {
222
- final existingMessages = [
174
+ checkHandleMessages ( [
223
175
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
224
176
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 300 ),
225
177
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 400 ),
226
- ];
227
- setupModel (existingMessages);
228
-
229
- final messages = [
178
+ ], [
230
179
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 200 ),
231
180
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 400 ),
232
181
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 500 ),
233
- ];
234
- model.handleMessages (messages);
235
-
236
- checkMatchesMessages (model,
237
- [...existingMessages, ...messages]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
182
+ ]);
238
183
});
239
184
240
185
test ('batch with both DM and stream messages -> ignores DM, processes stream messages' , () {
241
- final existingMessages = [
186
+ checkHandleMessages ( [
242
187
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 100 ),
243
188
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 200 ),
244
- ];
245
- setupModel (existingMessages);
246
-
247
- final dmMessage = eg.dmMessage (from: eg.otherUser, to: [eg.selfUser], id: 200 );
248
- final messages = [
189
+ ], [
249
190
eg.streamMessage (stream: stream1, topic: 'a' , sender: user10, id: 300 ),
250
- dmMessage,
191
+ eg. dmMessage (from : eg.otherUser, to : [eg.selfUser], id : 200 ) ,
251
192
eg.streamMessage (stream: stream1, topic: 'b' , sender: user10, id: 400 ),
252
- ];
253
- model.handleMessages (messages);
254
-
255
- checkMatchesMessages (model,
256
- [...existingMessages, ...messages..remove (dmMessage)]..sort ((m1, m2) => m1.id.compareTo (m2.id)));
193
+ ]);
257
194
});
258
195
});
259
196
});
0 commit comments