Files
zeekayandHanzo Dev f62ee2198f Go 1.27.1, and the code it can say more simply
Modules declare go 1.27.1 and the build images follow. go fix applied the
modernizers, and the test and example pointer helpers went once new(expr)
could say them; omitzero is not applied, since it changes what the JSON says.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-16 19:12:06 -07:00

162 lines
4.0 KiB
Go

package meilisearch
import (
"encoding/json"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestInt(t *testing.T) {
v := 42
ptr := new(v)
assert.NotNil(t, ptr, "IntPtr returned nil pointer")
assert.Equal(t, v, *ptr, "IntPtr returned wrong value")
}
func TestInt64(t *testing.T) {
v := int64(42)
ptr := new(v)
assert.NotNil(t, ptr, "Int64Ptr returned nil pointer")
assert.Equal(t, v, *ptr, "Int64Ptr returned wrong value")
}
func TestBool(t *testing.T) {
v := true
ptr := new(v)
assert.NotNil(t, ptr, "BoolPtr returned nil pointer")
assert.Equal(t, v, *ptr, "BoolPtr returned wrong value")
}
func TestFloat(t *testing.T) {
v := 3.14
ptr := new(v)
assert.NotNil(t, ptr, "FloatPtr returned nil pointer")
assert.Equal(t, v, *ptr, "FloatPtr returned wrong value")
}
func TestString(t *testing.T) {
v := "hello"
ptr := new(v)
assert.NotNil(t, ptr, "StringPtr returned nil pointer")
assert.Equal(t, v, *ptr, "StringPtr returned wrong value")
}
func TestTime(t *testing.T) {
v := time.Date(2020, 1, 2, 3, 4, 5, 6, time.UTC)
ptr := new(v)
assert.NotNil(t, ptr, "TimePtr returned nil pointer")
assert.True(t, ptr.Equal(v), "TimePtr returned wrong value")
}
func TestIntOpt(t *testing.T) {
v := 5
o := Int(v)
assert.True(t, o.Valid(), "Int() should produce a valid Opt")
assert.False(t, o.Null(), "Int() Opt should not be null")
assert.Equal(t, v, o.Value, "Int() Opt has wrong value")
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "5", string(b))
}
func TestInt64Opt(t *testing.T) {
v := int64(123456789)
o := Int64(v)
assert.True(t, o.Valid())
assert.False(t, o.Null())
assert.Equal(t, v, o.Value)
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "123456789", string(b))
}
func TestBoolOpt(t *testing.T) {
v := true
o := Bool(v)
assert.True(t, o.Valid())
assert.False(t, o.Null())
assert.Equal(t, v, o.Value)
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "true", string(b))
}
func TestFloatOpt(t *testing.T) {
v := 3.14159
o := Float(v)
assert.True(t, o.Valid())
assert.False(t, o.Null())
assert.Equal(t, v, o.Value)
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Contains(t, string(b), "3.14159") // float formatting
}
func TestStringOpt(t *testing.T) {
v := "hello"
o := String(v)
assert.True(t, o.Valid())
assert.False(t, o.Null())
assert.Equal(t, v, o.Value)
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "\"hello\"", string(b))
}
func TestNullOpt(t *testing.T) {
o := Null[int]()
assert.False(t, o.Valid(), "Null Opt should not be valid")
assert.True(t, o.Null(), "Null Opt should report Null() = true")
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "null", string(b))
}
func TestDefaultOptIsOmitted(t *testing.T) {
var o Opt[int]
assert.False(t, o.Valid(), "default Opt should not be valid (omitted)")
assert.False(t, o.Null(), "default Opt should not be null; it's omitted")
b, err := json.Marshal(o)
assert.NoError(t, err)
assert.Equal(t, "null", string(b), "omitted should marshal as null")
}
func TestUnmarshalIncluded(t *testing.T) {
var o Opt[int]
err := json.Unmarshal([]byte("42"), &o)
assert.NoError(t, err)
assert.True(t, o.Valid())
assert.False(t, o.Null())
assert.Equal(t, 42, o.Value)
}
func TestUnmarshalNull(t *testing.T) {
o := String("preset") // start included with non-zero value to ensure reset
assert.True(t, o.Valid())
err := json.Unmarshal([]byte("null"), &o)
assert.NoError(t, err)
assert.False(t, o.Valid())
assert.True(t, o.Null())
assert.Equal(t, "", o.Value, "value should be zero value after null unmarshal")
}
func TestReUnmarshalOverwrite(t *testing.T) {
var o Opt[int]
err := json.Unmarshal([]byte("10"), &o)
assert.NoError(t, err)
assert.Equal(t, 10, o.Value)
assert.True(t, o.Valid())
// Overwrite with a new value
err = json.Unmarshal([]byte("20"), &o)
assert.NoError(t, err)
assert.Equal(t, 20, o.Value)
assert.True(t, o.Valid())
// Overwrite with null
err = json.Unmarshal([]byte("null"), &o)
assert.NoError(t, err)
assert.False(t, o.Valid())
assert.True(t, o.Null())
}