Skip to content

Conversation

@xsahil03x
Copy link
Member

@xsahil03x xsahil03x commented Dec 19, 2025

Summary by CodeRabbit

  • New Features

    • Moderation client is now part of the public API for managing user moderation operations.
    • The queryModerationConfigs method now returns structured paginated results for better data handling.
  • Tests

    • Added comprehensive test coverage for all moderation client operations including ban, mute, block, flag, and config management.
    • Enhanced test infrastructure with improved helpers and utilities.

✏️ Tip: You can customize this high-level summary in your review settings.

@xsahil03x xsahil03x requested a review from a team as a code owner December 19, 2025 13:59
@coderabbitai
Copy link

coderabbitai bot commented Dec 19, 2025

Walkthrough

This PR reorganizes test infrastructure and updates a moderation client API. The ModerationClient.queryModerationConfigs method return type changes from Future<void> to Future<Result<PaginationResult<ModerationConfigData>>>. Multiple test testers are migrated into a state/ subdirectory with import path adjustments. Test helpers and factories for moderation responses are added, along with new tester classes for moderation, member lists, and reaction lists. The test package exports are realigned accordingly.

Changes

Cohort / File(s) Summary
Configuration & Metadata
packages/stream_feeds/dart_test.yaml
Added moderation-client tag entry under tags mapping.
Client API Updates
packages/stream_feeds/lib/src/client/moderation_client.dart
Updated queryModerationConfigs return type from Future<void> to Future<Result<PaginationResult<ModerationConfigData>>>. Adjusted imports for ModerationConfigData, PaginationResult, and ModerationConfigsQuery. Updated method documentation.
Client Export & Import Changes
packages/stream_feeds/lib/src/feeds_client.dart, packages/stream_feeds/lib/src/client/feeds_client_impl.dart
Added export of client/moderation_client.dart in feeds_client.dart. Removed moderation_client import from feeds_client_impl.dart.
Test Infrastructure — Core Helpers
packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dart, packages/stream_feeds_test/lib/src/helpers/test_data.dart
Added mockApiFailure method to support error-path mocking. Added 13 test data factory functions for moderation responses (ban, mute, block, flag, configs, etc.).
Test Harnesses — New Testers
packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart, packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
Added five new test tester classes with associated test helper functions and mocking/API response builders.
Test Tester — Import Path Updates
packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart, packages/stream_feeds_test/lib/src/testers/state/bookmark_*.dart, packages/stream_feeds_test/lib/src/testers/state/comment_*.dart, packages/stream_feeds_test/lib/src/testers/state/feed_*.dart, packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart, packages/stream_feeds_test/lib/src/testers/state/poll_*.dart
Updated relative import paths for mocks.dart, test_data.dart, and base_tester.dart to reflect moved directory structure (helpers moved to ../../, base_tester to ../).
Test Package Main Exports
packages/stream_feeds_test/lib/stream_feeds_test.dart
Removed 14 direct tester exports; added 14 new exports under src/testers/state/ path and added moderation_client_tester.dart export.
Moderation Client Test Suite
packages/stream_feeds/test/client/moderation_client_test.dart
New comprehensive test file with 12 feature groups (ban, mute, blockUsers, unblockUsers, getBlockedUsers, flag, submitAction, queryReviewQueue, upsertConfig, deleteConfig, getConfig, queryModerationConfigs), each with success and failure scenarios.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • API signature change (queryModerationConfigs return type): Requires verification of callers and result handling consistency.
  • Repetitive import path updates across ~15 state tester files: Systematic but need spot-check verification for correctness.
  • New test infrastructure (testers, factories, mock helpers): Moderate complexity; additions are well-structured but span multiple files and patterns.
  • Export reorganization: Straightforward but affects public API surface of test package.

Possibly related PRs

Suggested reviewers

  • Brazol
  • renefloor

Poem

🐰 hops with glee
A tester spring, so grand and neat,
Moderation configs, tested complete!
State testers organized with care,
Mock helpers everywhere, everywhere!
adjusts whiskers proudly 🌿

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request description is completely empty, missing all required template sections including CLA, description of changes, and testing instructions. Add a comprehensive description following the template: include CLA checklist, describe the changes made (new tests, helper utilities), explain testing approach, and add any relevant context about Feeds/Moderation client functionality.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main objective of adding tests for Feeds and Moderation client, which aligns with the substantial test additions throughout the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch test/add-moderation-client-tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Base automatically changed from feat/add-missing-event-handlers to main December 19, 2025 14:01
@codecov
Copy link

