Skip to content

Commit 463031a

Browse files
committed
Add activity data mapping test
1 parent 795f0d2 commit 463031a

File tree

6 files changed

+104
-7
lines changed

6 files changed

+104
-7
lines changed

packages/stream_feeds/lib/src/feeds_client.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ class FeedsClient {
1717
TokenProvider? userTokenProvider,
1818
this.config = const FeedsConfig(),
1919
FeedsClientEnvironment environment = const FeedsClientEnvironment(),
20-
}) {
20+
}) : assert(
21+
userToken != null || userTokenProvider != null,
22+
'Provide either a user token or a user token provider, or both',
23+
) {
2124
tokenManager = userTokenProvider != null
2225
? TokenManager.provider(
2326
user: user,
2427
provider: userTokenProvider,
28+
token: userToken,
2529
)
2630
: TokenManager.static(user: user, token: userToken ?? '');
2731

packages/stream_feeds/lib/src/models/activity_data.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class ActivityData implements Identifiable {
5858
}
5959

6060
return copyWith(
61-
reactionCount: reactionGroups.totalCount,
61+
reactionCount: newReactionGroups.totalCount,
6262
latestReactions: List.unmodifiable(newLatestReactions),
6363
ownReactions: List.unmodifiable(newOwnReactions),
6464
reactionGroups: Map.unmodifiable(newReactionGroups),
@@ -83,7 +83,7 @@ class ActivityData implements Identifiable {
8383
}
8484

8585
return copyWith(
86-
reactionCount: reactionGroups.totalCount,
86+
reactionCount: newReactionGroups.totalCount,
8787
latestReactions: List.unmodifiable(newLatestReactions),
8888
ownReactions: List.unmodifiable(newOwnReactions),
8989
reactionGroups: Map.unmodifiable(newReactionGroups),

packages/stream_feeds/lib/src/state_layer/feed_ws_handler.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class FeedWsHandler {
1717
String get currentUserId => client.user.id;
1818

1919
void _onEvent(FeedsWsEvent event) {
20-
switch (event.event) {
20+
switch (event.apiEvent) {
2121
case final WSClientEventActivityReactionAddedEvent wsEvent:
2222
stateNotifier.onReactionAdded(
2323
wsEvent.activityReactionAddedEvent.reaction.toModel(),

packages/stream_feeds/lib/src/ws/feeds_ws_event.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import 'package:stream_core/stream_core.dart' as core;
77
import '../generated/api/api.dart' as api;
88

99
class FeedsWsEvent extends core.WsEvent {
10-
const FeedsWsEvent(this.event);
10+
const FeedsWsEvent(this.apiEvent);
1111

12-
final api.WSClientEvent? event;
12+
final api.WSClientEvent? apiEvent;
1313

1414
static core.WsEvent fromEventObject(Object message) {
1515
try {

packages/stream_feeds/test/feeds_client_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ void main() {
186186
expect(events, hasLength(1));
187187
expect(events[0], isA<FeedsWsEvent>());
188188
expect(
189-
(events[0] as FeedsWsEvent).event,
189+
(events[0] as FeedsWsEvent).apiEvent,
190190
isA<api.WSClientEventCommentAddedEvent>(),
191191
);
192192

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import 'package:stream_feeds/stream_feeds.dart';
2+
import 'package:test/test.dart';
3+
4+
void main() {
5+
test(
6+
'Add reaction to activityData should create a new instance with updated reaction count',
7+
() {
8+
final activityData = createActivityData();
9+
10+
final updatedActivityData = activityData.addReaction(
11+
FeedsReactionData(
12+
activityId: '1',
13+
type: 'like',
14+
user: const UserData(id: 'testUser'),
15+
createdAt: DateTime.now(),
16+
updatedAt: DateTime.now(),
17+
customData: const {},
18+
),
19+
currentUserId: 'testUser',
20+
);
21+
22+
expect(updatedActivityData.reactionCount, 1);
23+
expect(updatedActivityData, isNot(activityData));
24+
});
25+
26+
test(
27+
'Remove reaction from activityData should create a new instance with updated reaction count',
28+
() {
29+
final activityData = createActivityData(
30+
reactionCount: 2,
31+
latestReactions: [
32+
FeedsReactionData(
33+
activityId: '1',
34+
type: 'like',
35+
user: const UserData(id: 'testUser'),
36+
createdAt: DateTime.now().subtract(const Duration(days: 1)),
37+
updatedAt: DateTime.now(),
38+
customData: const {},
39+
),
40+
FeedsReactionData(
41+
activityId: '1',
42+
type: 'like',
43+
user: const UserData(id: 'testUser2'),
44+
createdAt: DateTime.now(),
45+
updatedAt: DateTime.now(),
46+
customData: const {},
47+
),
48+
],
49+
reactionGroups: {
50+
'like': ReactionGroupData(
51+
count: 2,
52+
firstReactionAt: DateTime.now().subtract(const Duration(days: 7)),
53+
lastReactionAt: DateTime.now(),
54+
),
55+
},
56+
);
57+
58+
expect(activityData.reactionCount, 2);
59+
final updatedActivityData = activityData.removeReaction(
60+
FeedsReactionData(
61+
activityId: '1',
62+
type: 'like',
63+
user: const UserData(id: 'testUser'),
64+
createdAt: DateTime.now().subtract(const Duration(days: 1)),
65+
updatedAt: DateTime.now(),
66+
customData: const {},
67+
),
68+
currentUserId: 'testUser',
69+
);
70+
71+
expect(updatedActivityData.reactionCount, 1);
72+
expect(updatedActivityData, isNot(activityData));
73+
});
74+
}
75+
76+
ActivityData createActivityData({
77+
String? id,
78+
UserData? user,
79+
String? text,
80+
int? reactionCount,
81+
List<FeedsReactionData>? latestReactions,
82+
List<FeedsReactionData>? ownReactions,
83+
Map<String, ReactionGroupData>? reactionGroups,
84+
}) =>
85+
ActivityData(
86+
id: id ?? '1',
87+
user: user ?? const UserData(id: 'testUser'),
88+
text: text ?? 'test message',
89+
reactionCount: reactionCount ?? 0,
90+
latestReactions: latestReactions ?? [],
91+
ownReactions: ownReactions ?? [],
92+
reactionGroups: reactionGroups ?? {},
93+
);

0 commit comments

Comments
 (0)