Skip to content

Commit 3fc812e

Browse files
committed
Add unit test to mark activity watched
1 parent a2f6bdb commit 3fc812e

File tree

3 files changed

+104
-2
lines changed

3 files changed

+104
-2
lines changed

packages/stream_feeds/test/state/feed_test.dart

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,4 +345,85 @@ 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 activity = createDefaultActivityResponse().activity.copyWith(
373+
isWatched: false,
374+
id: 'storyActivityId',
375+
);
376+
377+
when(
378+
() => feedsApi.getOrCreateFeed(
379+
feedGroupId: feedId.group,
380+
feedId: feedId.id,
381+
getOrCreateFeedRequest: any(named: 'getOrCreateFeedRequest'),
382+
),
383+
).thenAnswer(
384+
(_) async => Result.success(
385+
createDefaultGetOrCreateFeedResponse(
386+
aggregatedActivities: [
387+
createDefaultAggregatedActivityResponse(
388+
activities: [activity],
389+
),
390+
],
391+
),
392+
),
393+
);
394+
395+
final feed = client.feedFromId(feedId);
396+
397+
final result = await feed.getOrCreate();
398+
result.getOrThrow();
399+
400+
expect(feed.state.aggregatedActivities.length, 1);
401+
expect(feed.state.aggregatedActivities.first.activities.first.isWatched,
402+
false);
403+
404+
feed.notifier.stream.listen(
405+
expectAsync1(
406+
(event) {
407+
expect(event, isA<FeedState>());
408+
expect(
409+
event.aggregatedActivities.first.activities.first.isWatched,
410+
true,
411+
);
412+
},
413+
),
414+
);
415+
416+
wsStreamController.add(
417+
jsonEncode(
418+
ActivityMarkEvent(
419+
type: EventTypes.activityMarked,
420+
createdAt: DateTime.now(),
421+
custom: const {},
422+
fid: feedId.toString(),
423+
markWatched: [activity.id],
424+
),
425+
),
426+
);
427+
});
428+
});
348429
}

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)