Skip to content

Commit 0f4e143

Browse files
fix: redacting user retirement data in lms
1 parent 74f4aaa commit 0f4e143

File tree

1 file changed

+12
-25
lines changed

1 file changed

+12
-25
lines changed

openedx/core/djangoapps/user_api/accounts/tests/test_retirement_views.py

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,39 +1097,26 @@ def _assert_redacted_update_delete_queries(self, queries, redacted_username, red
10971097
assert len(update_queries) == 9, f"Expected 9 UPDATE queries, found {len(update_queries)}"
10981098
assert len(delete_queries) == 9, f"Expected 9 DELETE queries, found {len(delete_queries)}"
10991099

1100-
# Verify UPDATE queries contain the redacted values
1100+
# Verify UPDATE queries contain the correct field-value assignments
11011101
for update_query in update_queries:
1102-
sql = update_query['sql'].upper()
11031102
sql_lower = update_query['sql']
1104-
# Check that SET clause contains the redacted values
1105-
assert redacted_username in sql_lower, (
1106-
f"UPDATE query missing redacted username '{redacted_username}': {sql_lower}"
1103+
# Check that the correct field is set with the correct value
1104+
# This ensures that if someone swaps the assignments, the test will fail
1105+
assert f"original_username" in sql_lower and f"= '{redacted_username}'" in sql_lower, (
1106+
f"UPDATE query missing 'original_username = {redacted_username}': {sql_lower}"
11071107
)
1108-
assert redacted_email in sql_lower, f"UPDATE query missing redacted email '{redacted_email}': {sql_lower}"
1109-
assert redacted_name in sql_lower, f"UPDATE query missing redacted name '{redacted_name}': {sql_lower}"
1110-
# Verify it's an UPDATE on the correct table
1111-
assert 'original_username' in sql_lower or 'original_email' in sql_lower, (
1112-
f"UPDATE query doesn't appear to update retirement fields: {sql_lower}"
1108+
assert f"original_email" in sql_lower and f"= '{redacted_email}'" in sql_lower, (
1109+
f"UPDATE query missing 'original_email = {redacted_email}': {sql_lower}"
1110+
)
1111+
assert f"original_name" in sql_lower and f"= '{redacted_name}'" in sql_lower, (
1112+
f"UPDATE query missing 'original_name = {redacted_name}': {sql_lower}"
11131113
)
11141114

1115-
def test_simple_success(self):
1115+
def test_default_redacted_values(self):
11161116
"""
11171117
Test basic cleanup with default redacted values.
1118-
"""
1119-
# Verify redaction happens (records exist before cleanup)
1120-
assert UserRetirementStatus.objects.count() == 9
1121-
1122-
# Make the cleanup request
1123-
self.cleanup_and_assert_status()
1124-
1125-
# Records should be deleted after redaction
1126-
retirements = UserRetirementStatus.objects.all()
1127-
assert retirements.count() == 0
1128-
1129-
def test_redaction_before_deletion(self):
1130-
"""
11311118
Verify that redaction (UPDATE) happens before deletion (DELETE).
1132-
Captures actual SQL queries to ensure UPDATE queries contain redacted values.
1119+
Captures actual SQL queries to ensure UPDATE queries contain correct field-value assignments.
11331120
"""
11341121
with CaptureQueriesContext(connection) as context:
11351122
self.cleanup_and_assert_status()

0 commit comments

Comments
 (0)