add some test case which related the logic (#5477)
This commit is contained in:
		
							parent
							
								
									12237454ed
								
							
						
					
					
						commit
						328f301982
					
				| @ -239,6 +239,14 @@ func ParseWithSpecialTableName(dest interface{}, cacheStore *sync.Map, namer Nam | |||||||
| 				field.HasDefaultValue = true | 				field.HasDefaultValue = true | ||||||
| 				field.AutoIncrement = true | 				field.AutoIncrement = true | ||||||
| 			} | 			} | ||||||
|  | 		case String: | ||||||
|  | 			if _, ok := field.TagSettings["PRIMARYKEY"]; !ok { | ||||||
|  | 				if !field.HasDefaultValue || field.DefaultValueInterface != nil { | ||||||
|  | 					schema.FieldsWithDefaultDBValue = append(schema.FieldsWithDefaultDBValue, field) | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				field.HasDefaultValue = true | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,6 +9,56 @@ import ( | |||||||
| 	"gorm.io/gorm" | 	"gorm.io/gorm" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | func TestPostgresReturningIDWhichHasStringType(t *testing.T) { | ||||||
|  | 	if DB.Dialector.Name() != "postgres" { | ||||||
|  | 		t.Skip() | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	type Yasuo struct { | ||||||
|  | 		ID        string `gorm:"default:gen_random_uuid()"` | ||||||
|  | 		Name      string | ||||||
|  | 		CreatedAt time.Time `gorm:"type:TIMESTAMP WITHOUT TIME ZONE"` | ||||||
|  | 		UpdatedAt time.Time `gorm:"type:TIMESTAMP WITHOUT TIME ZONE;default:current_timestamp"` | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Exec("CREATE EXTENSION IF NOT EXISTS pgcrypto;").Error; err != nil { | ||||||
|  | 		t.Errorf("Failed to create extension pgcrypto, got error %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	DB.Migrator().DropTable(&Yasuo{}) | ||||||
|  | 
 | ||||||
|  | 	if err := DB.AutoMigrate(&Yasuo{}); err != nil { | ||||||
|  | 		t.Fatalf("Failed to migrate for uuid default value, got error: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	yasuo := Yasuo{Name: "jinzhu"} | ||||||
|  | 	if err := DB.Create(&yasuo).Error; err != nil { | ||||||
|  | 		t.Fatalf("should be able to create data, but got %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if yasuo.ID == "" { | ||||||
|  | 		t.Fatal("should be able to has ID, but got zero value") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var result Yasuo | ||||||
|  | 	if err := DB.First(&result, "id = ?", yasuo.ID).Error; err != nil || yasuo.Name != "jinzhu" { | ||||||
|  | 		t.Errorf("No error should happen, but got %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := DB.Where("id = $1", yasuo.ID).First(&Yasuo{}).Error; err != nil || yasuo.Name != "jinzhu" { | ||||||
|  | 		t.Errorf("No error should happen, but got %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	yasuo.Name = "jinzhu1" | ||||||
|  | 	if err := DB.Save(&yasuo).Error; err != nil { | ||||||
|  | 		t.Errorf("Failed to update date, got error %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := DB.First(&result, "id = ?", yasuo.ID).Error; err != nil || yasuo.Name != "jinzhu1" { | ||||||
|  | 		t.Errorf("No error should happen, but got %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestPostgres(t *testing.T) { | func TestPostgres(t *testing.T) { | ||||||
| 	if DB.Dialector.Name() != "postgres" { | 	if DB.Dialector.Name() != "postgres" { | ||||||
| 		t.Skip() | 		t.Skip() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Nguyen Huu Tuan
						Nguyen Huu Tuan