# Annotation Queue Message Tests

**Task**: AZ-163_test_annotation_queue
**Name**: Annotation Queue Message Tests
**Description**: Implement 5 tests for annotation queue message parsing — Created, Validated bulk, Deleted bulk, malformed handling
**Complexity**: 2 points
**Dependencies**: AZ-152_test_infrastructure
**Component**: Blackbox Tests
**Jira**: AZ-163
**Epic**: AZ-151

## Problem

The annotation queue processes msgpack-encoded messages from RabbitMQ Streams. Tests must verify correct parsing of all message types and graceful handling of malformed input.

## Outcome

- 5 passing pytest tests in `tests/test_annotation_queue.py`

## Scope

### Included
- BT-AQM-01: Parse Created annotation message (all fields populated correctly)
- BT-AQM-02: Parse Validated bulk message (status == Validated, names list matches)
- BT-AQM-03: Parse Deleted bulk message (status == Deleted, names list matches)
- BT-AQM-04: Malformed message raises exception
- RT-AQM-01: Malformed msgpack bytes handled (exception caught, no crash)

### Excluded
- Live RabbitMQ Streams connection (requires external service)
- Queue offset persistence (requires live broker)

## Acceptance Criteria

**AC-1: Created message**
Given msgpack bytes matching AnnotationMessage schema (status=Created, role=Validator)
When decoded and constructed
Then all fields populated: name, detections, image bytes, status == "Created", role == "Validator"

**AC-2: Validated bulk**
Given msgpack bytes with status=Validated, list of names
When decoded and constructed
Then status == "Validated", names list matches input

**AC-3: Deleted bulk**
Given msgpack bytes with status=Deleted, list of names
When decoded and constructed
Then status == "Deleted", names list matches input

**AC-4: Malformed msgpack**
Given invalid msgpack bytes
When decode is attempted
Then exception raised

**AC-5: Resilient handling**
Given random bytes (not valid msgpack)
When passed to message handler
Then exception caught, handler doesn't crash

## Constraints

- Msgpack messages constructed in-memory at test time
- Must match the AnnotationMessage/AnnotationBulkMessage schemas from annotation-queue/
- Resilience test marked: `@pytest.mark.resilience`
