mirror of
https://github.com/chaisql/chai.git
synced 2025-10-05 15:46:55 +08:00
88 lines
2.9 KiB
Go
88 lines
2.9 KiB
Go
package database_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/chaisql/chai/internal/database"
|
|
"github.com/chaisql/chai/internal/expr"
|
|
"github.com/chaisql/chai/internal/expr/functions"
|
|
"github.com/chaisql/chai/internal/testutil"
|
|
"github.com/chaisql/chai/internal/types"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestColumnConstraintsAdd(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
got []*database.ColumnConstraint
|
|
add database.ColumnConstraint
|
|
want []*database.ColumnConstraint
|
|
fails bool
|
|
}{
|
|
{
|
|
"Same path",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "a", Type: types.TypeInteger},
|
|
nil,
|
|
true,
|
|
},
|
|
{
|
|
"Different path",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "b", Type: types.TypeInteger},
|
|
[]*database.ColumnConstraint{
|
|
{Position: 0, Column: "a", Type: types.TypeInteger},
|
|
{Position: 1, Column: "b", Type: types.TypeInteger},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"Default value conversion, typed constraint",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "b", Type: types.TypeInteger, DefaultValue: expr.Constraint(testutil.DoubleValue(5))},
|
|
[]*database.ColumnConstraint{
|
|
{Position: 0, Column: "a", Type: types.TypeInteger},
|
|
{Position: 1, Column: "b", Type: types.TypeInteger, DefaultValue: expr.Constraint(testutil.DoubleValue(5))},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"Default value conversion, typed constraint, nextval",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "b", Type: types.TypeInteger, DefaultValue: expr.Constraint(&functions.NextVal{Expr: testutil.TextValue("seq")})},
|
|
[]*database.ColumnConstraint{
|
|
{Position: 0, Column: "a", Type: types.TypeInteger},
|
|
{Position: 1, Column: "b", Type: types.TypeInteger, DefaultValue: expr.Constraint(&functions.NextVal{Expr: testutil.TextValue("seq")})},
|
|
},
|
|
false,
|
|
},
|
|
{
|
|
"Default value conversion, typed constraint, nextval with bytea",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "b", Type: types.TypeBytea, DefaultValue: expr.Constraint(&functions.NextVal{Expr: testutil.TextValue("seq")})},
|
|
nil,
|
|
true,
|
|
},
|
|
{
|
|
"Default value conversion, typed constraint, incompatible value",
|
|
[]*database.ColumnConstraint{{Column: "a", Type: types.TypeInteger}},
|
|
database.ColumnConstraint{Column: "b", Type: types.TypeDouble, DefaultValue: expr.Constraint(testutil.BoolValue(true))},
|
|
nil,
|
|
true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
fcs := database.MustNewColumnConstraints(test.got...)
|
|
err := fcs.Add(&test.add)
|
|
if test.fails {
|
|
require.Error(t, err)
|
|
} else {
|
|
require.NoError(t, err)
|
|
require.Equal(t, test.want, fcs.Ordered)
|
|
}
|
|
})
|
|
}
|
|
}
|