Files
nx9-auth/refactor_tests.py
T

80 lines
4.0 KiB
Python

import os
import glob
def refactor_test_file(path):
with open(path, 'r') as f:
content = f.read()
# 1. Update setup_test_db signature
content = content.replace(
'async fn setup_test_db() -> (sqlx::SqlitePool, String)',
'async fn setup_test_db() -> (std::sync::Arc<dyn nx9_auth::db::provider::DatabaseProvider>, sqlx::SqlitePool, String)'
)
# Fix the ones that already got halfway replaced
content = content.replace(
'async fn setup_test_db() -> (std::sync::Arc<dyn nx9_auth::db::provider::DatabaseProvider>, String)',
'async fn setup_test_db() -> (std::sync::Arc<dyn nx9_auth::db::provider::DatabaseProvider>, sqlx::SqlitePool, String)'
)
# 2. Update setup_test_db body return
content = content.replace(
'(pool, db_path)\n}',
'let provider = std::sync::Arc::new(nx9_auth::db::provider::SqliteProvider::new(pool.clone()));\n (provider, pool, db_path)\n}'
)
content = content.replace(
'(provider, db_path)\n}',
'(provider, pool, db_path)\n}'
)
# 3. Update calls to setup_test_db
content = content.replace(
'let (pool, db_path) = setup_test_db().await;',
'let (provider, pool, db_path) = setup_test_db().await;'
)
content = content.replace(
'let (provider, db_path) = setup_test_db().await;',
'let (provider, pool, db_path) = setup_test_db().await;'
)
# 4. AppState::new(pool...) -> AppState::new(provider...)
content = content.replace('AppState::new(pool.clone(),', 'AppState::new(provider.clone(),')
content = content.replace('AppState::new(pool,', 'AppState::new(provider.clone(),')
# Unwind any previously wrapped AppState::new
content = content.replace(
'AppState::new(std::sync::Arc::new(nx9_auth::db::provider::SqliteProvider::new(pool.clone())),',
'AppState::new(provider.clone(),'
)
content = content.replace(
'AppState::new(std::sync::Arc::new(nx9_auth::db::provider::SqliteProvider::new(pool)),',
'AppState::new(provider.clone(),'
)
# 5. Fix all API calls passing &pool to pass &provider instead
# The safest way is to just replace all `(&pool,` with `(&provider,` in the tests block.
# But wait, `pool.fetch_one` or `pool.begin()` are `&pool` or `pool.`. So `(&pool, ` is safe.
content = content.replace('(&pool,', '(&provider,')
content = content.replace('(&pool)', '(&provider)')
# Also fix explicit helper module calls in integration tests (the mocks)
content = content.replace('identity_users::create_user(&pool,', 'identity_users::create_user(&provider,')
# 6. Fix ServerConfig initialization missing fields in integration_test.rs
content = content.replace(
'server: nx9_auth::config::ServerConfig {\n host: "127.0.0.1".into(),\n port: 8080,\n }',
'server: nx9_auth::config::ServerConfig {\n host: "127.0.0.1".into(),\n port: 8080,\n cookie_secure: false,\n production: false,\n }'
)
# Fix role_repo and token_repo direct calls in integration_test.rs
content = content.replace('role_repo::list_for_user(&provider,', 'nx9_auth::identity::roles::list_user_roles(&provider,')
content = content.replace('role_repo::find_by_name(&provider,', 'nx9_auth::identity::roles::find_role_by_name(&provider,') # if find_role_by_name doesn't exist, we'll fix it later
# token_repo::revoke(&mut tx, &token.id)
content = content.replace('token_repo::revoke(&mut tx, &token.id).await.unwrap();', 'nx9_auth::security::tokens::revoke_token(&provider, &token.id).await.unwrap();')
content = content.replace('role_repo::remove_from_user(&mut tx, &user.id, &role.id).await.unwrap();', 'nx9_auth::identity::roles::remove_role(&provider, &user.id, &role.name).await.unwrap();')
with open(path, 'w') as f:
f.write(content)
for f in glob.glob('tests/*.rs'):
if f != 'tests/migration_compatibility.rs':
refactor_test_file(f)