Conversation
Reviewer's GuideThis PR enhances the File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
Summary by CodeRabbit
Summary by CodeRabbit
WalkthroughThis change adds a new asynchronous test to check the behaviour of the Changes
Sequence Diagram(s)sequenceDiagram
participant Test as Test Runner
participant Queue as queue_frames
Test->>Queue: Call with empty priority list
Queue-->>Test: Return empty output vector
Possibly related PRs
Suggested reviewers
Poem
✨ Finishing Touches
🧪 Generate unit tests
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Hey @leynos - I've reviewed your changes - here's some feedback:
- The new single‐case edge tests overlap with the existing parameterized
processes_all_priorities_in_ordercases—consider consolidating them to reduce redundancy. - Hardcoding expected frame IDs (
1u8,2u8) can be brittle; consider deriving the expected values from the queue handle or helper so tests stay in sync with implementation changes.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- The new single‐case edge tests overlap with the existing parameterized `processes_all_priorities_in_order` cases—consider consolidating them to reduce redundancy.
- Hardcoding expected frame IDs (`1u8`, `2u8`) can be brittle; consider deriving the expected values from the queue handle or helper so tests stay in sync with implementation changes.Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@sourcery-ai review |
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
tests/connection_actor.rs(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
`**/*.rs`: Comment why, not what. Explain assumptions, edge cases, trade-offs, o...
**/*.rs: Comment why, not what. Explain assumptions, edge cases, trade-offs, or complexity. Don't echo the obvious.
Comments must use en-GB-oxendict spelling and grammar.
Function documentation must include clear examples.
Every module must begin with a module level (//!) comment explaining the module's purpose and utility.
Document public APIs using Rustdoc comments (///) so documentation can be generated with cargo doc.
Place function attributes after doc comments.
Do not usereturnin single-line functions.
Use predicate functions for conditional criteria with more than two branches.
Lints must not be silenced except as a last resort.
Lint rule suppressions must be tightly scoped and include a clear reason.
Preferexpectoverallow.
Prefer.expect()over.unwrap().
Clippy warnings MUST be disallowed.
Fix any warnings emitted during tests in the code itself rather than silencing them.
Where a function is too long, extract meaningfully named helper functions adhering to separation of concerns and CQRS.
Where a function has too many parameters, group related parameters in meaningfully named structs.
Where a function is returning a large error consider usingArcto reduce the amount of data returned.
Write unit and behavioural tests for new functionality. Run both before and after making any change.
Prefer immutable data and avoid unnecessarymutbindings.
Handle errors with theResulttype instead of panicking where feasible.
Avoidunsafecode unless absolutely necessary and document any usage clearly.
📄 Source: CodeRabbit Inference Engine (AGENTS.md)
List of files the instruction was applied to:
tests/connection_actor.rs
`**/*.rs`: * Seek to keep the cyclomatic complexity of functions no more than 12...
**/*.rs: * Seek to keep the cyclomatic complexity of functions no more than 12.
Adhere to single responsibility and CQRS
Place function attributes after doc comments.
Do not use
returnin single-line functions.Move conditionals with >2 branches into a predicate function.
Avoid
unsafeunless absolutely necessary.Every module must begin with a
//!doc comment that explains the module's purpose and utility.Comments must use en-GB-oxendict spelling and grammar.
Lints must not be silenced except as a last resort.
#[allow]is forbidden.- Only narrowly scoped
#[expect(lint, reason = "...")]is allowed.- No lint groups, no blanket or file-wide suppression.
- Include
FIXME:with link if a fix is expected.Use
rstestfixtures for shared setup and to avoid repetition between tests.Replace duplicated tests with
#[rstest(...)]parameterised cases.Prefer
mockallfor mocks/stubs.Prefer
.expect()over.unwrap()Ensure that any API or behavioural changes are reflected in the documentation in
docs/Ensure that any completed roadmap steps are recorded in the appropriate roadmap in
docs/
⚙️ Source: CodeRabbit Configuration File
List of files the instruction was applied to:
tests/connection_actor.rs
⏰ Context from checks skipped due to timeout of 240000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Analyze (actions)
- GitHub Check: build-test
🔇 Additional comments (2)
tests/connection_actor.rs (2)
133-136: Excellent edge case coverage additions.These new test cases properly cover the edge cases mentioned in the PR objectives:
- Empty input (
Vec::new())- Single high-priority element
- Single low-priority element
- Mixed single-element priority orders
The additions enhance test robustness whilst maintaining consistency with the existing parameterised test structure.
139-140: Good coverage of different priority orderings.These additional cases test varied priority sequences, ensuring the actor correctly handles different ordering scenarios with multiple elements of each priority type.
| // Ensure the helper correctly handles edge cases without queued frames. | ||
| #[rstest] | ||
| #[case(vec![Priority::High, Priority::High, Priority::High, Priority::Low, Priority::Low])] | ||
| #[case(vec![Priority::Low, Priority::Low, Priority::High, Priority::High, Priority::High])] | ||
| #[tokio::test] | ||
| async fn queue_frames_empty_input(queues: (PushQueues<u8>, wireframe::push::PushHandle<u8>)) { | ||
| let (_, handle) = queues; | ||
| let priorities: &[Priority] = &[]; | ||
| let result = queue_frames(priorities, &handle, 0).await; | ||
| assert!(result.is_empty(), "Expected empty output for empty input"); | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Consider removing this test in favour of the parameterised case.
This standalone test duplicates coverage already provided by the Vec::new() case in the parameterised test below. The parameterised test is more comprehensive as it tests the full actor behaviour rather than just the helper function.
Following the coding guideline to "replace duplicated tests with #[rstest(...)] parameterised cases", this standalone test should be removed.
🤖 Prompt for AI Agents
In tests/connection_actor.rs around lines 122 to 130, the standalone test
queue_frames_empty_input duplicates coverage already provided by the
parameterised test with Vec::new(). Remove this standalone test to avoid
redundancy and follow the guideline of replacing duplicated tests with
parameterised cases that cover the full actor behaviour.
Summary
queue_framescoverage with empty and single-element testsTesting
make fmtmake lintmake testhttps://chatgpt.com/codex/tasks/task_e_686c3d4166448322b5fe5bf528f4fe47
Summary by Sourcery
Add edge-case tests for queue_frames to ensure correct behavior with empty, single-element, and minimal mixed inputs.
Tests: