fix(loyalty): update delete tests for soft-delete behavior
Some checks failed
Some checks failed
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:
@@ -213,7 +213,7 @@ class TestAdminDeleteProgram:
|
|||||||
def test_delete_program(
|
def test_delete_program(
|
||||||
self, client, super_admin_headers, admin_program, db
|
self, client, super_admin_headers, admin_program, db
|
||||||
):
|
):
|
||||||
"""Admin can delete any program."""
|
"""Admin can soft-delete any program."""
|
||||||
program_id = admin_program.id
|
program_id = admin_program.id
|
||||||
|
|
||||||
response = client.delete(
|
response = client.delete(
|
||||||
@@ -222,10 +222,21 @@ class TestAdminDeleteProgram:
|
|||||||
)
|
)
|
||||||
assert response.status_code == 204
|
assert response.status_code == 204
|
||||||
|
|
||||||
# Verify deleted
|
# Verify soft-deleted (hidden from normal queries)
|
||||||
deleted = db.get(LoyaltyProgram, program_id)
|
db.expire_all()
|
||||||
|
deleted = db.query(LoyaltyProgram).filter(LoyaltyProgram.id == program_id).first()
|
||||||
assert deleted is None
|
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(
|
def test_delete_nonexistent_program(
|
||||||
self, client, super_admin_headers
|
self, client, super_admin_headers
|
||||||
):
|
):
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ class TestMerchantDeleteProgram:
|
|||||||
def test_delete_program_success(
|
def test_delete_program_success(
|
||||||
self, client, loyalty_merchant_headers, loyalty_store_setup, db
|
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
|
program_id = loyalty_store_setup["program"].id
|
||||||
|
|
||||||
response = client.delete(
|
response = client.delete(
|
||||||
@@ -241,12 +241,23 @@ class TestMerchantDeleteProgram:
|
|||||||
)
|
)
|
||||||
assert response.status_code == 204
|
assert response.status_code == 204
|
||||||
|
|
||||||
# Verify program is deleted
|
# Verify soft-deleted (hidden from normal queries)
|
||||||
from app.modules.loyalty.models import LoyaltyProgram
|
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
|
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(
|
def test_delete_program_not_found(
|
||||||
self, client, loyalty_merchant_headers_no_program
|
self, client, loyalty_merchant_headers_no_program
|
||||||
):
|
):
|
||||||
|
|||||||
Reference in New Issue
Block a user