Skip to content

Commit e195ff2

Browse files
Merge pull request #12 from oracle-samples/serializer-tests
Fixing serialization tests
2 parents 88d86e9 + 80abad1 commit e195ff2

File tree

2 files changed

+12
-31
lines changed

2 files changed

+12
-31
lines changed

tests/passed-tests.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,9 @@ TestScanToEmbedded
294294
TestGORMValuer
295295
TestScopes
296296
TestComplexScopes
297-
#TestSerializer
298-
#TestSerializerZeroValue
299-
#TestSerializerAssignFirstOrCreate
297+
TestSerializer
298+
TestSerializerZeroValue
299+
TestSerializerAssignFirstOrCreate
300300
TestSoftDelete
301301
TestDeletedAtUnMarshal
302302
TestDeletedAtOneOr

tests/serializer_test.go

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,33 +60,13 @@ type SerializerStruct struct {
6060
Roles3 *Roles `gorm:"serializer:json;not null"`
6161
Contracts map[string]interface{} `gorm:"serializer:json"`
6262
JobInfo Job `gorm:"type:bytes;serializer:gob"`
63-
CreatedTime int64 `gorm:"serializer:unixtime;type:datetime"` // store time in db, use int as field type
64-
UpdatedTime *int64 `gorm:"serializer:unixtime;type:datetime"` // store time in db, use int as field type
63+
CreatedTime int64 `gorm:"serializer:unixtime;type:timestamp"` // store time in db, use int as field type
64+
UpdatedTime *int64 `gorm:"serializer:unixtime;type:timestamp"` // store time in db, use int as field type
6565
CustomSerializerString string `gorm:"serializer:custom"`
6666
EncryptedString EncryptedString
6767
}
6868

69-
type SerializerPostgresStruct struct {
70-
gorm.Model
71-
Name []byte `gorm:"json"`
72-
Roles Roles `gorm:"serializer:json"`
73-
Roles2 *Roles `gorm:"serializer:json"`
74-
Roles3 *Roles `gorm:"serializer:json;not null"`
75-
Contracts map[string]interface{} `gorm:"serializer:json"`
76-
JobInfo Job `gorm:"type:bytes;serializer:gob"`
77-
CreatedTime int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type
78-
UpdatedTime *int64 `gorm:"serializer:unixtime;type:timestamptz"` // store time in db, use int as field type
79-
CustomSerializerString string `gorm:"serializer:custom"`
80-
EncryptedString EncryptedString
81-
}
82-
83-
func (*SerializerPostgresStruct) TableName() string { return "serializer_structs" }
84-
8569
func adaptorSerializerModel(s *SerializerStruct) interface{} {
86-
if DB.Dialector.Name() == "postgres" {
87-
sps := SerializerPostgresStruct(*s)
88-
return &sps
89-
}
9070
return s
9171
}
9272

@@ -142,7 +122,6 @@ func (c *CustomSerializer) Value(ctx context.Context, field *schema.Field, dst r
142122
}
143123

144124
func TestSerializer(t *testing.T) {
145-
t.Skip()
146125
schema.RegisterSerializer("custom", NewCustomSerializer("hello"))
147126
DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{}))
148127
if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil {
@@ -155,6 +134,7 @@ func TestSerializer(t *testing.T) {
155134
data := SerializerStruct{
156135
Name: []byte("jinzhu"),
157136
Roles: []string{"r1", "r2"},
137+
Roles3: &Roles{},
158138
Contracts: map[string]interface{}{"name": "jinzhu", "age": 10},
159139
EncryptedString: EncryptedString("pass"),
160140
CreatedTime: createdAt.Unix(),
@@ -173,13 +153,13 @@ func TestSerializer(t *testing.T) {
173153
}
174154

175155
var result SerializerStruct
176-
if err := DB.Where("roles2 IS NULL AND roles3 = ?", "").First(&result, data.ID).Error; err != nil {
156+
if err := DB.Where("\"roles2\" IS NULL AND \"roles3\" = ?", "[]").First(&result, data.ID).Error; err != nil {
177157
t.Fatalf("failed to query data, got error %v", err)
178158
}
179159

180160
tests.AssertEqual(t, result, data)
181161

182-
if err := DB.Model(&result).Update("roles", "").Error; err != nil {
162+
if err := DB.Model(&result).Update("roles", []string{}).Error; err != nil {
183163
t.Fatalf("failed to update data's roles, got error %v", err)
184164
}
185165

@@ -189,14 +169,15 @@ func TestSerializer(t *testing.T) {
189169
}
190170

191171
func TestSerializerZeroValue(t *testing.T) {
192-
t.Skip()
193172
schema.RegisterSerializer("custom", NewCustomSerializer("hello"))
194173
DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{}))
195174
if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil {
196175
t.Fatalf("no error should happen when migrate scanner, valuer struct, got error %v", err)
197176
}
198177

199178
data := SerializerStruct{}
179+
// If left as is Roles3 value will be "" which will be translated by OracleDB to NULL which is not allowed for Role3 column
180+
data.Roles3 = &Roles{}
200181

201182
if err := DB.Create(&data).Error; err != nil {
202183
t.Fatalf("failed to create data, got error %v", err)
@@ -209,7 +190,7 @@ func TestSerializerZeroValue(t *testing.T) {
209190

210191
tests.AssertEqual(t, result, data)
211192

212-
if err := DB.Model(&result).Update("roles", "").Error; err != nil {
193+
if err := DB.Model(&result).Update("roles", []string{}).Error; err != nil {
213194
t.Fatalf("failed to update data's roles, got error %v", err)
214195
}
215196

@@ -219,7 +200,6 @@ func TestSerializerZeroValue(t *testing.T) {
219200
}
220201

221202
func TestSerializerAssignFirstOrCreate(t *testing.T) {
222-
t.Skip()
223203
schema.RegisterSerializer("custom", NewCustomSerializer("hello"))
224204
DB.Migrator().DropTable(adaptorSerializerModel(&SerializerStruct{}))
225205
if err := DB.Migrator().AutoMigrate(adaptorSerializerModel(&SerializerStruct{})); err != nil {
@@ -231,6 +211,7 @@ func TestSerializerAssignFirstOrCreate(t *testing.T) {
231211
data := SerializerStruct{
232212
Name: []byte("ag9920"),
233213
Roles: []string{"r1", "r2"},
214+
Roles3: &Roles{},
234215
Contracts: map[string]interface{}{"name": "jing1", "age": 11},
235216
EncryptedString: EncryptedString("pass"),
236217
CreatedTime: createdAt.Unix(),

0 commit comments

Comments
 (0)