auth_identity_compat_backfill_integration_test.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //go:build integration
  2. package repository
  3. import (
  4. "context"
  5. "os"
  6. "path/filepath"
  7. "strconv"
  8. "testing"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestAuthIdentityCompatBackfillMigration_AllowsLongReportTypes(t *testing.T) {
  12. tx := testTx(t)
  13. ctx := context.Background()
  14. migration108Path := filepath.Join("..", "..", "migrations", "108_auth_identity_foundation_core.sql")
  15. migration108SQL, err := os.ReadFile(migration108Path)
  16. require.NoError(t, err)
  17. migration108aPath := filepath.Join("..", "..", "migrations", "108a_widen_auth_identity_migration_report_type.sql")
  18. migration108aSQL, err := os.ReadFile(migration108aPath)
  19. require.NoError(t, err)
  20. migration109Path := filepath.Join("..", "..", "migrations", "109_auth_identity_compat_backfill.sql")
  21. migration109SQL, err := os.ReadFile(migration109Path)
  22. require.NoError(t, err)
  23. _, err = tx.ExecContext(ctx, `
  24. DROP TABLE IF EXISTS auth_identity_migration_reports CASCADE;
  25. DROP TABLE IF EXISTS auth_identity_channels CASCADE;
  26. DROP TABLE IF EXISTS identity_adoption_decisions CASCADE;
  27. DROP TABLE IF EXISTS pending_auth_sessions CASCADE;
  28. DROP TABLE IF EXISTS auth_identities CASCADE;
  29. ALTER TABLE users
  30. DROP COLUMN IF EXISTS signup_source,
  31. DROP COLUMN IF EXISTS last_login_at,
  32. DROP COLUMN IF EXISTS last_active_at;
  33. `)
  34. require.NoError(t, err)
  35. _, err = tx.ExecContext(ctx, string(migration108SQL))
  36. require.NoError(t, err)
  37. _, err = tx.ExecContext(ctx, string(migration108aSQL))
  38. require.NoError(t, err)
  39. var userID int64
  40. require.NoError(t, tx.QueryRowContext(ctx, `
  41. INSERT INTO users (email, password_hash, role, status, balance, concurrency)
  42. VALUES ('oidc-demo-subject@oidc-connect.invalid', 'hash', 'user', 'active', 0, 1)
  43. RETURNING id`).Scan(&userID))
  44. _, err = tx.ExecContext(ctx, string(migration109SQL))
  45. require.NoError(t, err)
  46. var reportCount int
  47. require.NoError(t, tx.QueryRowContext(ctx, `
  48. SELECT COUNT(*)
  49. FROM auth_identity_migration_reports
  50. WHERE report_type = 'oidc_synthetic_email_requires_manual_recovery'
  51. AND report_key = $1
  52. `, strconv.FormatInt(userID, 10)).Scan(&reportCount))
  53. require.Equal(t, 1, reportCount)
  54. var reportTypeLimit int
  55. require.NoError(t, tx.QueryRowContext(ctx, `
  56. SELECT character_maximum_length
  57. FROM information_schema.columns
  58. WHERE table_schema = 'public'
  59. AND table_name = 'auth_identity_migration_reports'
  60. AND column_name = 'report_type'
  61. `).Scan(&reportTypeLimit))
  62. require.GreaterOrEqual(t, reportTypeLimit, 45)
  63. require.NotZero(t, userID)
  64. }