44package testing
55
66import (
7+ "github.com/golang-migrate/migrate/v4/database"
8+ "reflect"
79 "testing"
810)
911
@@ -28,7 +30,74 @@ func TestMigrateDrop(t *testing.T, m *migrate.Migrate) {
2830
2931func TestMigrateUp (t * testing.T , m * migrate.Migrate ) {
3032 t .Log ("UP" )
33+
34+ tt := & triggerTest {
35+ t : t ,
36+ m : m ,
37+ triggered : map [string ]bool {
38+ migrate .TrigRunMigrationPre : false ,
39+ migrate .TrigRunMigrationPost : false ,
40+ migrate .TrigRunMigrationVersionPre : false ,
41+ migrate .TrigRunMigrationVersionPost : false ,
42+ database .TrigRunPre : false ,
43+ database .TrigRunPost : false ,
44+ },
45+ }
46+
47+ m .Triggers = map [string ]func (r migrate.TriggerResponse ) error {
48+ migrate .TrigRunMigrationPre : tt .trigMigrationCheck ,
49+ migrate .TrigRunMigrationPost : tt .trigMigrationCheck ,
50+ migrate .TrigRunMigrationVersionPre : tt .trigMigrationCheck ,
51+ migrate .TrigRunMigrationVersionPost : tt .trigMigrationCheck ,
52+ }
53+
54+ m .AddDatabaseTriggers (map [string ]func (response interface {}) error {
55+ database .TrigRunPre : tt .trigDatabaseMigrationCheck ,
56+ database .TrigRunPost : tt .trigDatabaseMigrationCheck ,
57+ })
58+
3159 if err := m .Up (); err != nil {
3260 t .Fatal (err )
3361 }
62+
63+ if ! tt .triggered [migrate .TrigRunMigrationPre ] {
64+ t .Fatalf ("expected trigger %s to be called, but it was not" , migrate .TrigRunMigrationPre )
65+ }
66+ if ! tt .triggered [migrate .TrigRunMigrationPost ] {
67+ t .Fatalf ("expected trigger %s to be called, but it was not" , migrate .TrigRunMigrationPost )
68+ }
69+ if ! tt .triggered [migrate .TrigRunMigrationVersionPre ] {
70+ t .Fatalf ("expected trigger %s to be called, but it was not" , migrate .TrigRunMigrationVersionPre )
71+ }
72+ if ! tt .triggered [migrate .TrigRunMigrationVersionPost ] {
73+ t .Fatalf ("expected trigger %s to be called, but it was not" , migrate .TrigRunMigrationVersionPost )
74+ }
75+ if ! tt .triggered [database .TrigRunPre ] {
76+ t .Fatalf ("expected database trigger %s to be called, but it was not" , database .TrigRunPre )
77+ }
78+ if ! tt .triggered [database .TrigRunPost ] {
79+ t .Fatalf ("expected database trigger %s to be called, but it was not" , database .TrigRunPost )
80+ }
81+ }
82+
83+ type triggerTest struct {
84+ t * testing.T
85+ m * migrate.Migrate
86+ triggered map [string ]bool
87+ }
88+
89+ func (tt * triggerTest ) trigMigrationCheck (r migrate.TriggerResponse ) error {
90+ tt .triggered [r .Trigger ] = true
91+ return nil
92+ }
93+
94+ func (tt * triggerTest ) trigDatabaseMigrationCheck (response interface {}) error {
95+ val := reflect .ValueOf (response )
96+ field := val .FieldByName ("Trigger" )
97+ if ! field .IsValid () {
98+ tt .t .Fatalf ("expected response to have a Trigger field, got %T" , response )
99+ }
100+
101+ tt .triggered [field .String ()] = true
102+ return nil
34103}
0 commit comments