
Professional QA Test Plan & Strategy
Version: 1.0.17 (Build 18) | Last Updated: September 2026 | Audience: Testers, QA Engineers & Reviewers | Test Suite: 58 Automated Unit Tests Passing
1. App Objective
Fotologue is a specialized digital companion and archival suite for analog (film) photographers. In the analog world, physical cameras do not record EXIF metadata. Fotologue bridges this gap by enabling photographers to log every shot's technical parameters—aperture, shutter speed, lens, film stock, accessories, GPS coordinates, and artistic intent—producing industry-standard metadata sidecars for development and desktop archiving (Lightroom, Capture One, Darktable).
Design Intent
Speed: Field interactions take seconds between shots.
Privacy: No cloud. No accounts. 100% local-first architecture.
Precision: Professional light metering calibrated to hardware standards.
Archival Integrity: Full 3-axis taxonomy (Subject • Content • Intent) and 1-to-1 scan-to-log matching.
2. Core Feature Map
The Gear Library & Taxonomy:
⚙️ Equipment & Kits: Cameras, Lenses, Films, Accessories (Viewfinders, TCs, Filters, Flashes), and Camera Kits.
🏷️ Taxonomy & Tags: 3-Axis classification (Subject • Content • Intent).
The Light Meter: Live spot/centre-weighted metering with B&W, C-41, E-6 previews.
The Timeline: Chronological shot log with interactive maps and export badges ([Z], [C], [J], [X]).
Digital Contact Sheet View: Interactive A4 contact sheet grid with in-grid gap insertion/removal (+1 / -1 offset).
Printable PDF Proof Sheet Exporter: High-resolution A4 darkroom proof sheet generation.
Camera Macro Copy Presets: Auto-names .xmp sidecars (_DSF1024.xmp) to match RAW camera scan sequences.
Pro Calibration Wizard: 2-stage hardware tuning (The Void & The Balance).
3. Test Scripts
Script A: First-Run, Welcome & Quick Settings
Steps:
Clear App Data or perform a fresh install.
Launch the app. Observe the "Welcome" screen.
Verify top bar contains the Settings icon.
Verify "Quick Settings" card contains "View All Settings" link.
Grant Location and Camera permissions when prompted.
Complete Equipment Setup (Add Camera, Lens, Film).
Expected Behaviour:
App grants permissions without crashing.
Equipment Setup steps mark as "Complete".
"Let's Go!" button enables upon completing setup.
Script B: TLR & Fixed-Lens Auto-Creation
Steps:
Go to Gear Library > Cameras > Add Camera.
Search or select a TLR camera (e.g., Yashica Mat-124G or Rolleiflex 2.8F).
Observe Camera Type (TLR (Twin Lens Reflex)).
Save the camera.
Navigate to the Lenses tab in Gear Library.
Expected Behaviour:
Camera is saved with format 120 (Medium Format).
A matching fixed lens (Yashinon 80mm f/3.5) is automatically created and linked to the camera.
Script C: Missing Film Prompting
Steps:
Select a 120 Medium Format camera (e.g. Yashica Mat-124G).
Ensure no 120 film stock exists in your library.
Tap Add Log (+).
Select the 120 camera. Observe the Film field.
Expected Behaviour:
OutlinedTextField displays "No matching film in library".
A warning card appears below: "No film stock matching this camera format in your library. Tap here to add a film."
Tapping the card opens Add Film Screen to add 120 film stock.
Script D: 3-Axis Taxonomy & Intent Groups
Steps:
Go to Gear Library.
Observe drawer list is split into two headers: ⚙️ EQUIPMENT & KITS and 🏷️ TAXONOMY & TAGS.
Select the Intent tab. Verify header reads "Intent Groups".
Tap + and create a new project tag under Series (e.g. Urban Decay).
Open Add Log Screen and expand Intent.
Select Series from the dropdown, then select Urban Decay chip.
Save the log.
Expected Behaviour:
Tag Urban Decay is stored as category = Intent under parent Series.
XMP export contains Intent|Series|Urban Decay in lr:hierarchicalSubject.
Script E: Digital Contact Sheet & In-Grid Gap Insertion
Steps:
Open the Timeline and tap the Digital Contact Sheet icon (gallery_thumbnail_24px) in the top bar.
Select an active film roll. Observe the grid layout (6 columns for 35mm, 3 for 120 format).
Locate a skipped frame slot (e.g., #04 Skipped / Gap).
Tap the skipped card #04.
Select "Insert Additional Gap (+1 Offset)".
Observe subsequent frames (#05–36) shift right by 1 column.
Tap the card again and select "Remove Gap / Pull Frames Back (-1 Offset)".
Expected Behaviour:
The grid updates dynamically, maintaining 1-to-1 alignment with physical film rebate numbers.
Tapping "Log Exposure for Frame #N" opens AddLog pre-filled for that slot.
Script F: Camera Macro Copy Presets & XMP Export
Steps:
Open Settings > Camera Macro Copying Presets.
Verify default presets (Fujifilm DSF, Canon IMG, Nikon DSC_, Sony _DSC) are present.
Add a custom preset (e.g. "Leica M Macro", prefix L1, 5 digits).
Go to Digital Contact Sheet > Export (Share).
Enable Macro Copy Filename Matching.
Select "Fujifilm RAW (_DSF)" from the Load Preset dropdown.
Set Start No. to 1024 and export ZIP.
Expected Behaviour:
Exported ZIP contains sidecars named DSF1024.xmp, DSF1025.xmp, etc., matching camera RAW scan file sequences.
Script G: Printable A4 PDF Proof Sheet Exporter
Steps:
In the Digital Contact Sheet, tap Export (Share).
Select "Export as Printable PDF Proof Sheet".
Choose a destination and save the .pdf file.
Open the resulting PDF.
Expected Behaviour:
Generates an A4 PDF proof sheet with darkroom styling.
Header displays Camera Name, Film Stock, Roll #, Date, Creator, and Copyright.
Grid renders scene thumbnails, frame rebate badges (#01), and exposure metadata (1/125 @ f/8).
Script H: Pro Calibration Wizard
Steps:
Go to Settings > EV Calibration > Launch Pro Calibration Wizard.
Stage 1 (The Void): Cover the camera lens completely. Tap "Measure Black Point."
Stage 2 (The Balance): Point camera at a neutral 18% grey card or neutral wall. Tap "Calibrate Sensitivity."
Complete wizard.
Expected Behaviour:
EV Calibration updates with non-zero Noise Floor and Signal Gain multipliers.
4. System Red Flags
File a high-priority bug report if any of the following occur:
IME / Keyboard Overlap: Keyboard obscures active input fields.
Race Condition: Light Meter flickers or freezes during live metering.
Data Leak: Prompts for accounts, logins, or remote server connections (app is 100% local-first).
Locale / Translation Failure: Missing string resources or raw keys appearing in non-English locales.