gorm/migration_test.go

99 lines
3.2 KiB
Go
Raw Normal View History

2014-07-29 06:59:13 +04:00
package gorm_test
import (
"fmt"
"testing"
2014-07-29 08:32:58 +04:00
"time"
2014-07-29 06:59:13 +04:00
)
func runMigration() {
2014-08-28 11:33:43 +04:00
if err := DB.DropTable(&User{}).Error; err != nil {
2014-07-29 06:59:13 +04:00
fmt.Printf("Got error when try to delete table users, %+v\n", err)
}
2014-08-28 11:33:43 +04:00
DB.Exec("drop table products;")
DB.Exec("drop table emails;")
DB.Exec("drop table addresses")
DB.Exec("drop table credit_cards")
DB.Exec("drop table roles")
DB.Exec("drop table companies")
DB.Exec("drop table animals")
DB.Exec("drop table user_languages")
DB.Exec("drop table languages")
if err := DB.CreateTable(&Animal{}).Error; err != nil {
2014-07-29 06:59:13 +04:00
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
}
2014-08-28 11:33:43 +04:00
if err := DB.CreateTable(User{}).Error; err != nil {
2014-07-29 06:59:13 +04:00
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
}
2014-08-28 14:25:05 +04:00
if err := DB.AutoMigrate(&Product{}, &Email{}, &Address{}, &CreditCard{}, &Company{}, &Role{}, &Language{}, &HNPost{}, &EngadgetPost{}).Error; err != nil {
2014-07-29 13:28:10 +04:00
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
}
2014-07-29 06:59:13 +04:00
}
func TestIndexes(t *testing.T) {
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).AddIndex("idx_email_email", "email").Error; err != nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Got error when tried to create index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).RemoveIndex("idx_email_email").Error; err != nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Got error when tried to remove index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).AddIndex("idx_email_email_and_user_id", "user_id", "email").Error; err != nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Got error when tried to create index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).RemoveIndex("idx_email_email_and_user_id").Error; err != nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Got error when tried to remove index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).AddUniqueIndex("idx_email_email_and_user_id", "user_id", "email").Error; err != nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Got error when tried to create index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if DB.Save(&User{Name: "unique_indexes", Emails: []Email{{Email: "user1@example.comiii"}, {Email: "user1@example.com"}, {Email: "user1@example.com"}}}).Error == nil {
2014-07-29 06:59:13 +04:00
t.Errorf("Should get to create duplicate record when having unique index")
}
2014-08-28 11:33:43 +04:00
if err := DB.Model(&Email{}).RemoveIndex("idx_email_email_and_user_id").Error; err != nil {
t.Errorf("Got error when tried to remove index: %+v", err)
}
2014-08-28 11:33:43 +04:00
if DB.Save(&User{Name: "unique_indexes", Emails: []Email{{Email: "user1@example.com"}, {Email: "user1@example.com"}}}).Error != nil {
t.Errorf("Should be able to create duplicated emails after remove unique index")
}
2014-07-29 06:59:13 +04:00
}
2014-07-29 08:32:58 +04:00
type BigEmail struct {
Id int64
UserId int64
Email string
UserAgent string
RegisteredAt time.Time
CreatedAt time.Time
UpdatedAt time.Time
}
func (b BigEmail) TableName() string {
return "emails"
}
func TestAutoMigration(t *testing.T) {
2014-08-28 11:33:43 +04:00
DB.AutoMigrate(Address{})
if err := DB.Table("emails").AutoMigrate(BigEmail{}).Error; err != nil {
2014-07-29 08:32:58 +04:00
t.Errorf("Auto Migrate should not raise any error")
}
2014-08-28 11:33:43 +04:00
DB.Save(&BigEmail{Email: "jinzhu@example.org", UserAgent: "pc", RegisteredAt: time.Now()})
2014-07-29 08:32:58 +04:00
var bigemail BigEmail
2014-08-28 11:33:43 +04:00
DB.First(&bigemail, "user_agent = ?", "pc")
2014-07-29 08:32:58 +04:00
if bigemail.Email != "jinzhu@example.org" || bigemail.UserAgent != "pc" || bigemail.RegisteredAt.IsZero() {
t.Error("Big Emails should be saved and fetched correctly")
}
}