This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package sq
|
||||
|
||||
import (
|
||||
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJsonObjMarshalToDB(t *testing.T) {
|
||||
j := JsonObj{}
|
||||
out, err := j.MarshalToDB(JsonObj{"key": "value", "num": float64(7)})
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
// JSON map ordering is not guaranteed - parse and verify
|
||||
roundtrip, err := j.UnmarshalToModel(out)
|
||||
tst.AssertNoErr(t, err)
|
||||
tst.AssertStrRepEqual(t, roundtrip["key"], "value")
|
||||
tst.AssertStrRepEqual(t, roundtrip["num"], float64(7))
|
||||
}
|
||||
|
||||
func TestJsonObjUnmarshalToModelInvalid(t *testing.T) {
|
||||
j := JsonObj{}
|
||||
_, err := j.UnmarshalToModel("{not valid json}")
|
||||
if err == nil {
|
||||
t.Fatal("expected error for invalid JSON")
|
||||
}
|
||||
}
|
||||
|
||||
func TestJsonArrMarshalToDB(t *testing.T) {
|
||||
j := JsonArr{}
|
||||
out, err := j.MarshalToDB(JsonArr{float64(1), "two", true})
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
tst.AssertEqual(t, `[1,"two",true]`, out)
|
||||
}
|
||||
|
||||
func TestJsonArrRoundtrip(t *testing.T) {
|
||||
j := JsonArr{}
|
||||
out, err := j.MarshalToDB(JsonArr{"a", "b", "c"})
|
||||
tst.AssertNoErr(t, err)
|
||||
|
||||
r, err := j.UnmarshalToModel(out)
|
||||
tst.AssertNoErr(t, err)
|
||||
tst.AssertEqual(t, 3, len(r))
|
||||
tst.AssertEqual(t, "a", r[0])
|
||||
tst.AssertEqual(t, "b", r[1])
|
||||
tst.AssertEqual(t, "c", r[2])
|
||||
}
|
||||
|
||||
func TestJsonArrUnmarshalInvalid(t *testing.T) {
|
||||
j := JsonArr{}
|
||||
_, err := j.UnmarshalToModel("not json")
|
||||
if err == nil {
|
||||
t.Fatal("expected error for invalid JSON")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAutoJsonRoundtrip(t *testing.T) {
|
||||
type inner struct {
|
||||
A int `json:"a"`
|
||||
B string `json:"b"`
|
||||
}
|
||||
|
||||
aj := AutoJson[inner]{Value: inner{A: 42, B: "foo"}}
|
||||
zero := AutoJson[inner]{}
|
||||
|
||||
out, err := zero.MarshalToDB(aj)
|
||||
tst.AssertNoErr(t, err)
|
||||
tst.AssertEqual(t, `{"a":42,"b":"foo"}`, out)
|
||||
|
||||
r, err := zero.UnmarshalToModel(out)
|
||||
tst.AssertNoErr(t, err)
|
||||
tst.AssertEqual(t, 42, r.Value.A)
|
||||
tst.AssertEqual(t, "foo", r.Value.B)
|
||||
}
|
||||
|
||||
func TestAutoJsonUnmarshalInvalid(t *testing.T) {
|
||||
type inner struct {
|
||||
A int `json:"a"`
|
||||
}
|
||||
zero := AutoJson[inner]{}
|
||||
_, err := zero.UnmarshalToModel("garbage")
|
||||
if err == nil {
|
||||
t.Fatal("expected error for invalid JSON")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user