fix(review): harden payment, oauth, and migration paths
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
ALTER TABLE payment_orders ADD COLUMN provider_key VARCHAR(30);
|
||||
ALTER TABLE payment_orders ADD COLUMN IF NOT EXISTS provider_key VARCHAR(30);
|
||||
|
||||
UPDATE payment_orders
|
||||
SET provider_key = (
|
||||
|
||||
@@ -21,12 +21,3 @@ VALUES
|
||||
('auth_source_default_oidc_grant_on_signup', 'false'),
|
||||
('auth_source_default_wechat_grant_on_signup', 'false')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
UPDATE settings
|
||||
SET value = 'false'
|
||||
WHERE key IN (
|
||||
'auth_source_default_email_grant_on_signup',
|
||||
'auth_source_default_linuxdo_grant_on_signup',
|
||||
'auth_source_default_oidc_grant_on_signup',
|
||||
'auth_source_default_wechat_grant_on_signup'
|
||||
);
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
-- Replace the legacy non-unique index with a partial unique index.
|
||||
-- Keep empty-string legacy rows compatible while enforcing uniqueness for real order IDs.
|
||||
DROP INDEX IF EXISTS paymentorder_out_trade_no;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS paymentorder_out_trade_no
|
||||
ON payment_orders (out_trade_no)
|
||||
WHERE out_trade_no <> '';
|
||||
@@ -0,0 +1,37 @@
|
||||
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"))
|
||||
}
|
||||
|
||||
func TestMigration119EnforcesOutTradeNoPartialUniqueIndex(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, "DROP INDEX IF EXISTS paymentorder_out_trade_no")
|
||||
require.Contains(t, sql, "CREATE UNIQUE INDEX IF NOT EXISTS paymentorder_out_trade_no")
|
||||
require.Contains(t, sql, "WHERE out_trade_no <> ''")
|
||||
}
|
||||
Reference in New Issue
Block a user