63 lines
2.2 KiB
Go
63 lines
2.2 KiB
Go
package app
|
|
|
|
import (
|
|
"infinite-canvas/backend/internal/model"
|
|
"testing"
|
|
)
|
|
|
|
func TestVisualChannelOrderAtomicSnapshotAndPermissions(t *testing.T) {
|
|
svc, db := newChannelModelTestService(t)
|
|
admin := &model.User{ID: "admin", Role: model.UserRoleAdmin}
|
|
for _, id := range []string{"a", "b", "c"} {
|
|
if err := db.Create(&model.ModelChannel{ID: id, Name: id, Scope: model.ChannelScopeSystem, Enabled: true}).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
rows, err := svc.AdminChannelOrder(admin, "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
original := []string{}
|
|
for _, row := range rows {
|
|
original = append(original, row.ID)
|
|
}
|
|
req := ChannelOrderRequest{IDs: []string{"c", "a", "b"}, ExpectedIDs: original}
|
|
if err := svc.SaveAdminChannelOrder(nil, "", req); err == nil {
|
|
t.Fatal("nonadmin accepted")
|
|
}
|
|
if err := svc.SaveAdminChannelOrder(admin, "", req); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := svc.SaveAdminChannelOrder(admin, "", req); err == nil {
|
|
t.Fatal("stale snapshot accepted")
|
|
}
|
|
bad := ChannelOrderRequest{IDs: []string{"c", "c", "b"}, ExpectedIDs: []string{"c", "a", "b"}}
|
|
if err := svc.SaveAdminChannelOrder(admin, "", bad); err == nil {
|
|
t.Fatal("duplicate accepted")
|
|
}
|
|
after, _ := svc.AdminChannelOrder(admin, "")
|
|
if after[0].ID != "c" || after[1].ID != "a" {
|
|
t.Fatal("failed save changed order")
|
|
}
|
|
for _, id := range []string{"m1", "m2"} {
|
|
if err := db.Create(&model.ChannelModel{ID: id, ChannelID: "a", ModelKey: id, Enabled: true, PriceVersion: 7, CapabilityVersion: 4, UnitPriceMicrocredits: 123}).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
models, _ := svc.AdminChannelOrder(admin, "a")
|
|
expected := []string{models[0].ID, models[1].ID}
|
|
if err := svc.SaveAdminChannelOrder(admin, "a", ChannelOrderRequest{IDs: []string{expected[1], expected[0]}, ExpectedIDs: expected}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var stored []model.ChannelModel
|
|
db.Find(&stored)
|
|
for _, item := range stored {
|
|
if item.PriceVersion != 7 || item.CapabilityVersion != 4 || item.UnitPriceMicrocredits != 123 || !item.Enabled {
|
|
t.Fatal("model configuration changed")
|
|
}
|
|
}
|
|
if err := svc.SaveAdminChannelOrder(admin, "b", ChannelOrderRequest{IDs: expected, ExpectedIDs: expected}); err == nil {
|
|
t.Fatal("cross-channel accepted")
|
|
}
|
|
}
|