Files
chaisql/internal/database/encoding_test.go
2022-05-15 21:53:41 +04:00

91 lines
2.0 KiB
Go

package database_test
import (
"bytes"
"testing"
"github.com/genjidb/genji/document"
"github.com/genjidb/genji/internal/database"
"github.com/genjidb/genji/internal/expr"
"github.com/genjidb/genji/internal/testutil"
"github.com/genjidb/genji/types"
"github.com/stretchr/testify/require"
)
func TestEncoding(t *testing.T) {
var ti database.TableInfo
err := ti.AddFieldConstraint(&database.FieldConstraint{
Position: 0,
Field: "a",
Type: types.IntegerValue,
})
require.NoError(t, err)
err = ti.AddFieldConstraint(&database.FieldConstraint{
Position: 1,
Field: "b",
Type: types.TextValue,
})
require.NoError(t, err)
err = ti.AddFieldConstraint(&database.FieldConstraint{
Position: 2,
Field: "c",
Type: types.DoubleValue,
IsNotNull: true,
})
require.NoError(t, err)
err = ti.AddFieldConstraint(&database.FieldConstraint{
Position: 3,
Field: "d",
Type: types.DoubleValue,
DefaultValue: expr.Constraint(testutil.ParseExpr(t, `10`)),
})
require.NoError(t, err)
err = ti.AddFieldConstraint(&database.FieldConstraint{
Position: 4,
Field: "e",
Type: types.DoubleValue,
})
require.NoError(t, err)
ti.FieldConstraints.AllowExtraFields = true
codec := database.NewCodec(nil, &ti)
doc := document.NewFromMap(map[string]any{
"a": int64(1),
"b": "hello",
"c": float64(3.14),
"e": int64(100),
"f": int64(1000),
"g": float64(2000),
"array": []int{1, 2, 3},
"doc": document.NewFromMap(map[string]int64{"a": 10}),
})
var buf bytes.Buffer
err = codec.Encode(&buf, doc)
require.NoError(t, err)
d, err := codec.Decode(buf.Bytes())
require.NoError(t, err)
want := document.NewFromMap(map[string]any{
"a": int64(1),
"b": "hello",
"c": float64(3.14),
"d": float64(10),
"e": float64(100),
"f": float64(1000),
"g": float64(2000),
"array": []float64{1, 2, 3},
"doc": document.NewFromMap(map[string]float64{"a": 10}),
})
testutil.RequireDocEqual(t, want, d)
}