diamond-orm/json_test.go

75 lines
1.6 KiB
Go

package orm
import (
"encoding/json"
"fmt"
"github.com/Jeffail/gabs"
"github.com/stretchr/testify/assert"
"testing"
)
func TestJsonSerialize(t *testing.T) {
e := initTest(t)
defer e.Disconnect()
u := author(t)
err := e.Model(&user{}).Save(&u)
if err != nil {
fmt.Println(err.Error())
}
assert.Nil(t, err)
insertBands(t, e)
ns := storyBase(e, t, u, "Chapters.Bands")
bytes, err := JSONSerialize(ns, true)
assert.Nil(t, err)
fmt.Println(string(bytes))
}
func TestJSONDeserialize(t *testing.T) {
e := initTest(t)
defer e.Disconnect()
u := author(t)
err := e.Model(&user{}).Save(&u)
if err != nil {
fmt.Println(err.Error())
}
assert.Nil(t, err)
insertBands(t, e)
ns := storyBase(e, t, u, "Chapters.Bands")
bytes, err := JSONSerialize(ns, true)
assert.Nil(t, err)
fmt.Println(string(bytes))
msi := make(map[string]any)
err = json.Unmarshal(bytes, &msi)
assert.Nil(t, err)
obj, err := gabs.Consume(msi)
assert.Nil(t, err)
children, err := obj.S("chapters").Children()
assert.Nil(t, err)
for _, child := range children {
bands := child.S("bands")
var bcontainer []*gabs.Container
bcontainer, err = bands.Children()
assert.Nil(t, err)
if err != nil {
break
}
for j := range bcontainer {
id := bcontainer[j].S("_id").Data()
//obj.S("chapters").Index(i).S("bands").Index
_, err = bands.SetIndex(id, j)
assert.Nil(t, err)
if err != nil {
break
}
}
}
nbytes := obj.Bytes()
var des story
err = JSONDeserialize(&des, nbytes)
assert.Nil(t, err)
for _, c := range des.Chapters {
assert.NotNil(t, c.Bands)
assert.GreaterOrEqual(t, len(c.Bands), 1)
}
}