test_next_url_only_local (laundry.tests.test_fr01_login.LoginTests.test_next_url_only_local) ... ok
test_tc_1_1_owner_login_web (laundry.tests.test_fr01_login.LoginTests.test_tc_1_1_owner_login_web) ... ok
test_tc_1_2_and_1_3_same_message (laundry.tests.test_fr01_login.LoginTests.test_tc_1_2_and_1_3_same_message) ... ok
test_tc_1_4_null_hash_cannot_log_in (laundry.tests.test_fr01_login.LoginTests.test_tc_1_4_null_hash_cannot_log_in) ... ok
test_tc_1_5_no_session (laundry.tests.test_fr01_login.LoginTests.test_tc_1_5_no_session) ... ok
test_tc_1_6_washer_limits (laundry.tests.test_fr01_login.LoginTests.test_tc_1_6_washer_limits) ... ok
test_tc_1_7_logout_ends_session (laundry.tests.test_fr01_login.LoginTests.test_tc_1_7_logout_ends_session) ... ok
test_tc_1_8_new_session_id_and_cookie_flags (laundry.tests.test_fr01_login.LoginTests.test_tc_1_8_new_session_id_and_cookie_flags) ... ok
test_tc_1_9_lock_out (laundry.tests.test_fr01_login.LoginTests.test_tc_1_9_lock_out) ... ok
test_deposit_top_up_owner_only (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_deposit_top_up_owner_only) ... ok
test_tc_2_10_detail (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_10_detail) ... ok
test_tc_2_1_list_first_page (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_1_list_first_page) ... ok
test_tc_2_2_and_2_3_search (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_2_and_2_3_search) ... ok
test_tc_2_5_create_web (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_5_create_web) ... ok
test_tc_2_6_validation_keeps_values (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_6_validation_keeps_values) ... ok
test_tc_2_7_edit_keeps_id_and_enrolled (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_7_edit_keeps_id_and_enrolled) ... ok
test_tc_2_8_and_2_9_delete (laundry.tests.test_fr02_03_customers_services.CustomerTests.test_tc_2_8_and_2_9_delete) ... ok
test_tc_3_1_public_price_list (laundry.tests.test_fr02_03_customers_services.ServiceTests.test_tc_3_1_public_price_list) ... ok
test_tc_3_2_cashier_cannot_edit (laundry.tests.test_fr02_03_customers_services.ServiceTests.test_tc_3_2_cashier_cannot_edit) ... ok
test_tc_3_4_validation (laundry.tests.test_fr02_03_customers_services.ServiceTests.test_tc_3_4_validation) ... ok
test_tc_3_5_delete_used_service (laundry.tests.test_fr02_03_customers_services.ServiceTests.test_tc_3_5_delete_used_service) ... ok
test_tc_3_6_create_and_ac_3_4_price_change (laundry.tests.test_fr02_03_customers_services.ServiceTests.test_tc_3_6_create_and_ac_3_4_price_change) ... ok
test_s04_web_form_full_payment (laundry.tests.test_fr04_07_bills.NewBillTests.test_s04_web_form_full_payment) ... ok
test_tc_4_1_example_c0151_s0001_5kg (laundry.tests.test_fr04_07_bills.NewBillTests.test_tc_4_1_example_c0151_s0001_5kg) ... ok
test_tc_4_3_bad_units (laundry.tests.test_fr04_07_bills.NewBillTests.test_tc_4_3_bad_units) ... ok
test_tc_4_4_rack_in_use (laundry.tests.test_fr04_07_bills.NewBillTests.test_tc_4_4_rack_in_use) ... ok
test_tc_4_5_pay_now_and_deposit (laundry.tests.test_fr04_07_bills.NewBillTests.test_tc_4_5_pay_now_and_deposit) ... ok
test_s06_web_form (laundry.tests.test_fr04_07_bills.PaymentTests.test_s06_web_form) ... ok
test_tc_6_5_b0006 (laundry.tests.test_fr04_07_bills.PaymentTests.test_tc_6_5_b0006) ... ok
test_tc_6_x_rules (laundry.tests.test_fr04_07_bills.PaymentTests.test_tc_6_x_rules) ... ok
test_tc_7_1_receipt_with_official_logo (laundry.tests.test_fr04_07_bills.ReceiptTests.test_tc_7_1_receipt_with_official_logo) ... ok
test_tc_7_2_no_private_data (laundry.tests.test_fr04_07_bills.ReceiptTests.test_tc_7_2_no_private_data) ... ok
test_br_16_edit_recalculates (laundry.tests.test_fr04_07_bills.WorkflowTests.test_br_16_edit_recalculates) ... ok
test_other_outlet_forbidden (laundry.tests.test_fr04_07_bills.WorkflowTests.test_other_outlet_forbidden) ... ok
test_tc_5_1_and_5_2_finish_then_hand_over (laundry.tests.test_fr04_07_bills.WorkflowTests.test_tc_5_1_and_5_2_finish_then_hand_over) ... ok
test_tc_5_3_cancel (laundry.tests.test_fr04_07_bills.WorkflowTests.test_tc_5_3_cancel) ... ok
test_tc_5_4_backwards_refused (laundry.tests.test_fr04_07_bills.WorkflowTests.test_tc_5_4_backwards_refused) ... ok
test_tc_5_5_complaint_and_5_6_history (laundry.tests.test_fr04_07_bills.WorkflowTests.test_tc_5_5_complaint_and_5_6_history) ... ok
test_tc_5_7_queue_o02 (laundry.tests.test_fr04_07_bills.WorkflowTests.test_tc_5_7_queue_o02) ... ok
test_web_finish_button_from_queue (laundry.tests.test_fr04_07_bills.WorkflowTests.test_web_finish_button_from_queue) ... ok
test_tc_11_1_examples (laundry.tests.test_fr08_11_reports_status_api.ApiTests.test_tc_11_1_examples) ... ok
test_tc_11_3_csrf_header_required (laundry.tests.test_fr08_11_reports_status_api.ApiTests.test_tc_11_3_csrf_header_required) ... ok
test_tc_11_4_error_format (laundry.tests.test_fr08_11_reports_status_api.ApiTests.test_tc_11_4_error_format) ... ok
test_tc_11_5_never_a_password (laundry.tests.test_fr08_11_reports_status_api.ApiTests.test_tc_11_5_never_a_password) ... ok
test_tc_11_6_paging_and_filters (laundry.tests.test_fr08_11_reports_status_api.ApiTests.test_tc_11_6_paging_and_filters) ... ok
test_tc_8_1_to_8_3_owner (laundry.tests.test_fr08_11_reports_status_api.DashboardTests.test_tc_8_1_to_8_3_owner) ... ok
test_tc_8_4_washer_no_money (laundry.tests.test_fr08_11_reports_status_api.DashboardTests.test_tc_8_4_washer_no_money) ... ok
test_tc_8_5_cashier_own_outlet (laundry.tests.test_fr08_11_reports_status_api.DashboardTests.test_tc_8_5_cashier_own_outlet) ... ok
test_swapped_dates (laundry.tests.test_fr08_11_reports_status_api.ReportTests.test_swapped_dates) ... ok
test_tc_9_1_to_9_5_numbers (laundry.tests.test_fr08_11_reports_status_api.ReportTests.test_tc_9_1_to_9_5_numbers) ... ok
test_tc_9_4_csv (laundry.tests.test_fr08_11_reports_status_api.ReportTests.test_tc_9_4_csv) ... ok
test_tc_9_5_cashier_refused (laundry.tests.test_fr08_11_reports_status_api.ReportTests.test_tc_9_5_cashier_refused) ... ok
test_tc_9_6_equals_queries_sql_q03 (laundry.tests.test_fr08_11_reports_status_api.ReportTests.test_tc_9_6_equals_queries_sql_q03) ... ok
test_ac_10_5_rate_limit (laundry.tests.test_fr08_11_reports_status_api.StatusTests.test_ac_10_5_rate_limit) ... ok
test_tc_10_1_to_10_5 (laundry.tests.test_fr08_11_reports_status_api.StatusTests.test_tc_10_1_to_10_5) ... ok
test_tc_10_7_in_process (laundry.tests.test_fr08_11_reports_status_api.StatusTests.test_tc_10_7_in_process) ... ok
test_tc_nf_02_sql_injection_strings (laundry.tests.test_nfr.SecurityTests.test_tc_nf_02_sql_injection_strings) ... ok
test_tc_nf_03_xss_escaped (laundry.tests.test_nfr.SecurityTests.test_tc_nf_03_xss_escaped) ... ok
test_tc_nf_04_form_without_token (laundry.tests.test_nfr.SecurityTests.test_tc_nf_04_form_without_token) ... ok
test_tc_1_10_all_employees (laundry.tests.test_units.RoleDerivationTests.test_tc_1_10_all_employees) ... ok
test_new_hash_format (laundry.tests.test_units.PasswordFormatTests.test_new_hash_format) ... ok
database/README.md section 6: the 1,000-iteration vector and the owner's stored hash. ... ok
test_promised_time_and_formatting (laundry.tests.test_units.RuleTests.test_promised_time_and_formatting) ... ok
test_roles (laundry.tests.test_units.RuleTests.test_roles) ... ok
test_whole_numbers (laundry.tests.test_units.RuleTests.test_whole_numbers) ... ok
