166 lines
5.9 KiB
Python
166 lines
5.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script to migrate remaining tests in documents_tests.rs to use the new TestContext pattern.
|
|
"""
|
|
|
|
import re
|
|
import sys
|
|
|
|
def migrate_test_file(file_path):
|
|
"""Migrate the documents_tests.rs file to use new test patterns."""
|
|
|
|
with open(file_path, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Store the original content for comparison
|
|
original_content = content
|
|
|
|
# 1. Remove #[ignore = "Requires PostgreSQL database"] annotations
|
|
content = re.sub(r' #\[ignore = "Requires PostgreSQL database"\]\n', '', content)
|
|
|
|
# 2. Remove old database pool creation lines
|
|
content = re.sub(r' let pool = create_test_db_pool\(\)\.await;\n', '', content)
|
|
|
|
# 3. Remove old Database struct creation lines
|
|
content = re.sub(r' let documents_db = Database \{ pool: pool\.clone\(\) \};\n', '', content)
|
|
|
|
# 4. Replace old user creation with new pattern
|
|
# Handle both User and Admin role patterns
|
|
content = re.sub(
|
|
r' let user = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let ctx = TestContext::new().await;\n let auth_helper = TestAuthHelper::new(ctx.app.clone());\n let user = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let admin = create_test_user\(&pool, UserRole::Admin\)\.await;',
|
|
' let admin = auth_helper.create_test_admin().await;',
|
|
content
|
|
)
|
|
|
|
# Handle other variations of user creation
|
|
content = re.sub(
|
|
r' let user1 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let ctx = TestContext::new().await;\n let auth_helper = TestAuthHelper::new(ctx.app.clone());\n let user1 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let user2 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let user2 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let tenant1_user1 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let ctx = TestContext::new().await;\n let auth_helper = TestAuthHelper::new(ctx.app.clone());\n let tenant1_user1 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let tenant1_user2 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let tenant1_user2 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let tenant2_user1 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let tenant2_user1 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
content = re.sub(
|
|
r' let tenant2_user2 = create_test_user\(&pool, UserRole::User\)\.await;',
|
|
' let tenant2_user2 = auth_helper.create_test_user().await;',
|
|
content
|
|
)
|
|
|
|
# 5. Replace document creation and insertion pattern
|
|
content = re.sub(
|
|
r' let ([a-zA-Z0-9_]+) = create_and_insert_test_document\(&pool, ([a-zA-Z0-9_.()]+)\)\.await;',
|
|
r' let \1_doc = create_test_document(\2);\n let \1 = ctx.state.db.create_document(\1_doc).await.expect("Failed to create document");',
|
|
content
|
|
)
|
|
|
|
# 6. Replace documents_db. with ctx.state.db.
|
|
content = re.sub(r'documents_db\.', 'ctx.state.db.', content)
|
|
|
|
# 7. Replace user.id with user.id() for TestUser instances
|
|
# This is tricky because we need to be careful about which instances are TestUser vs regular User
|
|
# We'll handle this pattern by pattern based on context
|
|
|
|
# For delete_document calls that use user.id, user.role pattern
|
|
content = re.sub(
|
|
r'\.delete_document\(([^,]+), ([a-zA-Z0-9_]+)\.id, ([a-zA-Z0-9_]+)\.role\)',
|
|
r'.delete_document(\1, \2.id(), \3.role)',
|
|
content
|
|
)
|
|
|
|
# For bulk_delete_documents calls
|
|
content = re.sub(
|
|
r'\.bulk_delete_documents\(([^,]+), ([a-zA-Z0-9_]+)\.id, ([a-zA-Z0-9_]+)\.role\)',
|
|
r'.bulk_delete_documents(\1, \2.id(), \3.role)',
|
|
content
|
|
)
|
|
|
|
# For get_document_by_id calls
|
|
content = re.sub(
|
|
r'\.get_document_by_id\(([^,]+), ([a-zA-Z0-9_]+)\.id, ([a-zA-Z0-9_]+)\.role\)',
|
|
r'.get_document_by_id(\1, \2.id(), \3.role)',
|
|
content
|
|
)
|
|
|
|
# For create_test_document calls
|
|
content = re.sub(
|
|
r'create_test_document\(([a-zA-Z0-9_]+)\.id\)',
|
|
r'create_test_document(\1.id())',
|
|
content
|
|
)
|
|
|
|
# For bind calls in SQL
|
|
content = re.sub(
|
|
r'\.bind\(([a-zA-Z0-9_]+)\.id\)',
|
|
r'.bind(\1.id())',
|
|
content
|
|
)
|
|
|
|
# For let user_id assignments
|
|
content = re.sub(
|
|
r' let user_id = ([a-zA-Z0-9_]+)\.id;',
|
|
r' let user_id = \1.id();',
|
|
content
|
|
)
|
|
|
|
# Add missing imports if TestContext/TestAuthHelper aren't already imported
|
|
# Check if the imports are present
|
|
if 'use crate::test_utils::{TestContext, TestAuthHelper};' not in content:
|
|
# Find the existing test_utils import and update it
|
|
content = re.sub(
|
|
r'use crate::test_utils::TestContext;',
|
|
'use crate::test_utils::{TestContext, TestAuthHelper};',
|
|
content
|
|
)
|
|
|
|
# Check if we made any changes
|
|
if content != original_content:
|
|
return content
|
|
else:
|
|
return None
|
|
|
|
def main():
|
|
file_path = '/root/repos/readur/src/tests/documents_tests.rs'
|
|
|
|
print("Starting migration of documents_tests.rs...")
|
|
|
|
migrated_content = migrate_test_file(file_path)
|
|
|
|
if migrated_content:
|
|
# Write the migrated content back
|
|
with open(file_path, 'w') as f:
|
|
f.write(migrated_content)
|
|
print("Migration completed successfully!")
|
|
else:
|
|
print("No changes needed - file is already migrated or no patterns found.")
|
|
|
|
if __name__ == "__main__":
|
|
main() |