- Changed the directory structure for task specifications to include a dedicated `todo/` folder within `_docs/02_tasks/` for tasks ready for implementation. - Updated references in various skills and documentation to reflect the new task lifecycle, including changes in the `implementer` and `decompose` skills. - Enhanced the README and flow documentation to clarify the new task organization and its implications for the implementation process. These updates improve task management clarity and streamline the implementation workflow.
2.9 KiB
Augmentation Blackbox Tests
Task: AZ-153_test_augmentation Name: Augmentation Blackbox Tests Description: Implement 8 blackbox tests for the augmentation pipeline — output count, naming, bbox validation, edge cases, filesystem integration Complexity: 3 points Dependencies: AZ-152_test_infrastructure Component: Blackbox Tests Jira: AZ-153 Epic: AZ-151
Problem
The augmentation pipeline transforms annotated images into 8 variants each. Tests must verify output count, naming conventions, bounding box validity, edge cases, and filesystem integration without referencing internals.
Outcome
- 8 passing pytest tests in
tests/test_augmentation.py - Covers: single-image augmentation, naming convention, bbox range, bbox clipping, tiny bbox removal, empty labels, full pipeline, skip-already-processed
Scope
Included
- BT-AUG-01: Single image → 8 outputs
- BT-AUG-02: Augmented filenames follow naming convention
- BT-AUG-03: All output bounding boxes in valid range [0,1]
- BT-AUG-04: Bounding box correction clips edge bboxes
- BT-AUG-05: Tiny bounding boxes removed after correction
- BT-AUG-06: Empty label produces 8 outputs with empty labels
- BT-AUG-07: Full augmentation pipeline (filesystem, 5 images → 40 outputs)
- BT-AUG-08: Augmentation skips already-processed images
Excluded
- Performance tests (separate task)
- Resilience tests (separate task)
Acceptance Criteria
AC-1: Output count Given 1 image + 1 valid label When augment_inner() runs Then exactly 8 ImageLabel objects are returned
AC-2: Naming convention Given image with stem "test_image" When augment_inner() runs Then outputs named test_image.jpg, test_image_1.jpg through test_image_7.jpg with matching .txt labels
AC-3: Bbox validity Given 1 image + label with multiple bboxes When augment_inner() runs Then every bbox coordinate in every output is in [0.0, 1.0]
AC-4: Edge bbox clipping Given label with bbox near edge (x=0.99, w=0.2) When correct_bboxes() runs Then width reduced to fit within bounds; no coordinate exceeds [margin, 1-margin]
AC-5: Tiny bbox removal Given label with bbox that becomes < 0.01 area after clipping When correct_bboxes() runs Then bbox is removed from output
AC-6: Empty label Given 1 image + empty label file When augment_inner() runs Then 8 ImageLabel objects returned, all with empty labels lists
AC-7: Full pipeline Given 5 images + labels in data/ directory When augment_annotations() runs with patched paths Then 40 images in processed images dir, 40 matching labels
AC-8: Skip already-processed Given 5 images in data/, 3 already in processed/ When augment_annotations() runs Then only 2 new images processed (16 new outputs), existing 3 untouched
Constraints
- Must patch constants.py paths to use tmp_path
- Fixture images from _docs/00_problem/input_data/dataset/
- Each test operates in isolated tmp_path