82 lines
2.7 KiB
Go
82 lines
2.7 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(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 hdlrGen = func(data string) lib.ActionHandler {
|
|
return func(act lib.Action) bool {
|
|
result.data = data
|
|
return true
|
|
}
|
|
}
|
|
cfg := config.Base("testing", core.None).
|
|
AddAction("start", action.Base(hdlrGen("started"))).
|
|
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")
|
|
}
|