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") } }