Skip to content
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

Ai writer test #7660

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open

Ai writer test #7660

wants to merge 10 commits into from

Conversation

appflowy
Copy link
Contributor

@appflowy appflowy commented Mar 31, 2025

Feature Preview


PR Checklist

  • My code adheres to AppFlowy's Conventions
  • I've listed at least one issue that this PR fixes in the description above.
  • I've added a test(s) to validate changes in this PR, or this PR only contains semantic changes.
  • All existing tests are passing.

Summary by Sourcery

Enhance AI writer testing infrastructure by adding mock AI repository and improving test coverage for AI-related features in the document editor

New Features:

  • Introduce MockAIRepository for simulating AI responses
  • Add integration test for AI-powered document editing features

Enhancements:

  • Refactor AI service dependency injection to use GetIt
  • Improve error handling and logging in AI writer cubit
  • Add support for mocking AI responses in different test scenarios

Tests:

  • Add comprehensive test cases for AI writer functionality
  • Implement mock AI repository for consistent and predictable AI responses in tests
  • Create integration tests for AI writing improvements, grammar fixes, and user questions

Copy link

sourcery-ai bot commented Mar 31, 2025

Reviewer's Guide by Sourcery

This PR adds comprehensive tests for the AI writer feature, including bloc unit tests and integration tests. It introduces a mock AI repository to facilitate testing and covers various AI writer commands such as 'improve writing', 'fix grammar', and 'ask AI'. The tests verify the correct behavior of the AI writer in different scenarios, including accepting and discarding suggestions, and ensure that the document is updated as expected.

Sequence diagram for AI Writer Completion Stream

sequenceDiagram
    participant User
    participant AiWriterCubit
    participant AIRepository
    participant AIModel

    User->>AiWriterCubit: Request Completion
    AiWriterCubit->>AIRepository: streamCompletion(text, format)
    AIRepository->>AIModel: Call AI Model API
    AIModel-->>AIRepository: Return Completion Stream
    AIRepository-->>AiWriterCubit: Return (String, CompletionStream)?
    AiWriterCubit-->>User: Update UI with Streaming Results
Loading

File-Level Changes

Change Details Files
Updated the AI writer bloc tests to use a mock AI repository and added tests for various AI writer commands.
  • Registered a mock AI repository in the tests.
  • Added tests for 'improve writing', 'fix grammar', and 'ask AI' commands.
  • Refactored the tests to use MockAIRepository for better testability.
  • Added a validator to the MockAIRepository to validate the completion history.
  • Added tests to verify the correct number of children are created in the document after accepting the AI suggestion.
  • Added tests to verify the correct text is inserted into the document after accepting the AI suggestion.
  • Added tests to verify the correct text is present in the document after discarding the AI suggestion.
frontend/appflowy_flutter/test/bloc_test/ai_writer_test/ai_writer_bloc_test.dart
frontend/appflowy_flutter/integration_test/desktop/cloud/document/document_ai_writer_test.dart
frontend/appflowy_flutter/integration_test/shared/base.dart
frontend/appflowy_flutter/lib/plugins/document/presentation/editor_plugins/ai/operations/ai_writer_cubit.dart
frontend/appflowy_flutter/lib/env/cloud_env.dart
frontend/appflowy_flutter/lib/ai/service/appflowy_ai_service.dart
frontend/appflowy_flutter/lib/mobile/presentation/setting/self_host/self_host_bottom_sheet.dart
frontend/appflowy_flutter/lib/startup/deps_resolver.dart
frontend/appflowy_flutter/lib/workspace/application/settings/appflowy_cloud_urls_bloc.dart
frontend/appflowy_flutter/integration_test/desktop/document/document_copy_and_paste_test.dart
frontend/appflowy_flutter/integration_test/shared/mock/mock_ai.dart
frontend/appflowy_flutter/integration_test/shared/ai_test_op.dart

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @appflowy - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Consider adding more specific test case names to improve readability.
  • The introduction of registerMockRepository looks good for testability.
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@appflowy
Copy link
Contributor Author

test_1.mov

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.

3 participants