mirror of
https://github.com/open-gitagent/langship.sh.git
synced 2026-08-03 07:21:04 +02:00
96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
package engine
|
|
|
|
import "testing"
|
|
|
|
func TestTranslateNodeType(t *testing.T) {
|
|
cases := []struct {
|
|
in, want string
|
|
}{
|
|
{"n8n-nodes-base.manualTrigger", "flow-nodes-base.trigger"},
|
|
{"n8n-nodes-base.webhook", "flow-nodes-base.trigger"},
|
|
{"n8n-nodes-base.scheduleTrigger", "flow-nodes-base.trigger"},
|
|
{"n8n-nodes-base.cron", "flow-nodes-base.trigger"},
|
|
{"n8n-nodes-base.set", "flow-nodes-base.set"},
|
|
{"n8n-nodes-base.function", "flow-nodes-base.code"},
|
|
{"n8n-nodes-base.functionItem", "flow-nodes-base.code"},
|
|
{"n8n-nodes-base.noop", "flow-nodes-base.noOp"},
|
|
{"n8n-nodes-base.if", "flow-nodes-base.if"},
|
|
{"@n8n/n8n-nodes-base.set", "flow-nodes-base.set"},
|
|
{"flow-nodes-base.set", "flow-nodes-base.set"},
|
|
{"unknown.type", "unknown.type"},
|
|
}
|
|
for _, c := range cases {
|
|
got := TranslateNodeType(c.in)
|
|
if got != c.want {
|
|
t.Errorf("TranslateNodeType(%q) = %q, want %q", c.in, got, c.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseWorkflow_RequiresExactlyOneTrigger(t *testing.T) {
|
|
noTrigger := []byte(`{"name":"x","nodes":[{"id":"1","name":"a","type":"n8n-nodes-base.set","parameters":{}}],"connections":{}}`)
|
|
if _, err := ParseWorkflow(noTrigger); err == nil {
|
|
t.Fatal("expected error when no trigger node, got nil")
|
|
}
|
|
|
|
twoTriggers := []byte(`{"name":"x","nodes":[
|
|
{"id":"1","name":"a","type":"n8n-nodes-base.manualTrigger","parameters":{}},
|
|
{"id":"2","name":"b","type":"n8n-nodes-base.webhook","parameters":{}}
|
|
],"connections":{}}`)
|
|
if _, err := ParseWorkflow(twoTriggers); err == nil {
|
|
t.Fatal("expected error when two trigger nodes, got nil")
|
|
}
|
|
|
|
one := []byte(`{"name":"x","nodes":[{"id":"1","name":"a","type":"n8n-nodes-base.manualTrigger","parameters":{}}],"connections":{}}`)
|
|
wf, err := ParseWorkflow(one)
|
|
if err != nil {
|
|
t.Fatalf("expected success, got %v", err)
|
|
}
|
|
if wf.Nodes[0].Type != "flow-nodes-base.trigger" {
|
|
t.Errorf("trigger not translated: got %q", wf.Nodes[0].Type)
|
|
}
|
|
}
|
|
|
|
func TestParseWorkflow_BuildsConnections(t *testing.T) {
|
|
data := []byte(`{
|
|
"name":"x",
|
|
"nodes":[
|
|
{"id":"1","name":"a","type":"n8n-nodes-base.manualTrigger","parameters":{}},
|
|
{"id":"2","name":"b","type":"n8n-nodes-base.set","parameters":{}}
|
|
],
|
|
"connections":{
|
|
"a":{"main":[[{"node":"b","type":"main","index":0}]]}
|
|
}
|
|
}`)
|
|
wf, err := ParseWorkflow(data)
|
|
if err != nil {
|
|
t.Fatalf("parse failed: %v", err)
|
|
}
|
|
if len(wf.Connections) != 1 {
|
|
t.Fatalf("expected 1 connection, got %d", len(wf.Connections))
|
|
}
|
|
c := wf.Connections[0]
|
|
if c.SourceNode != "a" || c.TargetNode != "b" || c.SourceOutputIndex != 0 || c.TargetInputIndex != 0 {
|
|
t.Errorf("unexpected connection: %+v", c)
|
|
}
|
|
}
|
|
|
|
func TestParseWorkflow_SkipsConnectionsToMissingNodes(t *testing.T) {
|
|
data := []byte(`{
|
|
"name":"x",
|
|
"nodes":[
|
|
{"id":"1","name":"a","type":"n8n-nodes-base.manualTrigger","parameters":{}}
|
|
],
|
|
"connections":{
|
|
"a":{"main":[[{"node":"missing","type":"main","index":0}]]}
|
|
}
|
|
}`)
|
|
wf, err := ParseWorkflow(data)
|
|
if err != nil {
|
|
t.Fatalf("parse failed: %v", err)
|
|
}
|
|
if len(wf.Connections) != 0 {
|
|
t.Fatalf("expected dangling connections to be dropped, got %d", len(wf.Connections))
|
|
}
|
|
}
|