-
Notifications
You must be signed in to change notification settings - Fork 1
test: add tests for Feeds and Moderation client #74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…t-handlers # Conflicts: # packages/stream_feeds/lib/src/state/feed_state.dart
WalkthroughThis PR reorganizes test infrastructure and updates a moderation client API. The Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #74 +/- ##
==========================================
+ Coverage 83.89% 85.01% +1.11%
==========================================
Files 121 121
Lines 4197 4197
==========================================
+ Hits 3521 3568 +47
+ Misses 676 629 -47 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
…lient-tests # Conflicts: # packages/stream_feeds/dart_test.yaml # packages/stream_feeds_test/lib/src/helpers/test_data.dart # packages/stream_feeds_test/lib/stream_feeds_test.dart
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart (2)
11-66: Consider adding @includeInBarrelFile annotation for test package exports.The documentation and implementation are excellent. However, per coding guidelines, public APIs should be marked with
@includeInBarrelFilefor barrel file management. Since this is a public test helper function exported from the package, consider adding the annotation:/// Test helper for member list operations. ... @includeInBarrelFile @isTest void memberListTest(This ensures consistent public API management across the codebase.
Based on coding guidelines, public APIs should use
@includeInBarrelFileannotations for barrel file management.
68-88: Well-structured tester class with proper encapsulation.The class design follows best practices with:
finalclass for non-extensibility- Private constructor preventing direct instantiation
- Clean public getters exposing state and streams
Similar to the function above, consider adding
@includeInBarrelFileto maintain consistency with coding guidelines for public API management.packages/stream_feeds_test/lib/src/helpers/test_data.dart (1)
888-900: Consider consolidating with existingcreateDefaultModerationConfigResponse.This function duplicates
createDefaultModerationConfigResponse(lines 860-873), both returningConfigResponsewith slightly different defaults. Consider whether both are necessary or if one could be removed to reduce redundancy.
Function key team async createDefaultModerationConfigResponse'config-key' 'team-id' false createDefaultConfigResponse'default-config' 'default-team' true If both are intentional for different test scenarios, consider adding documentation to clarify when to use each.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (25)
packages/stream_feeds/dart_test.yaml(1 hunks)packages/stream_feeds/lib/src/client/feeds_client_impl.dart(0 hunks)packages/stream_feeds/lib/src/client/moderation_client.dart(2 hunks)packages/stream_feeds/lib/src/feeds_client.dart(1 hunks)packages/stream_feeds/test/client/moderation_client_test.dart(1 hunks)packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dart(1 hunks)packages/stream_feeds_test/lib/src/helpers/test_data.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart(1 hunks)packages/stream_feeds_test/lib/stream_feeds_test.dart(1 hunks)
💤 Files with no reviewable changes (1)
- packages/stream_feeds/lib/src/client/feeds_client_impl.dart
🧰 Additional context used
📓 Path-based instructions (5)
**/*.dart
📄 CodeRabbit inference engine (.cursor/rules/cursor-rules-location.mdc)
**/*.dart: Use the barrel_files package with @includeInBarrelFile annotations for public API management in Dart projects; keep implementation details in lib/src/ without annotations
Mark only classes, functions, and enums intended for external package usage with @includeInBarrelFile; keep repository classes, mappers, and internal state objects in lib/src/ without annotations
**/*.dart: Use@freezedmixed mode for data classes in Dart
ReturnResult<T>from all repository methods in Dart
Apply early return patterns consistently in Dart code
Use pattern matching withswitchexpressions in Dart
Mark public APIs with@includeInBarrelFileannotation in Dart
Follow enhanced enum vs sealed class guidelines in Dart
Use const constructors where possible in Dart
Implement proper disposal patterns in Dart StateNotifiers and providers
Ensure pure Dart compatibility across VM, Flutter, and Web environments
Plan for StateNotifier reactive patterns when implementing state management in Dart
**/*.dart: Use @freezed for all data classes with required id fields and const constructors
Implement StateNotifier-based reactive state management with automatic change notifications
Apply Result pattern for all async operations with explicit error handling
Use early return patterns for clean control flow in Dart code
Create extension functions for data mapping using.toModel()pattern instead of mapper classes
Mark public APIs with @includeInBarrelFile annotation for barrel file export management
Implement proper resource management with disposal and cleanup patterns in Dart code
Use constructor injection for all dependencies in Dart classes
**/*.dart: All data models should use @freezed with Dart's mixed mode syntax and include @OverRide annotations on fields
Mark classes for public export using @includeInBarrelFile annotation
Use extension functions with.toModel()convention for data mapping instead of dedicated mapper classes
All repository methods must return Result...
Files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
packages/stream_feeds/lib/src/**/*.dart
📄 CodeRabbit inference engine (AGENTS.md)
Use
//for internal/private code documentation
Files:
packages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/lib/src/client/moderation_client.dart
packages/stream_feeds/lib/**/*.dart
📄 CodeRabbit inference engine (AGENTS.md)
Apply Dart analyzer configuration from
analysis_options.yamlfor code quality
Files:
packages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/lib/src/client/moderation_client.dart
{**/api/**/*.dart,**/*_api.dart,**/client/*.dart}
📄 CodeRabbit inference engine (.cursor/rules/stream-feeds-api.mdc)
{**/api/**/*.dart,**/*_api.dart,**/client/*.dart}: Stream Feeds API integration should be implemented according to the Activity Streams specification with structured actor, verb, object, and target fields
Implement proper authentication using API keys and user tokens via the StreamFeedsClient with tokenProvider parameter
Implement structured error handling for Stream Feeds API responses including 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests, and 500 Internal Server Error status codes
Use batch operations for bulk activity creation and updates to optimize API performance
Implement WebSocket event handlers for real-time Stream Feeds updates including activity events, reaction events, follow events, and member events
Respect API rate limiting by implementing retry logic with retry-after headers and designing applications to handle rate limit responses gracefully
Implement circuit breaker pattern for automatic failure recovery in Stream Feeds API interactions
Use connection pooling and gzip compression for efficient HTTP connection management and reduced bandwidth when communicating with Stream Feeds API
Files:
packages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dart
packages/stream_feeds/test/**/*.dart
📄 CodeRabbit inference engine (AGENTS.md)
packages/stream_feeds/test/**/*.dart: Test through public APIs only, not internal StateNotifier implementations
Use HTTP interceptors instead of mocking repositories in tests
Mirror thelib/structure intest/directory organization
Files:
packages/stream_feeds/test/client/moderation_client_test.dart
🧠 Learnings (34)
📓 Common learnings
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/test/**/*.dart : Test through public APIs only, not internal StateNotifier implementations
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/test/**/*.dart : Use HTTP interceptors instead of mocking repositories in tests
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Implement circuit breaker pattern for automatic failure recovery in Stream Feeds API interactions
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Implement structured error handling for Stream Feeds API responses including 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests, and 500 Internal Server Error status codes
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/test/**/*.dart : Test through public APIs only, not internal StateNotifier implementations
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/stream_feeds.dart : Include examples for complex APIs in documentation
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/repository/**/*.dart : All repository methods must return `Result<T>` types for explicit error handling
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds/lib/src/client/moderation_client.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/test/**/*.dart : Mirror the `lib/` structure in `test/` directory organization
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Implement proper authentication using API keys and user tokens via the StreamFeedsClient with tokenProvider parameter
Applied to files:
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
📚 Learning: 2025-12-05T14:36:35.233Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/cursor-rules-location.mdc:0-0
Timestamp: 2025-12-05T14:36:35.233Z
Learning: Applies to test/**/*.dart : Mirror test structure to lib structure in test/ directory with corresponding test file organization following lib/src/ architecture layers
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/stream_feeds.dart : Keep public API minimal - most code should be in `lib/src/` internal directory
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/**/*.dart : Apply Dart analyzer configuration from `analysis_options.yaml` for code quality
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/generated/**/*.dart : Never manually edit generated files (`*.freezed.dart`, `*.g.dart`, `src/generated/`)
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/generated/**/*.dart : Never manually edit OpenAPI-generated API code files in `src/generated/`
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/stream_feeds.dart : Export public API classes from main library entry point `lib/stream_feeds.dart`
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/**/*.dart : Use `//` for internal/private code documentation
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-16T23:49:28.671Z
Learnt from: xsahil03x
Repo: GetStream/stream-feeds-flutter PR: 71
File: packages/stream_feeds/lib/src/state/event/handler/bookmark_folder_list_event_handler.dart:23-40
Timestamp: 2025-12-16T23:49:28.671Z
Learning: In the Stream Feeds Flutter SDK, `BookmarkFolderAddedEvent` does not exist in the backend and SDK. Only `BookmarkFolderUpdatedEvent` and `BookmarkFolderDeletedEvent` are available for bookmark folder event handling.
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/stream_feeds.dart : Follow Effective Dart documentation guidelines for all public APIs
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/stream_feeds.dart : Use `///` for public API documentation in exported classes and methods
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds_test/lib/src/testers/state/feed_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dartpackages/stream_feeds_test/lib/src/helpers/test_data.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/models/**/*.dart : Follow Freezed 3.0 mixed mode syntax with `override` annotations for fields
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/dart_test.yamlpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/lib/src/client/moderation_client.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/state/**/*StateNotifier.dart : Use StateNotifier for reactive state management
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Implement WebSocket event handlers for real-time Stream Feeds updates including activity events, reaction events, follow events, and member events
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dartpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/member_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Stream Feeds API integration should be implemented according to the Activity Streams specification with structured actor, verb, object, and target fields
Applied to files:
packages/stream_feeds/dart_test.yamlpackages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dartpackages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds/test/client/moderation_client_test.dartpackages/stream_feeds_test/lib/src/testers/moderation_client_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/models/**/*.dart : Query naming convention: Use `*Query` suffix for query classes (e.g., `ActivitiesQuery`, `FeedsQuery`)
Applied to files:
packages/stream_feeds/lib/src/feeds_client.dartpackages/stream_feeds/lib/src/client/moderation_client.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Use connection pooling and gzip compression for efficient HTTP connection management and reduced bandwidth when communicating with Stream Feeds API
Applied to files:
packages/stream_feeds/lib/src/feeds_client.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/state/**/*.dart : State class naming convention: Use `*State` suffix for state classes (e.g., `FeedState`, `ActivityListState`)
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/state/**/*StateNotifier.dart : StateNotifier naming convention: Use `*StateNotifier` suffix for StateNotifier implementations (e.g., `FeedStateNotifier`)
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/activity_tester.dartpackages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/repository/**/*.dart : Use extension functions for API-to-domain model mapping in repositories
Applied to files:
packages/stream_feeds/lib/src/client/moderation_client.dartpackages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
📚 Learning: 2025-12-05T14:37:17.519Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-api.mdc:0-0
Timestamp: 2025-12-05T14:37:17.519Z
Learning: Applies to {**/api/**/*.dart,**/*_api.dart,**/client/*.dart} : Use batch operations for bulk activity creation and updates to optimize API performance
Applied to files:
packages/stream_feeds/test/client/moderation_client_test.dart
📚 Learning: 2025-12-05T14:37:05.876Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/project-overview.mdc:0-0
Timestamp: 2025-12-05T14:37:05.876Z
Learning: Applies to **/*.dart : Implement StateNotifier-based reactive state management with automatic change notifications
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
📚 Learning: 2025-12-05T14:37:37.953Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/stream-feeds-sdk.mdc:0-0
Timestamp: 2025-12-05T14:37:37.953Z
Learning: Applies to **/*.dart : Use StateNotifier for reactive state management with automatic change notifications
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
📚 Learning: 2025-12-05T14:36:55.335Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: .cursor/rules/planit-mode.mdc:0-0
Timestamp: 2025-12-05T14:36:55.335Z
Learning: Applies to **/*.dart : Plan for StateNotifier reactive patterns when implementing state management in Dart
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dartpackages/stream_feeds_test/lib/stream_feeds_test.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/repository/**/*.dart : Use early return patterns for validation and errors in repository methods
Applied to files:
packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
📚 Learning: 2025-12-05T14:38:02.662Z
Learnt from: CR
Repo: GetStream/stream-feeds-flutter PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-05T14:38:02.662Z
Learning: Applies to packages/stream_feeds/lib/src/models/**/*.dart : Use `freezed` for all data classes in the Stream Feeds SDK
Applied to files:
packages/stream_feeds_test/lib/src/helpers/test_data.dart
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: build
- GitHub Check: analyze
- GitHub Check: stream_feeds
🔇 Additional comments (37)
packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart (1)
7-9: LGTM! Import paths correctly updated for the reorganization.The import path adjustments accurately reflect the migration of this tester into the
state/subdirectory. All relative paths are mathematically correct for the new location.packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart (1)
7-9: LGTM! Import paths correctly adjusted for directory reorganization.All import paths accurately reflect moving this file one level deeper into the
state/subdirectory. The three relative path adjustments are consistent and all referenced files exist at their resolved locations.packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart (1)
7-9: Import paths correctly adjusted for state/ subdirectory reorganization.All import paths have been correctly updated to reflect the file's new location in
state/. The paths to../../helpers/mocks.dart,../../helpers/test_data.dart, and../base_tester.dartall resolve correctly, and the package barrel file already exports this tester from its new location.packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart (3)
1-9: LGTM! Clean import structure.The imports are well-organized with proper separation between external packages and internal helpers. The test package alias prevents naming conflicts.
89-122: Excellent test helper implementation using modern Dart patterns.The
get()method demonstrates several best practices:
- Tests through public APIs (
memberList.get()) rather than internal implementations- Returns
Future<Result<T>>following the Result pattern from coding guidelines- Uses modern switch expression syntax for clean conditional logic
- Provides flexibility via
modifyResponsecallback while maintaining sensible defaults- Properly mocks HTTP layer rather than repositories
Based on learnings, tests should use public APIs and HTTP interceptors rather than mocking repositories directly.
125-147: Proper resource management with automatic cleanup.The factory function correctly implements disposal patterns by registering
subject.disposein teardown handlers. This ensures resources are cleaned up after tests complete, following coding guidelines for proper resource management in Dart.packages/stream_feeds/dart_test.yaml (1)
15-15: LGTM!The new
moderation-clienttag is correctly placed in alphabetical order and aligns with the default tags used in the newmoderationClientTesthelper.packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dart (1)
39-57: LGTM!The
mockApiFailurehelper follows the same pattern asmockApi, cleanly delegates tomockApiResult, and provides a convenient way to test error paths. The documentation with example is helpful. Based on learnings, this aligns with the recommendation to use HTTP interceptors/mocking patterns for tests.packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart (3)
37-63: LGTM!The
moderationConfigListTestfunction follows the established pattern for state testers, with proper@isTestannotation, comprehensive documentation, and consistent parameter naming.
70-126: LGTM!The
ModerationConfigListTesterclass follows the established tester pattern with clean state accessors and a well-designedget()method that supports response customization viamodifyResponse.
128-150: LGTM!The factory correctly registers cleanup via
addTearDownand follows the internal documentation convention with//comments as per coding guidelines.packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart (3)
44-69: LGTM!The
moderationClientTestfunction follows the established pattern with proper@isTestannotation and comprehensive documentation. The hardcodedbuild: (client) => client.moderationis appropriate sinceModerationClientis a singleton perStreamFeedsClient.
76-85: LGTM!The
ModerationClientTesteris appropriately minimal sinceModerationClientis a stateless facade over API calls. The design aligns with the learning to test through public APIs rather than internal StateNotifier implementations.
91-106: No changes required.ModerationClientis a stateless API wrapper with no dispose method or resources requiring cleanup, unlikeModerationConfigListwhich is a StateNotifier. The absence of teardown registration is correct.packages/stream_feeds_test/lib/src/helpers/test_data.dart (1)
902-1010: LGTM!The new test data factories follow the established pattern with consistent naming (
createDefault*Response), sensible defaults, and proper type construction. These helpers will streamline moderation-related test setup.packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.The import paths have been correctly updated to reflect the new directory structure with testers moved into the
state/subdirectory. The changes are consistent with the broader test infrastructure reorganization.packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart (1)
7-9: LGTM! Clean import path refactoring.Import paths correctly adjusted for the new
state/subdirectory structure.packages/stream_feeds/lib/src/feeds_client.dart (1)
45-45: LGTM! Public API export added correctly.The export statement properly exposes
ModerationClientas part of the public API surface, aligning with themoderationgetter defined later in the interface (Line 762).packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart (1)
7-9: LGTM! Import paths correctly updated for new directory structure.The import paths have been properly adjusted to reflect the tester's new location in the
state/subdirectory.packages/stream_feeds/test/client/moderation_client_test.dart (3)
1-49: LGTM! Well-structured ban operation tests.The ban operation tests follow a consistent pattern with proper setup (fallback values), success and failure scenarios, mocking, assertions, and API verification.
524-558: LGTM! Success test properly validates new return type.The test correctly:
- Mocks the API response with appropriate structure
- Invokes the updated
queryModerationConfigsmethod- Validates success via
result.isSuccess- Safely extracts and validates the
PaginationResultstructure- Verifies API invocation
560-586: LGTM! Failure test properly handles error path.The failure scenario correctly mocks an API error, verifies the result is a failure, and confirms the API was called with expected parameters.
packages/stream_feeds/lib/src/client/moderation_client.dart (2)
4-6: LGTM! Import updates support new return type.The imports correctly bring in
ModerationConfigDataandPaginationResultfrom models, andModerationConfigsQueryfrom state, which are needed for the updatedqueryModerationConfigssignature.
160-171: LGTM! Public API signature updated with proper pagination support.The method signature change from
Future<void>toFuture<Result<PaginationResult<ModerationConfigData>>>provides proper return value semantics and pagination support. Documentation accurately reflects the new return type.packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart (3)
1-68: LGTM! Test wrapper function follows established pattern.The
commentReactionListTestfunction properly sets up test infrastructure with WebSocket support, configurable lifecycle hooks, and appropriate default tags for filtering.
70-137: LGTM! Tester class provides comprehensive test utilities.The
CommentReactionListTesterclass:
- Extends
BaseTesterappropriately- Exposes typed accessors for state and streams
- Provides a
get()helper that mocks API responses with sensible defaults- Supports response customization via
modifyResponsecallback
139-161: LGTM! Factory function properly manages test lifecycle.The factory correctly creates the tester and registers disposal cleanup, ensuring proper resource management.
packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart (3)
1-68: LGTM! Test wrapper follows established conventions.The
activityReactionListTestfunction properly configures test infrastructure with appropriate lifecycle hooks and default tags.
70-138: LGTM! Tester implementation mirrors sibling testers.The
ActivityReactionListTesterprovides consistent utilities for testing activity reactions, with proper state accessors and a flexibleget()helper that defaults to querying reactions tied to the activity ID.
140-162: LGTM! Proper lifecycle management.The factory function correctly initializes the tester and registers cleanup handlers.
packages/stream_feeds_test/lib/stream_feeds_test.dart (1)
24-42: LGTM! Export reorganization improves test infrastructure.The exports have been properly updated to:
- Include the new
moderation_client_tester.dart- Reference state testers from their new
state/subdirectory location- Maintain all previously exported tester functionality
This aligns with the test infrastructure reorganization and mirrors the lib/ structure as per coding guidelines.
Based on learnings, test structure should mirror lib/ structure.
|
Closing in favor of #75 |
Summary by CodeRabbit
New Features
queryModerationConfigsmethod now returns structured paginated results for better data handling.Tests
✏️ Tip: You can customize this high-level summary in your review settings.