codecov bot commented Dec 19, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.01%. Comparing base (d63b14c) to head (3f0abc7).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

…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
Copy link

@coderabbitai coderabbitai bot left a 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 @includeInBarrelFile for 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 @includeInBarrelFile annotations for barrel file management.


68-88: Well-structured tester class with proper encapsulation.

The class design follows best practices with:

  • final class for non-extensibility
  • Private constructor preventing direct instantiation
  • Clean public getters exposing state and streams

Similar to the function above, consider adding @includeInBarrelFile to 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 existing createDefaultModerationConfigResponse.

This function duplicates createDefaultModerationConfigResponse (lines 860-873), both returning ConfigResponse with 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.

📥 Commits

Reviewing files that changed from the base of the PR and between d63b14c and 3f0abc7.

📒 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 @freezed mixed mode for data classes in Dart
Return Result<T> from all repository methods in Dart
Apply early return patterns consistently in Dart code
Use pattern matching with switch expressions in Dart
Mark public APIs with @includeInBarrelFile annotation 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.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/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.yaml for code quality

Files:

  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/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.dart
  • packages/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 the lib/ structure in test/ 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.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/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.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_folder_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/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.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/follow_list_tester.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds_test/lib/src/testers/state/feed_tester.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/feed_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/stream_feeds_test/lib/stream_feeds_test.dart
  • packages/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.dart
  • packages/stream_feeds/dart_test.yaml
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/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.dart
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/member_list_tester.dart
  • packages/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.yaml
  • packages/stream_feeds/lib/src/feeds_client.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_list_tester.dart
  • packages/stream_feeds/lib/src/client/moderation_client.dart
  • packages/stream_feeds/test/client/moderation_client_test.dart
  • packages/stream_feeds_test/lib/src/testers/moderation_client_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_comment_list_tester.dart
  • packages/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.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/moderation_config_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/activity_reaction_list_tester.dart
  • packages/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.dart
  • packages/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.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/bookmark_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/comment_reply_list_tester.dart
  • packages/stream_feeds_test/lib/src/testers/state/poll_vote_list_tester.dart
  • packages/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.dart
  • packages/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.dart
  • packages/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.dart
  • packages/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.dart all 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 modifyResponse callback 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.dispose in 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-client tag is correctly placed in alphabetical order and aligns with the default tags used in the new moderationClientTest helper.

packages/stream_feeds_test/lib/src/helpers/api_mocker_mixin.dart (1)

39-57: LGTM!

The mockApiFailure helper follows the same pattern as mockApi, cleanly delegates to mockApiResult, 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 moderationConfigListTest function follows the established pattern for state testers, with proper @isTest annotation, comprehensive documentation, and consistent parameter naming.


70-126: LGTM!

The ModerationConfigListTester class follows the established tester pattern with clean state accessors and a well-designed get() method that supports response customization via modifyResponse.


128-150: LGTM!

The factory correctly registers cleanup via addTearDown and 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 moderationClientTest function follows the established pattern with proper @isTest annotation and comprehensive documentation. The hardcoded build: (client) => client.moderation is appropriate since ModerationClient is a singleton per StreamFeedsClient.


76-85: LGTM!

The ModerationClientTester is appropriately minimal since ModerationClient is 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. ModerationClient is a stateless API wrapper with no dispose method or resources requiring cleanup, unlike ModerationConfigList which 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 ModerationClient as part of the public API surface, aligning with the moderation getter 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 queryModerationConfigs method
  • Validates success via result.isSuccess
  • Safely extracts and validates the PaginationResult structure
  • 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 ModerationConfigData and PaginationResult from models, and ModerationConfigsQuery from state, which are needed for the updated queryModerationConfigs signature.


160-171: LGTM! Public API signature updated with proper pagination support.

The method signature change from Future<void> to Future<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 commentReactionListTest function 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 CommentReactionListTester class:

  • Extends BaseTester appropriately
  • Exposes typed accessors for state and streams
  • Provides a get() helper that mocks API responses with sensible defaults
  • Supports response customization via modifyResponse callback

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 activityReactionListTest function properly configures test infrastructure with appropriate lifecycle hooks and default tags.


70-138: LGTM! Tester implementation mirrors sibling testers.

The ActivityReactionListTester provides consistent utilities for testing activity reactions, with proper state accessors and a flexible get() 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.

@xsahil03x
Copy link
Member Author

Closing in favor of #75

@xsahil03x xsahil03x closed this Dec 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants