71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package controllogic
|
|
|
|
import "testing"
|
|
|
|
func TestControlLogicVersioning(t *testing.T) {
|
|
dir := t.TempDir()
|
|
s, err := NewStore(dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
g := Graph{ID: "cl-1", Name: "loop", Enabled: true,
|
|
Nodes: []Node{{ID: "n1", Kind: "trigger.timer", Params: map[string]string{"interval": "1000"}}}}
|
|
if err := s.Save(g); err != nil {
|
|
t.Fatalf("Save v1: %v", err)
|
|
}
|
|
if got, _ := s.Get("cl-1"); got.Version != 1 {
|
|
t.Fatalf("after create: version=%d", got.Version)
|
|
}
|
|
|
|
// Two edits → v2, v3.
|
|
g.Name = "loop-2"
|
|
if err := s.Save(g); err != nil {
|
|
t.Fatalf("Save v2: %v", err)
|
|
}
|
|
g.Name = "loop-3"
|
|
if err := s.Save(g); err != nil {
|
|
t.Fatalf("Save v3: %v", err)
|
|
}
|
|
if got, _ := s.Get("cl-1"); got.Version != 3 || got.Name != "loop-3" {
|
|
t.Fatalf("current: version=%d name=%q", got.Version, got.Name)
|
|
}
|
|
|
|
versions, err := s.Versions("cl-1")
|
|
if err != nil {
|
|
t.Fatalf("Versions: %v", err)
|
|
}
|
|
if len(versions) != 3 {
|
|
t.Fatalf("want 3 versions, got %d", len(versions))
|
|
}
|
|
if !versions[0].Current || versions[0].Version != 3 {
|
|
t.Errorf("newest should be current v3: %+v", versions[0])
|
|
}
|
|
|
|
v1, err := s.GetVersion("cl-1", 1)
|
|
if err != nil || v1.Name != "loop" {
|
|
t.Fatalf("GetVersion v1: name=%q err=%v", v1.Name, err)
|
|
}
|
|
|
|
// Promote v1 → v4.
|
|
promoted, err := s.Promote("cl-1", 1)
|
|
if err != nil {
|
|
t.Fatalf("Promote: %v", err)
|
|
}
|
|
if promoted.Version != 4 || promoted.Name != "loop" {
|
|
t.Errorf("promote: version=%d name=%q", promoted.Version, promoted.Name)
|
|
}
|
|
|
|
// Fork v3 → new id, version 1.
|
|
forked, err := s.Fork("cl-1", 3)
|
|
if err != nil {
|
|
t.Fatalf("Fork: %v", err)
|
|
}
|
|
if forked.Version != 1 || forked.ID == "cl-1" {
|
|
t.Errorf("fork: id=%q version=%d", forked.ID, forked.Version)
|
|
}
|
|
if got, err := s.Get(forked.ID); err != nil || got.Name != forked.Name {
|
|
t.Errorf("forked graph not stored: %v", err)
|
|
}
|
|
}
|