Coverage Map

Transition coverage for each state machine โ€” green states have been visited by at least one test, red states have not. Coverage is measured at the graph edge level: a test that passes confirms an edge. A missing edge means that user path is unverified.

Diagrams are generated from State_Machine__Utils.to_mermaid_coverage(). Coverage data is populated from transitions_observed recorded during test runs.


How to Read This Map

Colour Meaning
๐ŸŸข Green state The state was reached during at least one test run
๐Ÿ”ด Red state The state has never been reached by the test suite

A green state means at least one incoming transition was exercised. A red state means the entire sub-graph below it is untested.


Upload Wizard

9 states ยท 9 transitions

Coverage diagram is populated when snapshot data is available. Run the QA suite and export a coverage snapshot to see live green/red colouring.

Full Transition Map

stateDiagram-v2 idle --> file-ready : file_selected [file_input_has_file] file-ready --> choosing-delivery : auto_advance [needs_delivery_choice] file-ready --> choosing-share : auto_advance [single_file_or_text] choosing-delivery --> choosing-share : click_next [delivery_mode_selected] choosing-share --> confirming : select_share_mode [share_card_clicked] confirming --> encrypting : click_encrypt_upload encrypting --> uploading : auto_advance [encryption_complete] uploading --> completing : auto_advance [upload_complete] completing --> complete : auto_advance [finalisation_complete]

Currently Known Coverage Gaps

Transitions not yet exercised by the test suite (from static analysis of existing tests):

From To Trigger Gap reason
file-ready choosing-delivery auto_advance Multi-file / folder upload not yet tested
choosing-delivery choosing-share click_next Depends on choosing-delivery branch

Download Flow

9 states ยท 12 transitions

Coverage diagram is populated when snapshot data is available.

Full Transition Map

stateDiagram-v2 loading --> entry : no_hash [url_has_no_fragment] loading --> ready : hash_resolved [transfer_fetch_succeeded] loading --> error : hash_failed [transfer_fetch_failed] entry --> ready : submit_valid_id [transfer_id_resolved] entry --> error : submit_invalid_id [transfer_id_not_found] entry --> entry : submit_bogus [inline_error_shown] ready --> decrypting : click_decrypt ready --> browse : auto_route [content_type_is_folder] ready --> gallery : auto_route [content_type_is_multi_image] ready --> viewer : auto_route [content_type_is_single_file] decrypting --> complete : decrypt_succeeded decrypting --> error : decrypt_failed [wrong_key_or_corrupt]

Currently Known Coverage Gaps

From To Trigger Gap reason
entry ready submit_valid_id Manual entry happy path not in p0 suite
entry error submit_invalid_id Manual entry error not separately tested
ready gallery auto_route Gallery content-type routing not tested
ready viewer auto_route Viewer content-type routing not tested
decrypting error decrypt_failed Decrypt failure path not tested

Coverage Formula

coverage_pct = covered_transitions / total_transitions * 100

Once transitions_observed are wired through from live test runs, this page will show dynamic coverage numbers. The State_Machine__Utils.coverage() method computes this โ€” see sg_send_qa/state_machines/State_Machine__Utils.py.