diff --git a/schema/relationship_test.go b/schema/relationship_test.go index cb616fc0..afa103b3 100644 --- a/schema/relationship_test.go +++ b/schema/relationship_test.go @@ -93,6 +93,21 @@ func TestBelongsToWithOnlyReferences2(t *testing.T) { }) } +func TestSelfReferentialBelongsTo(t *testing.T) { + type User struct { + ID int32 `gorm:"primaryKey"` + Name string + CreatorID *int32 + Creator *User + } + + checkStructRelation(t, &User{}, Relation{ + Name: "Creator", Type: schema.BelongsTo, Schema: "User", FieldSchema: "User", + References: []Reference{{"ID", "User", "CreatorID", "User", "", false}}, + }) + +} + func TestSelfReferentialBelongsToOverrideReferences(t *testing.T) { type User struct { ID int32 `gorm:"primaryKey"` diff --git a/tests/migrate_test.go b/tests/migrate_test.go index 0354e84e..993efda1 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -54,6 +54,27 @@ func TestMigrate(t *testing.T) { } } +func TestAutoMigrateSelfReferential(t *testing.T) { + type MigratePerson struct { + ID uint + Name string + ManagerID *uint + Manager *MigratePerson + } + + if err := DB.Debug().Migrator().DropTable(&MigratePerson{}); err != nil { + t.Fatalf("Failed to drop table, got error %v", err) + } + + if err := DB.AutoMigrate(&MigratePerson{}); err != nil { + t.Fatalf("Failed to auto migrate, but got error %v", err) + } + + if !DB.Migrator().HasConstraint("migrate_people", "fk_migrate_people_manager") { + t.Fatalf("Failed to find has one constraint between people and managers") + } +} + func TestSmartMigrateColumn(t *testing.T) { fullSupported := map[string]bool{"mysql": true, "postgres": true}[DB.Dialector.Name()]