feat(ksuid): add Equal and IsZero for ApplyInterfacePtr

StringKSUID and BinaryKSUID now implement ApplyInterface with nil-nil
equality semantics, enabling ApplyInterfacePtr in patch logic. Adds nil
sentinel vars and tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-29 18:24:07 -07:00
parent 0f8e79a890
commit cc44931ea9
6 changed files with 69 additions and 3 deletions
+29
View File
@@ -6,6 +6,7 @@ import (
"io"
"testing"
"github.com/go-jet/jet/v2/mysql"
"github.com/segmentio/ksuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -118,6 +119,34 @@ func TestBinaryKSUID_Conversion(t *testing.T) {
}
func TestStringKSUID_EqualIsZero(t *testing.T) {
id := NewStringKSUID()
assert.True(t, NilStringKSUID.Equal(NilStringKSUID))
assert.True(t, id.Equal(id))
assert.False(t, id.Equal(NilStringKSUID))
assert.True(t, NilStringKSUID.IsZero())
assert.False(t, id.IsZero())
}
func TestBinaryKSUID_EqualIsZero(t *testing.T) {
id := NewBinaryKSUID()
assert.True(t, NilBinaryKSUID.Equal(NilBinaryKSUID))
assert.True(t, id.Equal(id))
assert.False(t, id.Equal(NilBinaryKSUID))
assert.True(t, NilBinaryKSUID.IsZero())
assert.False(t, id.IsZero())
}
func TestStringKSUID_ApplyInterfacePtr(t *testing.T) {
targetCol := mysql.StringColumn("id")
modified := make(ColumnList, 0)
current := Ptr(NewStringKSUID())
updated := ApplyInterfacePtr(current, Ptr(NewStringKSUID()), &modified, targetCol)
require.NotNil(t, updated)
assert.Len(t, modified, 1)
assert.False(t, current.Equal(*updated))
}
func TestParseStringKSUID(t *testing.T) {
id := ksuid.New()
parsed, err := ParseStringKSUID(id.String())