This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package mongoext
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
func TestCreateGoExtBsonRegistryNotNil(t *testing.T) {
|
||||
reg := CreateGoExtBsonRegistry()
|
||||
if reg == nil {
|
||||
t.Fatal("registry should not be nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateGoExtBsonRegistryEmbeddedDocumentDecodesAsBsonM(t *testing.T) {
|
||||
reg := CreateGoExtBsonRegistry()
|
||||
|
||||
doc := bson.M{
|
||||
"name": "alice",
|
||||
"nested": bson.M{
|
||||
"key": "value",
|
||||
"num": int32(42),
|
||||
},
|
||||
}
|
||||
|
||||
raw, err := bson.Marshal(doc)
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
dec := bson.NewDecoder(bson.NewDocumentReader(bytes.NewReader(raw)))
|
||||
dec.SetRegistry(reg)
|
||||
|
||||
var decoded map[string]any
|
||||
err = dec.Decode(&decoded)
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
nested, ok := decoded["nested"].(bson.M)
|
||||
if !ok {
|
||||
t.Fatalf("expected nested to be bson.M, got %T", decoded["nested"])
|
||||
}
|
||||
|
||||
tst.AssertEqual(t, nested["key"].(string), "value")
|
||||
}
|
||||
|
||||
func TestCreateGoExtBsonRegistryStructFieldOfTypeAny(t *testing.T) {
|
||||
reg := CreateGoExtBsonRegistry()
|
||||
|
||||
type wrapper struct {
|
||||
Payload any `bson:"payload"`
|
||||
}
|
||||
|
||||
source := wrapper{Payload: bson.M{"x": "y"}}
|
||||
raw, err := bson.Marshal(source)
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
dec := bson.NewDecoder(bson.NewDocumentReader(bytes.NewReader(raw)))
|
||||
dec.SetRegistry(reg)
|
||||
|
||||
var decoded wrapper
|
||||
err = dec.Decode(&decoded)
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
payload, ok := decoded.Payload.(bson.M)
|
||||
if !ok {
|
||||
t.Fatalf("expected Payload to be bson.M, got %T", decoded.Payload)
|
||||
}
|
||||
tst.AssertEqual(t, payload["x"].(string), "y")
|
||||
}
|
||||
|
||||
func TestCreateGoExtBsonRegistryReturnsIndependentInstances(t *testing.T) {
|
||||
r1 := CreateGoExtBsonRegistry()
|
||||
r2 := CreateGoExtBsonRegistry()
|
||||
|
||||
if r1 == r2 {
|
||||
t.Error("expected each call to return a new registry instance")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user