Skip to content

Commit d6df9d7

Browse files
committed
Add test for pagination
1 parent 7783cbc commit d6df9d7

File tree

2 files changed

+79
-1
lines changed

2 files changed

+79
-1
lines changed

packages/stream_feeds/test/state/feed_test.dart

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,5 +440,78 @@ void main() {
440440
),
441441
);
442442
});
443+
444+
test('Pagination should load more aggregated activities', () async {
445+
const feedId = FeedId(group: 'stories', id: 'target');
446+
const nextPagination = 'next';
447+
const prevPagination = 'prev';
448+
449+
final activity1 = createDefaultActivityResponse()
450+
.activity
451+
.copyWith(id: 'storyActivityId1');
452+
453+
final activity2 = createDefaultActivityResponse()
454+
.activity
455+
.copyWith(id: 'storyActivityId2');
456+
457+
final activity3 = createDefaultActivityResponse()
458+
.activity
459+
.copyWith(id: 'storyActivityId3');
460+
461+
when(
462+
() => feedsApi.getOrCreateFeed(
463+
feedGroupId: feedId.group,
464+
feedId: feedId.id,
465+
getOrCreateFeedRequest: any(named: 'getOrCreateFeedRequest'),
466+
),
467+
).thenAnswer(
468+
(invocation) async {
469+
final request =
470+
invocation.namedArguments[const Symbol('getOrCreateFeedRequest')]
471+
as GetOrCreateFeedRequest;
472+
473+
if (request.next == null) {
474+
return Result.success(
475+
createDefaultGetOrCreateFeedResponse(
476+
nextPagination: nextPagination,
477+
aggregatedActivities: [
478+
createDefaultAggregatedActivityResponse(
479+
group: 'group1',
480+
activities: [activity1, activity2],
481+
),
482+
],
483+
),
484+
);
485+
}
486+
if (request.next == nextPagination) {
487+
return Result.success(
488+
createDefaultGetOrCreateFeedResponse(
489+
prevPagination: prevPagination,
490+
aggregatedActivities: [
491+
createDefaultAggregatedActivityResponse(
492+
group: 'group2',
493+
activities: [activity3],
494+
),
495+
],
496+
),
497+
);
498+
}
499+
throw Exception('Unexpected request');
500+
},
501+
);
502+
503+
final feed = client.feedFromId(feedId);
504+
505+
final result = await feed.getOrCreate();
506+
result.getOrThrow();
507+
508+
expect(feed.state.aggregatedActivities.length, 1);
509+
expect(feed.state.aggregatedActivities.first.activities.length, 2);
510+
511+
await feed.queryMoreActivities();
512+
513+
expect(feed.state.aggregatedActivities.length, 2);
514+
expect(feed.state.aggregatedActivities.last.activities.length, 1);
515+
});
443516
});
444517
}

packages/stream_feeds/test/test_utils/fakes.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ GetOrCreateFeedResponse createDefaultGetOrCreateFeedResponse({
104104
int followingCount = 0,
105105
List<AggregatedActivityResponse> aggregatedActivities = const [],
106106
List<ActivityResponse> activities = const [],
107+
String? prevPagination,
108+
String? nextPagination,
107109
}) =>
108110
GetOrCreateFeedResponse(
109111
feed: createDefaultFeedResponse(
@@ -118,6 +120,8 @@ GetOrCreateFeedResponse createDefaultGetOrCreateFeedResponse({
118120
following: const [],
119121
members: const [],
120122
pinnedActivities: const [],
123+
next: nextPagination,
124+
prev: prevPagination,
121125
);
122126

123127
FeedResponse createDefaultFeedResponse({
@@ -156,6 +160,7 @@ FeedResponse createDefaultFeedResponse({
156160

157161
AggregatedActivityResponse createDefaultAggregatedActivityResponse({
158162
List<ActivityResponse>? activities,
163+
String group = 'group',
159164
}) =>
160165
AggregatedActivityResponse(
161166
activities: activities ??
@@ -164,7 +169,7 @@ AggregatedActivityResponse createDefaultAggregatedActivityResponse({
164169
],
165170
activityCount: activities?.length ?? 1,
166171
createdAt: DateTime(2021, 2, 1),
167-
group: 'group',
172+
group: group,
168173
score: 0,
169174
updatedAt: DateTime(2021, 2, 1),
170175
userCount: 1,

0 commit comments

Comments
 (0)