Files
ttstd-infinite-canvas/backend/internal/app/channel_order_test.go

63 lines
2.2 KiB
Go

package app
import (
"testing"
"yingce/backend/internal/model"
)
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")
}
}