test_all_payment_ids_accounted_once (test_reconcile.ReconcileTests.test_all_payment_ids_accounted_once) ... ok
test_bom_input_accepted (test_reconcile.ReconcileTests.test_bom_input_accepted) ... ok
test_cancelled_payment_rejected (test_reconcile.ReconcileTests.test_cancelled_payment_rejected) ... ok
test_caught_write_failure_removes_new_outputs (test_reconcile.ReconcileTests.test_caught_write_failure_removes_new_outputs) ... ok
test_cli_exit_codes_and_retry (test_reconcile.ReconcileTests.test_cli_exit_codes_and_retry) ... ok
test_create_and_readback_outputs (test_reconcile.ReconcileTests.test_create_and_readback_outputs) ... ok
test_csv_quote_failure_rejected (test_reconcile.ReconcileTests.test_csv_quote_failure_rejected) ... ok
test_duplicate_invoice_id_rejected (test_reconcile.ReconcileTests.test_duplicate_invoice_id_rejected) ... ok
test_duplicate_payment_id_rejected (test_reconcile.ReconcileTests.test_duplicate_payment_id_rejected) ... ok
test_empty_payments_header_only_accepted (test_reconcile.ReconcileTests.test_empty_payments_header_only_accepted) ... ok
test_exact_decimal_tenths (test_reconcile.ReconcileTests.test_exact_decimal_tenths) ... ok
test_existing_output_dir_preserved (test_reconcile.ReconcileTests.test_existing_output_dir_preserved) ... ok
test_extra_and_missing_field_rejected (test_reconcile.ReconcileTests.test_extra_and_missing_field_rejected) ... ok
test_input_byte_limit_rejected (test_reconcile.ReconcileTests.test_input_byte_limit_rejected) ... ok
test_input_row_limit_rejected (test_reconcile.ReconcileTests.test_input_row_limit_rejected) ... ok
test_invalid_amount_contract (test_reconcile.ReconcileTests.test_invalid_amount_contract) ... ok
test_invalid_input_creates_no_output (test_reconcile.ReconcileTests.test_invalid_input_creates_no_output) ... ok
test_invalid_utf8_rejected (test_reconcile.ReconcileTests.test_invalid_utf8_rejected) ... ok
test_invoice_id_must_start_with_ascii_letter_or_digit (test_reconcile.ReconcileTests.test_invoice_id_must_start_with_ascii_letter_or_digit) ... ok
test_invoice_total_does_not_repeat_with_two_payments (test_reconcile.ReconcileTests.test_invoice_total_does_not_repeat_with_two_payments) ... ok
test_max_amount_accepted (test_reconcile.ReconcileTests.test_max_amount_accepted) ... ok
test_mixed_currency_rejected_even_for_unassigned (test_reconcile.ReconcileTests.test_mixed_currency_rejected_even_for_unassigned) ... ok
test_no_invoice_records_rejected (test_reconcile.ReconcileTests.test_no_invoice_records_rejected) ... ok
test_only_known_settled_is_no_review (test_reconcile.ReconcileTests.test_only_known_settled_is_no_review) ... ok
test_overpaid_amount_is_retained (test_reconcile.ReconcileTests.test_overpaid_amount_is_retained) ... ok
test_partial_payments_sum_before_balance (test_reconcile.ReconcileTests.test_partial_payments_sum_before_balance) ... ok
test_payment_id_must_start_with_ascii_letter_or_digit (test_reconcile.ReconcileTests.test_payment_id_must_start_with_ascii_letter_or_digit) ... ok
test_pending_payment_rejected (test_reconcile.ReconcileTests.test_pending_payment_rejected) ... ok
test_reconcile_preserves_both_sources (test_reconcile.ReconcileTests.test_reconcile_preserves_both_sources) ... ok
test_reference_id_must_start_with_ascii_letter_or_digit (test_reconcile.ReconcileTests.test_reference_id_must_start_with_ascii_letter_or_digit) ... ok
test_reference_spaces_are_rejected_not_stripped (test_reconcile.ReconcileTests.test_reference_spaces_are_rejected_not_stripped) ... ok
test_review_required_even_when_report_completed (test_reconcile.ReconcileTests.test_review_required_even_when_report_completed) ... ok
test_settled_invoice (test_reconcile.ReconcileTests.test_settled_invoice) ... ok
test_source_order_preserved (test_reconcile.ReconcileTests.test_source_order_preserved) ... ok
test_ten_thousand_and_one_payments_rejected (test_reconcile.ReconcileTests.test_ten_thousand_and_one_payments_rejected) ... ok
test_ten_thousand_max_payments_to_one_invoice_exact (test_reconcile.ReconcileTests.test_ten_thousand_max_payments_to_one_invoice_exact) ... ok
test_three_accounting_identities (test_reconcile.ReconcileTests.test_three_accounting_identities) ... ok
test_unassigned_and_unknown_are_separate_reasons (test_reconcile.ReconcileTests.test_unassigned_and_unknown_are_separate_reasons) ... ok
test_unknown_reference_case_is_not_corrected (test_reconcile.ReconcileTests.test_unknown_reference_case_is_not_corrected) ... ok
test_unpaid_invoice_stays_in_output (test_reconcile.ReconcileTests.test_unpaid_invoice_stays_in_output) ... ok
test_wrong_header_rejected (test_reconcile.ReconcileTests.test_wrong_header_rejected) ... ok

----------------------------------------------------------------------
Ran 41 tests in 0.133s

OK
