This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
package mongoext
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
||||
)
|
||||
|
||||
func TestProjectionFromStructSimple(t *testing.T) {
|
||||
type model struct {
|
||||
ID string `bson:"_id"`
|
||||
Name string `bson:"name"`
|
||||
Age int `bson:"age"`
|
||||
}
|
||||
|
||||
res := ProjectionFromStruct(model{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 3)
|
||||
tst.AssertEqual(t, res["_id"], 1)
|
||||
tst.AssertEqual(t, res["name"], 1)
|
||||
tst.AssertEqual(t, res["age"], 1)
|
||||
}
|
||||
|
||||
func TestProjectionFromStructIgnoresUntagged(t *testing.T) {
|
||||
type model struct {
|
||||
Tagged string `bson:"tagged"`
|
||||
Untagged string
|
||||
Other int `json:"other"`
|
||||
}
|
||||
|
||||
res := ProjectionFromStruct(model{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 1)
|
||||
tst.AssertEqual(t, res["tagged"], 1)
|
||||
|
||||
if _, ok := res["Untagged"]; ok {
|
||||
t.Errorf("untagged field should not be in projection")
|
||||
}
|
||||
if _, ok := res["Other"]; ok {
|
||||
t.Errorf("non-bson-tagged field should not be in projection")
|
||||
}
|
||||
}
|
||||
|
||||
func TestProjectionFromStructWithOptions(t *testing.T) {
|
||||
type model struct {
|
||||
ID string `bson:"_id,omitempty"`
|
||||
Name string `bson:"name,omitempty"`
|
||||
Slug string `bson:"slug,inline"`
|
||||
}
|
||||
|
||||
res := ProjectionFromStruct(model{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 3)
|
||||
tst.AssertEqual(t, res["_id"], 1)
|
||||
tst.AssertEqual(t, res["name"], 1)
|
||||
tst.AssertEqual(t, res["slug"], 1)
|
||||
}
|
||||
|
||||
func TestProjectionFromStructEmpty(t *testing.T) {
|
||||
type empty struct{}
|
||||
|
||||
res := ProjectionFromStruct(empty{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 0)
|
||||
}
|
||||
|
||||
func TestProjectionFromStructPointerValues(t *testing.T) {
|
||||
type model struct {
|
||||
Name *string `bson:"name"`
|
||||
Tags []int `bson:"tags"`
|
||||
}
|
||||
|
||||
res := ProjectionFromStruct(model{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 2)
|
||||
tst.AssertEqual(t, res["name"], 1)
|
||||
tst.AssertEqual(t, res["tags"], 1)
|
||||
}
|
||||
|
||||
func TestProjectionFromStructAllSkipped(t *testing.T) {
|
||||
type model struct {
|
||||
A string
|
||||
B int
|
||||
C bool
|
||||
}
|
||||
|
||||
res := ProjectionFromStruct(model{})
|
||||
|
||||
tst.AssertEqual(t, len(res), 0)
|
||||
}
|
||||
Reference in New Issue
Block a user