@@ -34,24 +34,59 @@ func Test_fieldUpdateBuilder_Set(t *testing.T) {
3434}
3535
3636func Test_fieldUpdateBuilder_SetFields (t * testing.T ) {
37- t .Run ("nil value" , func (t * testing.T ) {
38- assert .Equal (t , bson.D {{Key : "$set" , Value : nil }}, NewBuilder ().SetFields (nil ).Build ())
39- })
40-
41- t .Run ("string value" , func (t * testing.T ) {
42- assert .Equal (t , bson.D {{Key : "$set" , Value : "cmy" }}, NewBuilder ().SetFields ("cmy" ).Build ())
43- })
44-
45- t .Run ("map value" , func (t * testing.T ) {
46- assert .Equal (t , bson.D {{Key : "$set" , Value : map [string ]any {"name" : "cmy" }}}, NewBuilder ().SetFields (map [string ]any {"name" : "cmy" }).Build ())
47- })
48-
49- t .Run ("struct value" , func (t * testing.T ) {
50- assert .Equal (t , bson.D {{Key : "$set" , Value : struct { Name string }{Name : "cmy" }}}, NewBuilder ().SetFields (struct { Name string }{Name : "cmy" }).Build ())
51- })
52-
53- t .Run ("pointer value" , func (t * testing.T ) {
54- assert .Equal (t , bson.D {{Key : "$set" , Value : & struct { Name string }{Name : "cmy" }}}, NewBuilder ().SetFields (& struct { Name string }{Name : "cmy" }).Build ())
37+ testCases := []struct {
38+ name string
39+ value any
40+ want bson.D
41+ }{
42+ {
43+ name : "nil value" ,
44+ value : nil ,
45+ want : bson.D {bson.E {Key : "$set" , Value : nil }},
46+ },
47+ {
48+ name : "string value" ,
49+ value : "Alice" ,
50+ want : bson.D {bson.E {Key : "$set" , Value : "Alice" }},
51+ },
52+ {
53+ name : "map value" ,
54+ value : map [string ]any {"name" : "Alice" },
55+ want : bson.D {bson.E {Key : "$set" , Value : map [string ]any {"name" : "Alice" }}},
56+ },
57+ {
58+ name : "bson value" ,
59+ value : bson.D {bson.E {Key : "name" , Value : "Alice" }},
60+ want : bson.D {bson.E {Key : "$set" , Value : bson.D {bson.E {Key : "name" , Value : "Alice" }}}},
61+ },
62+ {
63+ name : "pointer struct value" ,
64+ value : & bson.D {bson.E {Key : "name" , Value : "Alice" }},
65+ want : bson.D {bson.E {Key : "$set" , Value : & bson.D {bson.E {Key : "name" , Value : "Alice" }}}},
66+ },
67+ {
68+ name : "struct value" ,
69+ value : struct { Name string }{Name : "Alice" },
70+ want : bson.D {bson.E {Key : "$set" , Value : struct { Name string }{Name : "Alice" }}},
71+ },
72+ }
73+
74+ for _ , tc := range testCases {
75+ t .Run (tc .name , func (t * testing.T ) {
76+ assert .Equal (t , tc .want , NewBuilder ().SetFields (tc .value ).Build ())
77+ })
78+ }
79+
80+ t .Run ("multiple set_fields" , func (t * testing.T ) {
81+ assert .Equal (t , bson.D {{Key : "$set" , Value : struct { Name string }{Name : "cmy" }}, {Key : "$set" , Value : struct { Age int64 }{Age : 24 }}}, NewBuilder ().SetFields (struct { Name string }{Name : "cmy" }).SetFields (struct { Age int64 }{Age : 24 }).Build ())
82+ })
83+
84+ t .Run ("set_fields with struct value and set single operation" , func (t * testing.T ) {
85+ assert .Equal (t , bson.D {{Key : "$set" , Value : struct { Name string }{Name : "cmy" }}, {Key : "$set" , Value : bson.D {bson.E {Key : "name" , Value : "cmy" }}}}, NewBuilder ().SetFields (struct { Name string }{Name : "cmy" }).Set ("name" , "cmy" ).Build ())
86+ })
87+
88+ t .Run ("set_fields with pointer struct value and set multiple operation" , func (t * testing.T ) {
89+ assert .Equal (t , bson.D {{Key : "$set" , Value : struct { Name string }{Name : "cmy" }}, {Key : "$set" , Value : bson.D {bson.E {Key : "name" , Value : "cmy" }, bson.E {Key : "age" , Value : 24 }}}}, NewBuilder ().SetFields (struct { Name string }{Name : "cmy" }).Set ("name" , "cmy" ).Set ("age" , 24 ).Build ())
5590 })
5691}
5792
0 commit comments