package scopes_test import ( "fmt" tbase "testing" "git.sr.ht/~cco/go-scopes/config" "git.sr.ht/~cco/go-scopes/lib" "git.sr.ht/~cco/go-scopes/lib/action" "git.sr.ht/~cco/go-scopes/lib/context" "git.sr.ht/~cco/go-scopes/lib/message" "git.sr.ht/~cco/go-scopes/testing" ) func TestUnit(tb *tbase.T) { t := testing.SetUp(tb) t.Run("address", AddressTest) t.Run("message", MessageTest) t.Run("payload", PayloadTest) t.Run("action", ActionTest) } func AddressTest(t *testing.T) { var ad1 lib.Address = message.SimpleAddress("worker") t.AssertEqual(fmt.Sprint(ad1), "#worker//") astr := "@scopes.cy7.eu#server/1abc/2cde" var ad2 lib.Address = message.ParseAddress(astr) t.AssertEqual(fmt.Sprint(ad2), astr) t.AssertEqual(fmt.Sprint(message.ParseAddress("worker")), "#worker//") t.AssertEqual(ad1.Url(), "") t.AssertEqual(ad2.Url(), "@scopes.cy7.eu") sid, iid := ad1.Interaction() t.AssertEqual(sid, "") t.AssertEqual(iid, "") sid, iid = ad2.Interaction() t.AssertEqual(sid, "1abc") t.AssertEqual(iid, "2cde") ad1.SetUrl("@scopes.cy7.eu") ad1.SetInteraction("1abc", "2cde") t.AssertEqual(fmt.Sprint(ad1), "@scopes.cy7.eu#worker/1abc/2cde") } func MessageTest(t *testing.T) { t.AssertEqual(message.Quit.Action(), "quit") var msg lib.Message = message.SimpleMessage("doit") t.AssertEqual(msg.Action(), "doit") t.AssertEqual(msg.Head().Action(), "doit") t.AssertEqual(fmt.Sprint(msg), "scopes/doit//") msg = message.New("taskman", "doit", "task", "tsk001") t.AssertEqual(fmt.Sprint(msg), "taskman/doit/task/tsk001") } func PayloadTest(t *testing.T) { msg := message.New("taskman", "doit", "task", "tsk001") //pl := struct{ text, work string }{"scopes messaging", "development"} pl1 := message.Payload(`development`) t.AssertEqual(fmt.Sprint(pl1), `"development"`) pl2 := message.Payload(map[string]string{"activity": "development"}) t.AssertEqual(fmt.Sprint(pl2), `{"activity":"development"}`) msg.WithPayload(pl2) pl3 := message.PayloadFromJson[map[string]any](`{"activity": "development"}`) t.AssertEqual(fmt.Sprint(pl3), `{"activity":"development"}`) } func ActionTest(t *testing.T) { var result struct{ data string } var hdlr lib.ActionHandler = func(act lib.Action) bool { result.data = "done" return true } cfg := config.Base("testing", nil). AddAction("doit", action.Base(hdlr)) ctx := context.AppContext(cfg) msg := message.SimpleMessage("doit") lib.HandleMsg(ctx, msg) t.AssertEqual(result.data, "done") }