|
|
|
|
@ -83,14 +83,18 @@ def test_exact_second_import_only_skips_and_commit_is_idempotent(source, bank):
|
|
|
|
|
assert_no_open_preview() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_ambiguous_existing_duplicate_cancels_whole_file(source, bank): |
|
|
|
|
def test_existing_signature_duplicate_skips_without_creating_transactions(source, bank): |
|
|
|
|
commit(prepare(source(), bank)) |
|
|
|
|
ambiguous = prepare(source(DATA.replace(b",1,", b",3,")), bank) |
|
|
|
|
assert ambiguous.state == "NEEDS_ATTENTION" |
|
|
|
|
assert ambiguous.code == "REVIEW_REQUIRED" |
|
|
|
|
assert Transaction.objects.count() == 2 |
|
|
|
|
assert_no_open_preview() |
|
|
|
|
|
|
|
|
|
duplicate = prepare(source(DATA.replace(b",1,", b",3,")), bank) |
|
|
|
|
|
|
|
|
|
assert duplicate.state == "ALREADY_IMPORTED" |
|
|
|
|
assert duplicate.counts == {"created": 0, "matched": 0, "skipped": 2} |
|
|
|
|
assert all(item.decision == {"action": "SKIP", "reason": "ALREADY_IMPORTED"} |
|
|
|
|
for item in ImportBatch.objects.get(pk=duplicate.batch_id).items.all()) |
|
|
|
|
assert commit(duplicate).counts == {"created": 0, "matched": 0, "skipped": 2} |
|
|
|
|
assert Transaction.objects.count() == SourceRecord.objects.count() == 2 |
|
|
|
|
assert_no_open_preview() |
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize("data", [ |
|
|
|
|
(HEADER + ROW + ROW).encode(), |
|
|
|
|
|