package updates import ( "testing" "git.golem15.com/golem15/summercms/modules/lagoon" "github.com/go-gormigrate/gormigrate/v2" ) func TestCreateOrganisationsMigration(t *testing.T) { sqlDB := dedicatedDB(t, "user_organisations") gdb, err := lagoon.Use(t.Context(), sqlDB) if err != nil { t.Fatal(err) } opts := &gormigrate.Options{ TableName: "summer_migrations_golem15_user", UseTransaction: true, } m := gormigrate.New(gdb, opts, All()) if err := m.Migrate(); err != nil { t.Fatal(err) } if !gdb.Migrator().HasTable("golem15_user_organisations") { t.Fatal("golem15_user_organisations missing after migrate") } if !gdb.Migrator().HasTable("users") { t.Fatal("users missing after migrate") } for _, col := range []string{"id", "slug", "name", "description", "created_at", "updated_at"} { if !gdb.Migrator().HasColumn("golem15_user_organisations", col) { t.Fatalf("missing column %s", col) } } var ids []string if err := gdb.Raw(`SELECT id FROM summer_migrations_golem15_user ORDER BY id`).Scan(&ids).Error; err != nil { t.Fatal(err) } want := []string{ "202609170001_create_users", "202609180002_create_organisations", "202609220005_extend_users", "202609220006_create_user_throttle", "202609220007_create_jwt_blacklist", "202610020001_create_user_groups", "202610040001_add_users_permissions", "202610040001_create_user_api_tokens", "202610040002_add_users_last_seen", "202610040003_create_frontend_permissions", } if len(ids) != len(want) { t.Fatalf("history = %v", ids) } for i := range want { if ids[i] != want[i] { t.Fatalf("history = %v", ids) } } // The three admin migrations, API tokens, user groups, jwt blacklist, // throttle, extend-users, then organisations. for range 9 { if err := m.RollbackLast(); err != nil { t.Fatal(err) } } if gdb.Migrator().HasTable("golem15_user_organisations") { t.Fatal("rollback must drop golem15_user_organisations") } if !gdb.Migrator().HasTable("users") { t.Fatal("users must survive organisations rollback") } }