Skip to content

Commit 7783cbc

Browse files
committed
Add unit test to mark activity watched
1 parent a2f6bdb commit 7783cbc

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed

packages/stream_feeds/test/state/feed_test.dart

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,4 +345,100 @@ void main() {
345345
);
346346
});
347347
});
348+
349+
group('Story events', () {
350+
late StreamController<Object> wsStreamController;
351+
late MockWebSocketSink webSocketSink;
352+
353+
setUp(() async {
354+
wsStreamController = StreamController<Object>();
355+
webSocketSink = MockWebSocketSink();
356+
WsTestConnection(
357+
wsStreamController: wsStreamController,
358+
webSocketSink: webSocketSink,
359+
webSocketChannel: webSocketChannel,
360+
).setUp();
361+
362+
await client.connect();
363+
});
364+
365+
tearDown(() async {
366+
await webSocketSink.close();
367+
await wsStreamController.close();
368+
});
369+
370+
test('Watch story should update isWatched', () async {
371+
const feedId = FeedId(group: 'stories', id: 'target');
372+
final activity1 = createDefaultActivityResponse().activity.copyWith(
373+
isWatched: false,
374+
id: 'storyActivityId1',
375+
);
376+
377+
final activity2 = createDefaultActivityResponse().activity.copyWith(
378+
isWatched: false,
379+
id: 'storyActivityId2',
380+
);
381+
382+
when(
383+
() => feedsApi.getOrCreateFeed(
384+
feedGroupId: feedId.group,
385+
feedId: feedId.id,
386+
getOrCreateFeedRequest: any(named: 'getOrCreateFeedRequest'),
387+
),
388+
).thenAnswer(
389+
(_) async => Result.success(
390+
createDefaultGetOrCreateFeedResponse(
391+
aggregatedActivities: [
392+
createDefaultAggregatedActivityResponse(
393+
activities: [activity1, activity2],
394+
),
395+
],
396+
),
397+
),
398+
);
399+
400+
final feed = client.feedFromId(feedId);
401+
402+
final result = await feed.getOrCreate();
403+
result.getOrThrow();
404+
405+
expect(feed.state.aggregatedActivities.length, 1);
406+
expect(
407+
feed.state.aggregatedActivities.first.activities.first.isWatched,
408+
false,
409+
);
410+
expect(
411+
feed.state.aggregatedActivities.first.activities[1].isWatched,
412+
false,
413+
);
414+
415+
feed.notifier.stream.listen(
416+
expectAsync1(
417+
(event) {
418+
expect(event, isA<FeedState>());
419+
expect(
420+
event.aggregatedActivities.first.activities.first.isWatched,
421+
true,
422+
);
423+
expect(
424+
event.aggregatedActivities.first.activities[1].isWatched,
425+
false,
426+
);
427+
},
428+
),
429+
);
430+
431+
wsStreamController.add(
432+
jsonEncode(
433+
ActivityMarkEvent(
434+
type: EventTypes.activityMarked,
435+
createdAt: DateTime.now(),
436+
custom: const {},
437+
fid: feedId.toString(),
438+
markWatched: [activity1.id],
439+
),
440+
),
441+
);
442+
});
443+
});
348444
}

packages/stream_feeds/test/test_utils/event_types.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class EventTypes {
2+
static const String activityMarked = 'feeds.activity.marked';
3+
24
static const String followCreated = 'feeds.follow.created';
35
static const String followDeleted = 'feeds.follow.deleted';
46
static const String followUpdated = 'feeds.follow.updated';

packages/stream_feeds/test/test_utils/fakes.dart

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,16 @@ PollResponseData createDefaultPollResponseData({
102102
GetOrCreateFeedResponse createDefaultGetOrCreateFeedResponse({
103103
int followerCount = 0,
104104
int followingCount = 0,
105+
List<AggregatedActivityResponse> aggregatedActivities = const [],
106+
List<ActivityResponse> activities = const [],
105107
}) =>
106108
GetOrCreateFeedResponse(
107109
feed: createDefaultFeedResponse(
108110
followerCount: followerCount,
109111
followingCount: followingCount,
110112
),
111-
activities: const [],
112-
aggregatedActivities: const [],
113+
activities: activities,
114+
aggregatedActivities: aggregatedActivities,
113115
created: true,
114116
duration: '',
115117
followers: const [],
@@ -151,3 +153,20 @@ FeedResponse createDefaultFeedResponse({
151153
pinCount: 0,
152154
updatedAt: DateTime.now(),
153155
);
156+
157+
AggregatedActivityResponse createDefaultAggregatedActivityResponse({
158+
List<ActivityResponse>? activities,
159+
}) =>
160+
AggregatedActivityResponse(
161+
activities: activities ??
162+
[
163+
createDefaultActivityResponse().activity,
164+
],
165+
activityCount: activities?.length ?? 1,
166+
createdAt: DateTime(2021, 2, 1),
167+
group: 'group',
168+
score: 0,
169+
updatedAt: DateTime(2021, 2, 1),
170+
userCount: 1,
171+
userCountTruncated: false,
172+
);

0 commit comments

Comments
 (0)