package main import ( "context" "os" "testing" "time" "gotest.tools/v3/assert" ) func TestSlackToMessagePipeline(t *testing.T) { ctx, can := context.WithTimeout(context.Background(), time.Second*5) defer can() pipeline, err := NewSlackToMessagePipeline(ctx, Config{driver: NewTestDriver(t)}) if err != nil { t.Fatal(err) } go func() { if err := pipeline.Process(ctx); err != nil && ctx.Err() == nil { t.Fatal(err) } }() want := Message{ ID: "1712927439.728409/1712927439", TS: 1712927439, Source: "https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409", Channel: "C06U1DDBBU4", Thread: "1712927439.728409", EventName: "", Event: "11071", Plaintext: "At least one alertconfig run has failed unexpectedly.\nDashboard: \nPanel: \nSource: ", Asset: "At least one alertconfig run has failed unexpectedly.\nDashboard: \nPanel: \nSource: ", Datacenter: "alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb", } b, _ := os.ReadFile("testdata/slack_events/opsgenie_alert.json") if err := pipeline.reader.Enqueue(ctx, b); err != nil { t.Fatal("failed to enqueue", err) } if _, b2, err := pipeline.writer.Syn(ctx); err != nil { t.Fatal("failed to syn", err) } else if m := MustDeserialize(b2); false { } else { assert.DeepEqual(t, want, m) } }