86 lines
2.0 KiB
Go
86 lines
2.0 KiB
Go
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")
|
|
}
|
|
}
|