8.5.3: Remove duplicate accessors in message assembly#499
Conversation
…comes Introduce a new public helper module in the wireframe_testing crate to provide deterministic assertion functions for fragment reassembly and message assembly outcomes. This addition enables downstream tests to cleanly verify incomplete assemblies, completed messages, specific errors (e.g., MessageTooLarge, SequenceMismatch), and cleanup side effects without bespoke pattern matching in each test fixture or integration test. The helpers return non-panicking result types with stable, human-readable diagnostics, supporting both rstest functions and rstest-bdd step functions. The implementation keeps fragment reassembly and message assembly expectations distinct, avoiding a universal error enum, and uses typed expectations and snapshot structs rather than macros. This change consolidates existing ad hoc reassembly assertions into a reusable API, documented via Rustdoc and user guides, and accompanied by new rstest and rstest-bdd coverage. It adheres to existing code structure constraints and maintains non-breaking additive changes. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
Reviewer's GuideAdds a new public Sequence diagram for using reassembly snapshots in testssequenceDiagram
actor Tester
participant RootTest as root_test
participant Fixture as fixture_or_world
participant Reassembly as wireframe_testing_reassembly
participant Wire as wireframe
Tester->>RootTest: run()
RootTest->>Wire: drive_message_assembly_and_reassembly()
Wire-->>RootTest: state(last_result, completed, evicted, buffered)
RootTest->>Fixture: update_world_state(state)
Fixture-->>RootTest: world_with_state
RootTest->>Fixture: build_message_snapshot()
Fixture-->>RootTest: MessageAssemblySnapshot
RootTest->>Reassembly: assert_message_assembly_completed_for_key(snapshot, key, expected_body)
Reassembly->>Reassembly: inspect snapshot
Reassembly-->>RootTest: TestResult
alt assertion_ok
RootTest-->>Tester: test passes
else assertion_err
RootTest-->>Tester: test fails with deterministic diagnostics
end
Class diagram for wireframe_testing::reassembly helpersclassDiagram
class MessageAssemblySnapshot {
+last_result: Option<&Result<Option<AssembledMessage>,MessageAssemblyError>>
+completed_messages: &[AssembledMessage]
+evicted_keys: &[MessageKey]
+buffered_count: usize
+total_buffered_bytes: usize
+new(last_result, completed_messages, evicted_keys, buffered_count, total_buffered_bytes) MessageAssemblySnapshot
}
class MessageAssemblyErrorExpectation {
<<enum>>
+SequenceMismatch(expected: FrameSequence, found: FrameSequence)
+DuplicateFrame(key: MessageKey, sequence: FrameSequence)
+MissingFirstFrame(key: MessageKey)
+DuplicateFirstFrame(key: MessageKey)
+MessageTooLarge(key: MessageKey)
+ConnectionBudgetExceeded(key: MessageKey)
+InFlightBudgetExceeded(key: MessageKey)
}
class FragmentReassemblySnapshot {
+last_reassembled: Option<&ReassembledMessage>
+last_error: Option<&ReassemblyError>
+evicted_ids: &[MessageId]
+buffered_messages: usize
+new(last_reassembled, last_error, evicted_ids, buffered_messages) FragmentReassemblySnapshot
}
class FragmentReassemblyErrorExpectation {
<<enum>>
+MessageTooLarge(message_id: MessageId)
+IndexMismatch
+MessageMismatch
+SeriesComplete
+IndexOverflow
}
class ReassemblyModule {
<<module>>
}
class TestResult {
<<type_alias>>
+Ok
+Err
}
class AssembledMessage {
+message_key() MessageKey
+body() &[u8]
}
class MessageAssemblyError {
}
class MessageSeriesError {
}
class MessageKey {
}
class FrameSequence {
}
class ReassembledMessage {
+payload() &[u8]
}
class ReassemblyError {
}
class FragmentError {
}
class MessageId {
+get() u64
}
ReassemblyModule ..> MessageAssemblySnapshot
ReassemblyModule ..> MessageAssemblyErrorExpectation
ReassemblyModule ..> FragmentReassemblySnapshot
ReassemblyModule ..> FragmentReassemblyErrorExpectation
ReassemblyModule ..> TestResult
MessageAssemblySnapshot --> AssembledMessage
MessageAssemblySnapshot --> MessageAssemblyError
MessageAssemblySnapshot --> MessageKey
FragmentReassemblySnapshot --> ReassembledMessage
FragmentReassemblySnapshot --> ReassemblyError
FragmentReassemblySnapshot --> MessageId
MessageAssemblyErrorExpectation --> MessageAssemblyError
MessageAssemblyErrorExpectation --> MessageSeriesError
MessageAssemblyErrorExpectation --> MessageKey
MessageAssemblyErrorExpectation --> FrameSequence
FragmentReassemblyErrorExpectation --> ReassemblyError
ReassemblyError --> FragmentError
FragmentReassemblyErrorExpectation --> MessageId
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
Summary by CodeRabbitRelease Notes
WalkthroughSummarise addition of deterministic, non‑panicking reassembly assertion helpers: snapshot types, typed expectation enums, and TestResult‑returning assertion functions for fragment reassembly and message assembly; includes documentation, test fixtures, BDD step updates and new integration tests. (≤50 words) Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
…outcomes Introduce a new public `wireframe_testing::reassembly` module with non-panicking, deterministic assertion helpers for both transport fragment reassembly and protocol message assembly. This includes: - Snapshot types capturing state for assertion - Typed expectation enums for errors - Result-returning assertion functions for incomplete, completed, errored, buffered, and evicted conditions Refactor existing test fixtures and BDD step definitions to use these helper APIs, improving test reuse and diagnostic clarity. Documentation and roadmap updated accordingly. These helpers return `TestResult` to integrate smoothly with `rstest` and `rstest-bdd` without panics. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: wireframe_testing/src/reassembly/message_error.rs Comment on file pub(super) fn matches_message_error(
err: &MessageAssemblyError,
expected: MessageAssemblyErrorExpectation,
) -> bool {
match expected {
MessageAssemblyErrorExpectation::SequenceMismatch { expected, found } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::SequenceMismatch {
expected: actual_expected,
found: actual_found,
}) if *actual_expected == expected && *actual_found == found
)
}
MessageAssemblyErrorExpectation::DuplicateFrame { key, sequence } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::DuplicateFrame {
key: actual_key,
sequence: actual_sequence,
}) if *actual_key == key && *actual_sequence == sequence
)
}
MessageAssemblyErrorExpectation::MissingFirstFrame { key } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::MissingFirstFrame {
key: actual_key,
}) if *actual_key == key
)
}
MessageAssemblyErrorExpectation::DuplicateFirstFrame { key } => {
matches!(
err,
MessageAssemblyError::DuplicateFirstFrame { key: actual_key }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::MessageTooLarge { key } => {
matches!(
err,
MessageAssemblyError::MessageTooLarge { key: actual_key, .. }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::ConnectionBudgetExceeded { key } => {
matches!(
err,
MessageAssemblyError::ConnectionBudgetExceeded { key: actual_key, .. }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::InFlightBudgetExceeded { key } => {
matches!(
err,
MessageAssemblyError::InFlightBudgetExceeded { key: actual_key, .. }
if *actual_key == key
)
}
}
}❌ New issue: Complex Method |
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: wireframe_testing/src/reassembly/message.rs Comment on file pub fn assert_message_assembly_buffered_count(
snapshot: MessageAssemblySnapshot<'_>,
expected: usize,
) -> TestResult {
if snapshot.buffered_count == expected {
Ok(())
} else {
Err(format!(
"expected buffered_count={expected}, got {}",
snapshot.buffered_count
)
.into())
}
}❌ New issue: Code Duplication |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
Reduce cyclomatic complexity of matches_message_error from 11 to 1 by extracting each match arm body into a dedicated private helper function. The main function now serves as a pure dispatch table, delegating to seven new private helpers that each encapsulate a single error-matching pattern. No public APIs, use imports, or type definitions were changed. All existing tests pass without modification. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: wireframe_testing/src/reassembly/message.rs Comment on file pub fn assert_message_assembly_buffered_count(
snapshot: MessageAssemblySnapshot<'_>,
expected: usize,
) -> TestResult {
if snapshot.buffered_count == expected {
Ok(())
} else {
Err(format!(
"expected buffered_count={expected}, got {}",
snapshot.buffered_count
)
.into())
}
}❌ New issue: Code Duplication |
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: wireframe_testing/src/reassembly/message_error.rs Comment on file pub(super) fn matches_message_error(
err: &MessageAssemblyError,
expected: MessageAssemblyErrorExpectation,
) -> bool {
match expected {
MessageAssemblyErrorExpectation::SequenceMismatch { expected, found } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::SequenceMismatch {
expected: actual_expected,
found: actual_found,
}) if *actual_expected == expected && *actual_found == found
)
}
MessageAssemblyErrorExpectation::DuplicateFrame { key, sequence } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::DuplicateFrame {
key: actual_key,
sequence: actual_sequence,
}) if *actual_key == key && *actual_sequence == sequence
)
}
MessageAssemblyErrorExpectation::MissingFirstFrame { key } => {
matches!(
err,
MessageAssemblyError::Series(MessageSeriesError::MissingFirstFrame {
key: actual_key,
}) if *actual_key == key
)
}
MessageAssemblyErrorExpectation::DuplicateFirstFrame { key } => {
matches!(
err,
MessageAssemblyError::DuplicateFirstFrame { key: actual_key }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::MessageTooLarge { key } => {
matches!(
err,
MessageAssemblyError::MessageTooLarge { key: actual_key, .. }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::ConnectionBudgetExceeded { key } => {
matches!(
err,
MessageAssemblyError::ConnectionBudgetExceeded { key: actual_key, .. }
if *actual_key == key
)
}
MessageAssemblyErrorExpectation::InFlightBudgetExceeded { key } => {
matches!(
err,
MessageAssemblyError::InFlightBudgetExceeded { key: actual_key, .. }
if *actual_key == key
)
}
}
}❌ New issue: Complex Method |
This comment was marked as resolved.
This comment was marked as resolved.
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: Code Duplicationwireframe_testing/src/reassembly/message.rs: What lead to degradation?The module contains 2 functions with similar structure: assert_message_assembly_buffered_count,assert_message_assembly_total_buffered_bytes Why does this problem occur?Duplicated code often leads to code that's harder to change since the same logical change has to be done in multiple functions. More duplication gives lower code health. How to fix it?A certain degree of duplicated code might be acceptable. The problems start when it is the same behavior that is duplicated across the functions in the module, ie. a violation of the Don't Repeat Yourself (DRY) principle. DRY violations lead to code that is changed together in predictable patterns, which is both expensive and risky. DRY violations can be identified using CodeScene's X-Ray analysis to detect clusters of change coupled functions with high code similarity. Read More |
This comment was marked as resolved.
This comment was marked as resolved.
…rtions Refactor assertion helper functions in message.rs to use a new helper function `assert_usize_field`. This reduces code duplication and improves clarity when asserting usize fields in tests. Additionally, add the "metrics" dependency to Cargo.lock, presumably to support metrics collection enhancements. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix: Code Duplicationwireframe_testing/src/reassembly/message.rs: What lead to degradation?The module contains 2 functions with similar structure: assert_message_assembly_buffered_count,assert_message_assembly_total_buffered_bytes Why does this problem occur?Duplicated code often leads to code that's harder to change since the same logical change has to be done in multiple functions. More duplication gives lower code health. How to fix it?A certain degree of duplicated code might be acceptable. The problems start when it is the same behavior that is duplicated across the functions in the module, ie. a violation of the Don't Repeat Yourself (DRY) principle. DRY violations lead to code that is changed together in predictable patterns, which is both expensive and risky. DRY violations can be identified using CodeScene's X-Ray analysis to detect clusters of change coupled functions with high code similarity. Read More |
This comment was marked as resolved.
This comment was marked as resolved.
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix. Include the file and symbol names indicated in the issue at the head of your response. Code Duplicationwireframe_testing/src/reassembly/message.rs: What lead to degradation?The module contains 2 functions with similar structure: assert_message_assembly_buffered_count,assert_message_assembly_total_buffered_bytes Why does this problem occur?Duplicated code often leads to code that's harder to change since the same logical change has to be done in multiple functions. More duplication gives lower code health. How to fix it?A certain degree of duplicated code might be acceptable. The problems start when it is the same behavior that is duplicated across the functions in the module, ie. a violation of the Don't Repeat Yourself (DRY) principle. DRY violations lead to code that is changed together in predictable patterns, which is both expensive and risky. DRY violations can be identified using CodeScene's X-Ray analysis to detect clusters of change coupled functions with high code similarity. Read More |
This comment was marked as resolved.
This comment was marked as resolved.
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix. Include the file and symbol names indicated in the issue at the head of your response. Code Duplicationwireframe_testing/src/reassembly/message.rs: What lead to degradation?The module contains 2 functions with similar structure: assert_message_assembly_buffered_count,assert_message_assembly_total_buffered_bytes Why does this problem occur?Duplicated code often leads to code that's harder to change since the same logical change has to be done in multiple functions. More duplication gives lower code health. How to fix it?A certain degree of duplicated code might be acceptable. The problems start when it is the same behavior that is duplicated across the functions in the module, ie. a violation of the Don't Repeat Yourself (DRY) principle. DRY violations lead to code that is changed together in predictable patterns, which is both expensive and risky. DRY violations can be identified using CodeScene's X-Ray analysis to detect clusters of change coupled functions with high code similarity. Read More |
This comment was marked as resolved.
This comment was marked as resolved.
|
@coderabbitai As CodeScene is still reporting this concern, please supply a clear explanatory one to two paragraph markdown message I can paste into the CodeScene web ui's diagnostic suppression function so this diagnostic can be silenced. Code Duplicationwireframe_testing/src/reassembly/message.rs: What lead to degradation?The module contains 2 functions with similar structure: assert_message_assembly_buffered_count,assert_message_assembly_total_buffered_bytes Why does this problem occur?Duplicated code often leads to code that's harder to change since the same logical change has to be done in multiple functions. More duplication gives lower code health. How to fix it?A certain degree of duplicated code might be acceptable. The problems start when it is the same behavior that is duplicated across the functions in the module, ie. a violation of the Don't Repeat Yourself (DRY) principle. DRY violations lead to code that is changed together in predictable patterns, which is both expensive and risky. DRY violations can be identified using CodeScene's X-Ray analysis to detect clusters of change coupled functions with high code similarity. Read More |
|
@coderabbitai Have the following now been resolved? Annul any requirements that violate the en-GB-oxendict spelling (-ize / -yse / -our) conventions (for example a request to replace "normalize" with "normalise" or "artefact" with "artifact"), or where the requirement unnecessarily increases cyclomatic complexity. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: Length of output: 23029
No requirements were annulled: none of the original items introduced en-GB-oxendict violations or unnecessarily increased cyclomatic complexity. |
…message assembly outcomes - Added multiple new assertion methods to MessageAssemblyWorld for better test coverage: - assert_result_incomplete to check incomplete outcomes - assert_completed_body and assert_completed_body_for_key to verify completion with expected body - assert_buffered_count for checking buffered assemblies count - assert_error to verify expected message assembly errors - assert_evicted for checking evicted message keys - Improved FragmentWorld reassembly snapshot handling, removing error returns by assuming defaults - Minor documentation and code style fixes in docs and reassembly tests These additions improve test expressiveness and enable deterministic assertions over message assembly and fragment reassembly states. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
Replace `make markdownlint MDLINT=/root/.bun/bin/markdownlint-cli2` with the canonical `make markdownlint` invocation in the validation section. The MDLINT environment variable assignment was environment-specific and not portable across different setups. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs/users-guide.md`:
- Around line 406-410: Update the documentation bullet for
assert_fragment_reassembly_error to enumerate all supported
FragmentReassemblyError variants rather than only “over-limit and ordering”;
specifically mention the full set from
wireframe_testing::reassembly::FragmentReassemblyErrorExpectation (e.g.,
OverLimit, Ordering, MessageMismatch, SeriesComplete, IndexOverflow) and briefly
state what each variant checks so the guide matches the public enum and test
expectations.
In `@tests/reassembly_assertion_helpers.rs`:
- Around line 190-218: The test only covers MessageTooLarge and IndexMismatch
but must exercise all public FragmentReassemblyErrorExpectation variants; extend
the rstest matrix in fragment_assertion_helpers_match_errors to include cases
for MessageTooLargeAny, MessageMismatch, SeriesComplete, and IndexOverflow by
constructing the corresponding wireframe::fragment::ReassemblyError variants and
their matching FragmentReassemblyErrorExpectation (e.g., MessageTooLargeAny,
MessageMismatch, SeriesComplete, IndexOverflow) and assert them with the
existing FragmentReassemblySnapshot::new(...) +
assert_fragment_reassembly_error(...) call so every public expectation in
wireframe_testing/src/reassembly/fragment.rs is covered.
In `@wireframe_testing/src/reassembly/fragment.rs`:
- Around line 90-117: The current helper
assert_fragment_reassembly_completed_len only checks payload length via
assert_usize_field and misses verifying actual bytes; add a new helper (e.g.,
assert_fragment_reassembly_completed_bytes or
assert_fragment_reassembly_completed_eq) that mirrors the existing function's
pattern: fetch snapshot.last_reassembled (as in
assert_fragment_reassembly_completed_len), return the same "no message
reassembled" error if None, then compare message.payload() byte-for-byte against
an expected &[u8] argument using the project's existing byte-comparison/assert
helper (or a new assert_bytes_field) and return TestResult; keep the
length-assert behavior or call it internally to preserve the length check and
use the same error/report style as other assertion helpers.
In `@wireframe_testing/src/reassembly/message.rs`:
- Around line 109-124: The helper assert_message_assembly_completed currently
unwraps snapshot.last_result to only check the message body via assert_body_eq;
update it so tests can also assert routing and metadata by returning or exposing
the full AssembledMessage (or providing accessors) instead of reducing it to
body-only: locate assert_message_assembly_completed and the matching helper at
146-165, change the match arm that binds Some(Ok(Some(message))) to return the
AssembledMessage (or add getters on MessageAssemblySnapshot to retrieve
AssembledMessage) and adjust callers to use message.routing() and
message.metadata() (or similar accessors) so downstream tests can perform
routing/metadata assertions while preserving the existing body assertion using
assert_body_eq.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: a4d5cb73-6c22-4975-b9df-edb84f9c9ef9
📒 Files selected for processing (10)
docs/execplans/8-5-3-deterministic-reassembly-outcome-assertion-helpers.mddocs/users-guide.mddocs/wireframe-testing-crate.mdtests/fixtures/fragment/reassembly.rstests/fixtures/message_assembly.rstests/reassembly_assertion_helpers.rswireframe_testing/src/reassembly/assert_helpers.rswireframe_testing/src/reassembly/fragment.rswireframe_testing/src/reassembly/message.rswireframe_testing/src/reassembly/mod.rs
…sage reassembly Extend the wireframe_testing::reassembly API with additional helpers and documentation improvements: 1. Document all FragmentReassemblyErrorExpectation variants in the user guide (MessageTooLarge, IndexMismatch, MessageMismatch, SeriesComplete, IndexOverflow). 2. Add comprehensive test coverage for all fragment error expectations, including MessageTooLargeAny, MessageMismatch, SeriesComplete, and IndexOverflow variants. 3. Add assert_fragment_reassembly_completed_bytes helper to verify reassembled payload bytes in addition to the existing length-only assertion. 4. Add MessageAssemblySnapshot::last_completed_message() accessor to enable tests to assert on routing and metadata fields of assembled messages, not just the body. All changes maintain backward compatibility with existing APIs. Tests pass and documentation is updated. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…sors for completed messages - Introduce `assert_fragment_reassembly_completed_bytes` to verify exact payload content in fragment reassembly tests. - Add `last_completed` and `completed_for_key` accessors on `MessageAssemblySnapshot` for easier retrieval of completed messages. - Update existing assertions to leverage the new accessors for clarity and reuse. - Enhance documentation for fragment reassembly error assertions to include more error variant coverage. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@wireframe_testing/src/reassembly/message.rs`:
- Around line 59-108: The two identical accessors last_completed_message and
last_completed on MessageAssemblySnapshot both return the same
Option<&AssembledMessage> by matching self.last_result; remove the duplication
by deleting one of the methods (prefer keeping the more idiomatic name) or make
last_completed_message delegate to last_completed (or vice versa) so only one
implementation exists; update any references to the removed name accordingly to
use the retained method.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 6f5a0e58-f1c3-458f-bf77-a6eb213b5cc3
📒 Files selected for processing (4)
docs/users-guide.mdtests/reassembly_assertion_helpers.rswireframe_testing/src/reassembly/fragment.rswireframe_testing/src/reassembly/message.rs
…geAssemblySnapshot The last_completed_message method was removed to simplify the MessageAssemblySnapshot API and consolidate message extraction logic. Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
Summary
wireframe_testing::reassembly, consisting of two assertion families:MessageAssemblyandFragmentReassembly.wireframe_testing::reassemblymodule providing deterministic snapshot-based assertion helpers for both fragment reassembly and message assembly, with tests and docs updates. Public API returnsTestResult<()>to keep diagnostics deterministic and reusable across test styles.📎 Task: https://www.devboxer.com/task/f327967d-5397-451e-b59f-956abdef91a3
📎 Task: https://www.devboxer.com/task/b903119c-35cb-49fd-919d-9b3769ce8eb6
Changes (high level)
wireframe_testing::reassemblymodule with two assertion families:MessageAssemblyandFragmentReassembly.TestResult<()>for deterministic diagnostics.Documentation updates
wireframe-testing-crate.mdupdated to include the reassembly assertion surface.Tests
rstestintegration tests covering the new reassembly assertion helper APIs.Quality gates
📎 Task: https://www.devboxer.com/task/d6a55b81-cb61-4a55-8e19-4488a3e44a00