package urlvalues_test
import (
"database/sql"
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/go-pg/pg/urlvalues"
)
type Filter struct {
Field string
FieldNEQ string
FieldLT int8
FieldLTE int16
FieldGT int32
FieldGTE int64
Multi []string
MultiNEQ []int
Time time.Time
NullBool sql.NullBool
NullInt64 sql.NullInt64
NullFloat64 sql.NullFloat64
NullString sql.NullString
Omit []byte `pg:"-"`
}
func (f *Filter) AfterDecodeURLValues(values urlvalues.Values) error {
return nil
}
var _ = Describe("Decode", func() {
It("decodes struct from Values", func() {
f := &Filter{}
err := urlvalues.Decode(f, urlvalues.Values{
"field": {"one"},
"field__neq": {"two"},
"field__lt": {"1"},
"field__lte": {"2"},
"field__gt": {"3"},
"field__gte": {"4"},
"multi": {"one", "two"},
"multi__neq": {"3", "4"},
"time": {"1970-01-01 00:00:00+00:00:00"},
"null_bool": {"t"},
"null_int64": {"1234"},
"null_float64": {"1.234"},
"null_string": {"string"},
})
Expect(err).NotTo(HaveOccurred())
Expect(f.Field).To(Equal("one"))
Expect(f.FieldNEQ).To(Equal("two"))
Expect(f.FieldLT).To(Equal(int8(1)))
Expect(f.FieldLTE).To(Equal(int16(2)))
Expect(f.FieldGT).To(Equal(int32(3)))
Expect(f.FieldGTE).To(Equal(int64(4)))
Expect(f.Multi).To(Equal([]string{"one", "two"}))
Expect(f.MultiNEQ).To(Equal([]int{3, 4}))
Expect(f.Time).To(BeTemporally("==", time.Unix(0, 0)))
Expect(f.NullBool.Valid).To(BeTrue())
Expect(f.NullBool.Bool).To(BeTrue())
Expect(f.NullInt64.Valid).To(BeTrue())
Expect(f.NullInt64.Int64).To(Equal(int64(1234)))
Expect(f.NullFloat64.Valid).To(BeTrue())
Expect(f.NullFloat64.Float64).To(Equal(float64(1.234)))
Expect(f.NullString.Valid).To(BeTrue())
Expect(f.NullString.String).To(Equal("string"))
})
It("decodes sql.Null*", func() {
f := &Filter{}
err := urlvalues.Decode(f, urlvalues.Values{
"null_bool": {""},
"null_int64": {""},
"null_float64": {""},
"null_string": {""},
})
Expect(err).NotTo(HaveOccurred())
Expect(f.NullBool.Valid).To(BeTrue())
Expect(f.NullBool.Bool).To(BeZero())
Expect(f.NullInt64.Valid).To(BeTrue())
Expect(f.NullInt64.Int64).To(BeZero())
Expect(f.NullFloat64.Valid).To(BeTrue())
Expect(f.NullFloat64.Float64).To(BeZero())
Expect(f.NullString.Valid).To(BeTrue())
Expect(f.NullString.String).To(BeZero())
})
})