118 lines
4.8 KiB
Go
118 lines
4.8 KiB
Go
package migrations
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMigration112UsesIdempotentAddColumn(t *testing.T) {
|
|
content, err := FS.ReadFile("112_add_payment_order_provider_key_snapshot.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.Contains(t, sql, "ADD COLUMN IF NOT EXISTS provider_key VARCHAR(30)")
|
|
require.NotContains(t, sql, "ADD COLUMN provider_key VARCHAR(30);")
|
|
}
|
|
|
|
func TestMigration118DoesNotForceOverwriteAuthSourceGrantDefaults(t *testing.T) {
|
|
content, err := FS.ReadFile("118_wechat_dual_mode_and_auth_source_defaults.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.NotContains(t, sql, "UPDATE settings")
|
|
require.NotContains(t, sql, "SET value = 'false'")
|
|
require.True(t, strings.Contains(sql, "ON CONFLICT (key) DO NOTHING"))
|
|
require.Contains(t, sql, "THEN ''")
|
|
}
|
|
|
|
func TestAuthIdentityReportTypeWideningRunsBeforeLongReportWritersAndStillReconcilesAt121(t *testing.T) {
|
|
preflightContent, err := FS.ReadFile("108a_widen_auth_identity_migration_report_type.sql")
|
|
require.NoError(t, err)
|
|
|
|
preflightSQL := string(preflightContent)
|
|
require.Contains(t, preflightSQL, "ALTER TABLE auth_identity_migration_reports")
|
|
require.Contains(t, preflightSQL, "ALTER COLUMN report_type TYPE VARCHAR(80)")
|
|
|
|
content, err := FS.ReadFile("109_auth_identity_compat_backfill.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.NotContains(t, sql, "ALTER TABLE auth_identity_migration_reports")
|
|
|
|
followupContent, err := FS.ReadFile("121_auth_identity_migration_report_type_widen.sql")
|
|
require.NoError(t, err)
|
|
|
|
followupSQL := string(followupContent)
|
|
require.Contains(t, followupSQL, "ALTER TABLE auth_identity_migration_reports")
|
|
require.Contains(t, followupSQL, "ALTER COLUMN report_type TYPE VARCHAR(80)")
|
|
}
|
|
|
|
func TestMigration119DefersPaymentIndexRolloutToOnlineFollowup(t *testing.T) {
|
|
content, err := FS.ReadFile("119_enforce_payment_orders_out_trade_no_unique.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.Contains(t, sql, "120_enforce_payment_orders_out_trade_no_unique_notx.sql")
|
|
require.Contains(t, sql, "NULL;")
|
|
require.NotContains(t, sql, "CREATE UNIQUE INDEX")
|
|
require.NotContains(t, sql, "DROP INDEX")
|
|
|
|
followupContent, err := FS.ReadFile("120_enforce_payment_orders_out_trade_no_unique_notx.sql")
|
|
require.NoError(t, err)
|
|
|
|
followupSQL := string(followupContent)
|
|
require.Contains(t, followupSQL, "explicit duplicate out_trade_no precheck")
|
|
require.Contains(t, followupSQL, "stale invalid paymentorder_out_trade_no_unique index")
|
|
require.Contains(t, followupSQL, "CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS paymentorder_out_trade_no_unique")
|
|
require.NotContains(t, followupSQL, "DROP INDEX CONCURRENTLY IF EXISTS paymentorder_out_trade_no_unique")
|
|
require.Contains(t, followupSQL, "DROP INDEX CONCURRENTLY IF EXISTS paymentorder_out_trade_no")
|
|
require.Contains(t, followupSQL, "WHERE out_trade_no <> ''")
|
|
|
|
alignmentContent, err := FS.ReadFile("120a_align_payment_orders_out_trade_no_index_name.sql")
|
|
require.NoError(t, err)
|
|
|
|
alignmentSQL := string(alignmentContent)
|
|
require.Contains(t, alignmentSQL, "paymentorder_out_trade_no_unique")
|
|
require.Contains(t, alignmentSQL, "RENAME TO paymentorder_out_trade_no")
|
|
}
|
|
|
|
func TestMigration110SeedsAuthSourceSignupGrantsDisabledByDefault(t *testing.T) {
|
|
content, err := FS.ReadFile("110_pending_auth_and_provider_default_grants.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.Contains(t, sql, "('auth_source_default_email_grant_on_signup', 'false')")
|
|
require.Contains(t, sql, "('auth_source_default_linuxdo_grant_on_signup', 'false')")
|
|
require.Contains(t, sql, "('auth_source_default_oidc_grant_on_signup', 'false')")
|
|
require.Contains(t, sql, "('auth_source_default_wechat_grant_on_signup', 'false')")
|
|
require.NotContains(t, sql, "('auth_source_default_email_grant_on_signup', 'true')")
|
|
}
|
|
|
|
func TestMigration122ScrubsPendingOAuthCompletionTokensAtRest(t *testing.T) {
|
|
content, err := FS.ReadFile("122_pending_auth_completion_token_cleanup.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.Contains(t, sql, "UPDATE pending_auth_sessions")
|
|
require.Contains(t, sql, "completion_response")
|
|
require.Contains(t, sql, "access_token")
|
|
require.Contains(t, sql, "refresh_token")
|
|
require.Contains(t, sql, "expires_in")
|
|
require.Contains(t, sql, "token_type")
|
|
}
|
|
|
|
func TestMigration123BackfillsLegacyAuthSourceGrantDefaultsSafely(t *testing.T) {
|
|
content, err := FS.ReadFile("123_fix_legacy_auth_source_grant_on_signup_defaults.sql")
|
|
require.NoError(t, err)
|
|
|
|
sql := string(content)
|
|
require.Contains(t, sql, "110_pending_auth_and_provider_default_grants.sql")
|
|
require.Contains(t, sql, "schema_migrations")
|
|
require.Contains(t, sql, "updated_at")
|
|
require.Contains(t, sql, "'_grant_on_signup'")
|
|
require.Contains(t, sql, "value = 'false'")
|
|
require.Contains(t, sql, "auth_identity_migration_reports")
|
|
}
|