fix(loyalty): update delete tests for soft-delete behavior
Some checks failed
CI / ruff (push) Successful in 15s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has been cancelled

Delete program tests now verify soft-delete (deleted_at set, record
hidden from normal queries) instead of expecting hard deletion.
Uses db.query() instead of db.get() since the soft-delete filter
only applies to ORM queries, not identity map lookups.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 12:28:27 +02:00
parent c6b155520c
commit fd0de714a4
2 changed files with 28 additions and 6 deletions

View File

@@ -213,7 +213,7 @@ class TestAdminDeleteProgram:
def test_delete_program(
self, client, super_admin_headers, admin_program, db
):
"""Admin can delete any program."""
"""Admin can soft-delete any program."""
program_id = admin_program.id
response = client.delete(
@@ -222,10 +222,21 @@ class TestAdminDeleteProgram:
)
assert response.status_code == 204
# Verify deleted
deleted = db.get(LoyaltyProgram, program_id)
# Verify soft-deleted (hidden from normal queries)
db.expire_all()
deleted = db.query(LoyaltyProgram).filter(LoyaltyProgram.id == program_id).first()
assert deleted is None
# But visible with include_deleted
visible = (
db.query(LoyaltyProgram)
.execution_options(include_deleted=True)
.filter(LoyaltyProgram.id == program_id)
.first()
)
assert visible is not None
assert visible.deleted_at is not None
def test_delete_nonexistent_program(
self, client, super_admin_headers
):

View File

@@ -233,7 +233,7 @@ class TestMerchantDeleteProgram:
def test_delete_program_success(
self, client, loyalty_merchant_headers, loyalty_store_setup, db
):
"""Delete the merchant's loyalty program."""
"""Soft-delete the merchant's loyalty program."""
program_id = loyalty_store_setup["program"].id
response = client.delete(
@@ -241,12 +241,23 @@ class TestMerchantDeleteProgram:
)
assert response.status_code == 204
# Verify program is deleted
# Verify soft-deleted (hidden from normal queries)
from app.modules.loyalty.models import LoyaltyProgram
deleted = db.get(LoyaltyProgram, program_id)
db.expire_all()
deleted = db.query(LoyaltyProgram).filter(LoyaltyProgram.id == program_id).first()
assert deleted is None
# But visible with include_deleted
visible = (
db.query(LoyaltyProgram)
.execution_options(include_deleted=True)
.filter(LoyaltyProgram.id == program_id)
.first()
)
assert visible is not None
assert visible.deleted_at is not None
def test_delete_program_not_found(
self, client, loyalty_merchant_headers_no_program
):