go-scopes/tests/core_test.go

82 lines
2.6 KiB
Go

package scopes_test
import (
"fmt"
tbase "testing"
lib "git.sr.ht/~cco/go-scopes"
"git.sr.ht/~cco/go-scopes/common/testing"
"git.sr.ht/~cco/go-scopes/config"
"git.sr.ht/~cco/go-scopes/core"
"git.sr.ht/~cco/go-scopes/core/action"
"git.sr.ht/~cco/go-scopes/core/context"
"git.sr.ht/~cco/go-scopes/core/message"
)
func TestCore(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(lib.Map{"activity": "development"})
t.AssertEqual(fmt.Sprint(pl2), `{"activity":"development"}`)
msg.WithPayload(pl2)
pl3 := message.PayloadFromJson[lib.Map](`{"activity": "development"}`)
t.AssertEqual(fmt.Sprint(pl3), `{"activity":"development"}`)
}
func ActionTest(t *testing.T) {
var result struct{ data string }
var hdlrGen = func(data string) lib.ActionHandler {
return func(act lib.Action) bool {
result.data = data
return true
}
}
cfg := config.Base("testing", core.None)
cfg.AddAction("start", action.Base(hdlrGen("started")))
cfg.AddAction("scopes|doit|task", action.Base(hdlrGen("done")))
ctx := context.AppContext(cfg)
lib.HandleMsg(ctx, message.SimpleMessage("start"))
t.AssertEqual(result.data, "started")
lib.HandleMsg(ctx, message.New("", "doit", "task", "4711"))
t.AssertEqual(result.data, "done")
}