auth_identity_fk_ondelete_test.go 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package migrate
  2. import (
  3. "testing"
  4. "entgo.io/ent/dialect/entsql"
  5. entschema "entgo.io/ent/dialect/sql/schema"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestAuthIdentityFoundationForeignKeyOnDeleteActions(t *testing.T) {
  9. require.Equal(
  10. t,
  11. entschema.Cascade,
  12. findForeignKeyBySymbol(t, AuthIdentitiesTable, "auth_identities_users_auth_identities").OnDelete,
  13. )
  14. require.Equal(
  15. t,
  16. entschema.Cascade,
  17. findForeignKeyBySymbol(t, AuthIdentityChannelsTable, "auth_identity_channels_auth_identities_channels").OnDelete,
  18. )
  19. require.Equal(
  20. t,
  21. entschema.Cascade,
  22. findForeignKeyBySymbol(t, IdentityAdoptionDecisionsTable, "identity_adoption_decisions_pending_auth_sessions_adoption_decision").OnDelete,
  23. )
  24. require.Equal(
  25. t,
  26. entschema.SetNull,
  27. findForeignKeyBySymbol(t, PendingAuthSessionsTable, "pending_auth_sessions_users_pending_auth_sessions").OnDelete,
  28. )
  29. require.Equal(
  30. t,
  31. entschema.SetNull,
  32. findForeignKeyBySymbol(t, IdentityAdoptionDecisionsTable, "identity_adoption_decisions_auth_identities_adoption_decisions").OnDelete,
  33. )
  34. }
  35. func TestPaymentOrdersOutTradeNoPartialUniqueIndex(t *testing.T) {
  36. idx := findIndexByName(t, PaymentOrdersTable, "paymentorder_out_trade_no")
  37. require.True(t, idx.Unique)
  38. require.Len(t, idx.Columns, 1)
  39. require.Equal(t, "out_trade_no", idx.Columns[0].Name)
  40. require.NotNil(t, idx.Annotation)
  41. require.Equal(t, (&entsql.IndexAnnotation{Where: "out_trade_no <> ''"}).Where, idx.Annotation.Where)
  42. }
  43. func TestAccountsParentAccountForeignKey(t *testing.T) {
  44. fk := findForeignKeyByColumn(t, AccountsTable, "parent_account_id")
  45. require.Len(t, fk.Columns, 1)
  46. require.Equal(t, "parent_account_id", fk.Columns[0].Name)
  47. require.False(t, fk.Columns[0].Unique, "active-shadow uniqueness is enforced by the partial uq_accounts_spark_shadow_per_parent index")
  48. require.Len(t, fk.RefColumns, 1)
  49. require.Equal(t, "id", fk.RefColumns[0].Name)
  50. require.Equal(t, entschema.Restrict, fk.OnDelete)
  51. }
  52. func findForeignKeyBySymbol(t *testing.T, table *entschema.Table, symbol string) *entschema.ForeignKey {
  53. t.Helper()
  54. for _, fk := range table.ForeignKeys {
  55. if fk.Symbol == symbol {
  56. return fk
  57. }
  58. }
  59. require.Failf(t, "missing foreign key", "table %s should include foreign key %s", table.Name, symbol)
  60. return nil
  61. }
  62. func findIndexByName(t *testing.T, table *entschema.Table, name string) *entschema.Index {
  63. t.Helper()
  64. for _, idx := range table.Indexes {
  65. if idx.Name == name {
  66. return idx
  67. }
  68. }
  69. require.Failf(t, "missing index", "table %s should include index %s", table.Name, name)
  70. return nil
  71. }
  72. func findForeignKeyByColumn(t *testing.T, table *entschema.Table, column string) *entschema.ForeignKey {
  73. t.Helper()
  74. for _, fk := range table.ForeignKeys {
  75. for _, col := range fk.Columns {
  76. if col.Name == column {
  77. return fk
  78. }
  79. }
  80. }
  81. require.Failf(t, "missing foreign key", "table %s should include foreign key for column %s", table.Name, column)
  82. return nil
  83. }