From b84ceca60e83ebb6620a538444bb8574247f40c5 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Wed, 13 Aug 2025 15:22:01 +0100 Subject: [PATCH 1/4] Fixing serialization tests --- tests/passed-tests.txt | 6 +++--- tests/serializer_test.go | 32 +++++++++----------------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index 047c79c..cd26fe5 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -287,9 +287,9 @@ TestScanToEmbedded TestGORMValuer TestScopes TestComplexScopes -#TestSerializer -#TestSerializerZeroValue -#TestSerializerAssignFirstOrCreate +TestSerializer +TestSerializerZeroValue +TestSerializerAssignFirstOrCreate TestSoftDelete TestDeletedAtUnMarshal TestDeletedAtOneOr diff --git a/tests/serializer_test.go b/tests/serializer_test.go index 770e0ba..51e40fe 100644 --- a/tests/serializer_test.go +++ b/tests/serializer_test.go @@ -66,27 +66,7 @@ type SerializerStruct struct { EncryptedString EncryptedString } -type SerializerPostgresStruct struct { - gorm.Model - Name []byte `gorm:"json"` - Roles Roles `gorm:"serializer:json"` - Roles2 *Roles `gorm:"serializer:json"` - Roles3 *Roles `gorm:"serializer:json;not null"` - Contracts map[string]interface{} `gorm:"serializer:json"` - JobInfo Job `gorm:"type:bytes;serializer:gob"` - CreatedTime int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type - UpdatedTime *int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type - CustomSerializerString string `gorm:"serializer:custom"` - EncryptedString EncryptedString -} - -func (*SerializerPostgresStruct) TableName() string { return "serializer_structs" } - func adaptorSerializerModel(s *SerializerStruct) interface{} { - if DB.Dialector.Name() == "postgres" { - sps := SerializerPostgresStruct(*s) - return &sps - } return s } @@ -154,6 +134,7 @@ func TestSerializer(t *testing.T) { data := SerializerStruct{ Name: []byte("jinzhu"), Roles: []string{"r1", "r2"}, + Roles3: &Roles{}, Contracts: map[string]interface{}{"name": "jinzhu", "age": 10}, EncryptedString: EncryptedString("pass"), CreatedTime: createdAt.Unix(), @@ -166,19 +147,21 @@ func TestSerializer(t *testing.T) { }, CustomSerializerString: "world", } + // empty := Roles{} + // data.Roles3 = &empty if err := DB.Create(&data).Error; err != nil { t.Fatalf("failed to create data, got error %v", err) } var result SerializerStruct - if err := DB.Where("roles2 IS NULL AND roles3 = ?", "").First(&result, data.ID).Error; err != nil { + if err := DB.Where("\"roles2\" IS NULL AND \"roles3\" = ?", "[]").First(&result, data.ID).Error; err != nil { t.Fatalf("failed to query data, got error %v", err) } tests.AssertEqual(t, result, data) - if err := DB.Model(&result).Update("roles", "").Error; err != nil { + if err := DB.Model(&result).Update("roles", []string{}).Error; err != nil { t.Fatalf("failed to update data's roles, got error %v", err) } @@ -195,6 +178,8 @@ func TestSerializerZeroValue(t *testing.T) { } data := SerializerStruct{} + // If left as is Roles3 value will be "" which will be translated by OracleDB to NULL which is not allowed for Role3 column + data.Roles3 = &Roles{} if err := DB.Create(&data).Error; err != nil { t.Fatalf("failed to create data, got error %v", err) @@ -207,7 +192,7 @@ func TestSerializerZeroValue(t *testing.T) { tests.AssertEqual(t, result, data) - if err := DB.Model(&result).Update("roles", "").Error; err != nil { + if err := DB.Model(&result).Update("roles", []string{}).Error; err != nil { t.Fatalf("failed to update data's roles, got error %v", err) } @@ -228,6 +213,7 @@ func TestSerializerAssignFirstOrCreate(t *testing.T) { data := SerializerStruct{ Name: []byte("ag9920"), Roles: []string{"r1", "r2"}, + Roles3: &Roles{}, Contracts: map[string]interface{}{"name": "jing1", "age": 11}, EncryptedString: EncryptedString("pass"), CreatedTime: createdAt.Unix(), From dc9c24513325c447ea554030208d3bc9c47ca487 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 10:27:10 +0100 Subject: [PATCH 2/4] removing "skip" from passing tests --- tests/serializer_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/serializer_test.go b/tests/serializer_test.go index f5f57aa..51e40fe 100644 --- a/tests/serializer_test.go +++ b/tests/serializer_test.go @@ -122,7 +122,6 @@ func (c *CustomSerializer) Value(ctx context.Context, field *schema.Field, dst r } func TestSerializer(t *testing.T) { - t.Skip() schema.RegisterSerializer("custom", NewCustomSerializer("hello")) DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{})) if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil { @@ -172,7 +171,6 @@ func TestSerializer(t *testing.T) { } func TestSerializerZeroValue(t *testing.T) { - t.Skip() schema.RegisterSerializer("custom", NewCustomSerializer("hello")) DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{})) if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil { @@ -204,7 +202,6 @@ func TestSerializerZeroValue(t *testing.T) { } func TestSerializerAssignFirstOrCreate(t *testing.T) { - t.Skip() schema.RegisterSerializer("custom", NewCustomSerializer("hello")) DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{})) if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil { From 929e79c467a757c7f4151e420dc4675b97e2640d Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Fri, 15 Aug 2025 11:43:41 +0100 Subject: [PATCH 3/4] changing datetime to timestamp --- tests/serializer_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/serializer_test.go b/tests/serializer_test.go index 51e40fe..48e08aa 100644 --- a/tests/serializer_test.go +++ b/tests/serializer_test.go @@ -60,8 +60,8 @@ type SerializerStruct struct { Roles3 *Roles `gorm:"serializer:json;not null"` Contracts map[string]interface{} `gorm:"serializer:json"` JobInfo Job `gorm:"type:bytes;serializer:gob"` - CreatedTime int64 `gorm:"serializer:unixtime;type:datetime"` // store time in db, use int as field type - UpdatedTime *int64 `gorm:"serializer:unixtime;type:datetime"` // store time in db, use int as field type + CreatedTime int64 `gorm:"serializer:unixtime;type:timestamp"` // store time in db, use int as field type + UpdatedTime *int64 `gorm:"serializer:unixtime;type:timestamp"` // store time in db, use int as field type CustomSerializerString string `gorm:"serializer:custom"` EncryptedString EncryptedString } From 80abad1b2673866c7dcddd946382fa5330794523 Mon Sep 17 00:00:00 2001 From: Ayoub Aarrasse Date: Mon, 18 Aug 2025 15:36:28 +0100 Subject: [PATCH 4/4] remove unneeded comments --- tests/serializer_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/serializer_test.go b/tests/serializer_test.go index 48e08aa..110485a 100644 --- a/tests/serializer_test.go +++ b/tests/serializer_test.go @@ -147,8 +147,6 @@ func TestSerializer(t *testing.T) { }, CustomSerializerString: "world", } - // empty := Roles{} - // data.Roles3 = &empty if err := DB.Create(&data).Error; err != nil { t.Fatalf("failed to create data, got error %v", err)