Files
transit/tag/tag_test.go
2025-05-21 22:42:51 -01:06

131 lines
2.8 KiB
Go

package tag
import (
"bytes"
"crypto/ed25519"
"encoding/json"
"reflect"
"testing"
"lukechampine.com/frand"
"github.com/mleku/transit/chk"
"github.com/mleku/transit/id"
"github.com/mleku/transit/pubkey"
)
func TestNew(t *testing.T) {
// root
var b []byte
var err error
rootId := generateId()
root := New("root", rootId)
if b, err = json.Marshal(&root); chk.E(err) {
t.Fatal(err)
}
root2 := &U{}
if err = json.Unmarshal(b, root2); chk.E(err) {
t.Fatal(err)
}
if i, ok := root2.GetId(); ok {
if !bytes.Equal(i.Hash, rootId.Hash) {
t.Fatal("did not get same root id back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(root2.T[1]))
}
// // parent
parentId := generateId()
parent := New("parent", parentId)
if b, err = json.Marshal(&parent); chk.E(err) {
t.Fatal(err)
}
parent2 := &U{}
if err = json.Unmarshal(b, parent2); chk.E(err) {
t.Fatal(err)
}
if i, ok := parent2.GetId(); ok {
if !bytes.Equal(i.Hash, parentId.Hash) {
t.Fatal("did not get same parent id back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(parent2.T[1]))
}
// event
eventId := generateId()
eid := New("event", eventId)
if b, err = json.Marshal(&eid); chk.E(err) {
t.Fatal(err)
}
eid2 := &U{}
if err = json.Unmarshal(b, eid2); chk.E(err) {
t.Fatal(err)
}
if i, ok := eid2.GetId(); ok {
if !bytes.Equal(i.Hash, eventId.Hash) {
t.Fatal("did not get same event id back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(eid2.T[1]))
}
// user
pkB := generatePubkey()
pk := New("user", pkB)
if b, err = json.Marshal(&pk); chk.E(err) {
t.Fatal(err)
}
pk2 := &U{}
if err = json.Unmarshal(b, pk2); chk.E(err) {
t.Fatal(err)
}
if p, ok := pk2.GetPubkey(); ok {
if !bytes.Equal(p.Key, pkB.Key) {
t.Fatal("did not get same pubkey back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(pk2.T[1]))
}
// hashtag
ht := New("hashtag", "winning")
if b, err = json.Marshal(&ht); chk.E(err) {
t.Fatal(err)
}
hashtag2 := &U{}
if err = json.Unmarshal(b, hashtag2); chk.E(err) {
t.Fatal(err)
}
if h, ok := hashtag2.GetString(); ok {
if h != "winning" {
t.Fatal("did not get same hashtag back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(hashtag2.T[1]))
}
// url
ur := "http://example.com"
ut := New("url", ur)
if b, err = json.Marshal(ut); chk.E(err) {
t.Fatal(err)
}
ut2 := &U{}
if err = json.Unmarshal(b, ut2); chk.E(err) {
t.Fatal(err)
}
if utt, ok := ut2.GetString(); ok {
if utt != ur {
t.Fatal("did not get same URL back")
}
} else {
t.Fatalf("got wrong type %v", reflect.TypeOf(ut2.T[1]))
}
}
func generateId() (i *id.I) { return id.New(frand.Bytes(32)) }
func generatePubkey() (p *pubkey.P) {
var pub ed25519.PublicKey
pub, _, _ = ed25519.GenerateKey(frand.Reader)
p = pubkey.New(pub)
return
}