File tree 3 files changed +44
-1
lines changed
3 files changed +44
-1
lines changed Original file line number Diff line number Diff line change @@ -363,6 +363,24 @@ class ZulipStream {
363
363
required this .streamWeeklyTraffic,
364
364
});
365
365
366
+ /// Construct a plain [ZulipStream] from [subscription] .
367
+ factory ZulipStream .fromSubscription (Subscription subscription) {
368
+ return ZulipStream (
369
+ streamId: subscription.streamId,
370
+ name: subscription.name,
371
+ description: subscription.description,
372
+ renderedDescription: subscription.renderedDescription,
373
+ dateCreated: subscription.dateCreated,
374
+ firstMessageId: subscription.firstMessageId,
375
+ inviteOnly: subscription.inviteOnly,
376
+ isWebPublic: subscription.isWebPublic,
377
+ historyPublicToSubscribers: subscription.historyPublicToSubscribers,
378
+ messageRetentionDays: subscription.messageRetentionDays,
379
+ channelPostPolicy: subscription.channelPostPolicy,
380
+ streamWeeklyTraffic: subscription.streamWeeklyTraffic,
381
+ );
382
+ }
383
+
366
384
factory ZulipStream .fromJson (Map <String , dynamic > json) =>
367
385
_$ZulipStreamFromJson (json);
368
386
Original file line number Diff line number Diff line change @@ -301,7 +301,16 @@ class ChannelStoreImpl with ChannelStore {
301
301
302
302
case SubscriptionRemoveEvent ():
303
303
for (final streamId in event.streamIds) {
304
- subscriptions.remove (streamId);
304
+ assert (streams.containsKey (streamId));
305
+ assert (streams[streamId] is Subscription );
306
+ assert (streamsByName.containsKey (streams[streamId]! .name));
307
+ assert (streamsByName[streams[streamId]! .name] is Subscription );
308
+ assert (subscriptions.containsKey (streamId));
309
+ final subscription = subscriptions.remove (streamId);
310
+ if (subscription == null ) continue ; // TODO(log)
311
+ final stream = ZulipStream .fromSubscription (subscription);
312
+ streams[streamId] = stream;
313
+ streamsByName[subscription.name] = stream;
305
314
}
306
315
307
316
case SubscriptionUpdateEvent ():
Original file line number Diff line number Diff line change @@ -68,6 +68,22 @@ void main() {
68
68
));
69
69
checkUnified (store);
70
70
});
71
+
72
+ test ('removed then added by events' , () async {
73
+ final stream = eg.stream ();
74
+ final store = eg.store ();
75
+ await store.addStream (stream);
76
+ await store.addSubscription (eg.subscription (stream));
77
+ checkUnified (store);
78
+
79
+ await store.handleEvent (SubscriptionRemoveEvent (id: 1 ,
80
+ streamIds: [stream.streamId]));
81
+ checkUnified (store);
82
+
83
+ await store.handleEvent (SubscriptionAddEvent (id: 1 ,
84
+ subscriptions: [eg.subscription (stream)]));
85
+ checkUnified (store);
86
+ });
71
87
});
72
88
73
89
group ('SubscriptionEvent' , () {
You can’t perform that action at this time.
0 commit comments