- users.permissions and users.last_seen as additive columns - golem15_user_frontend_permissions (code, label, tab, comment) - User gains LastSeen, read-only CreatedAt and UpdatedAt and the filterByGroup list scope; none of them is serialized - migration tests roll back by position past the three new steps
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
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")
|
|
}
|
|
}
|