github.com/goravel/framework@v1.13.9/database/console/migrate_fresh_command_test.go (about) 1 package console 2 3 import ( 4 "testing" 5 6 "github.com/ory/dockertest/v3" 7 "github.com/stretchr/testify/assert" 8 9 configmock "github.com/goravel/framework/contracts/config/mocks" 10 consolemocks "github.com/goravel/framework/contracts/console/mocks" 11 ormcontract "github.com/goravel/framework/contracts/database/orm" 12 "github.com/goravel/framework/database/gorm" 13 ) 14 15 func TestMigrateFreshCommand(t *testing.T) { 16 if testing.Short() { 17 t.Skip("Skipping tests of using docker") 18 } 19 20 var ( 21 mockConfig *configmock.Config 22 pool *dockertest.Pool 23 resource *dockertest.Resource 24 query ormcontract.Query 25 ) 26 27 beforeEach := func() { 28 pool = nil 29 mockConfig = &configmock.Config{} 30 } 31 32 tests := []struct { 33 name string 34 setup func() 35 }{ 36 { 37 name: "mysql", 38 setup: func() { 39 var err error 40 docker := gorm.NewMysqlDocker() 41 pool, resource, query, err = docker.New() 42 assert.Nil(t, err) 43 mockConfig = docker.MockConfig 44 createMysqlMigrations() 45 }, 46 }, 47 { 48 name: "postgresql", 49 setup: func() { 50 var err error 51 docker := gorm.NewPostgresqlDocker() 52 pool, resource, query, err = docker.New() 53 assert.Nil(t, err) 54 mockConfig = docker.MockConfig 55 createPostgresqlMigrations() 56 }, 57 }, 58 { 59 name: "sqlserver", 60 setup: func() { 61 var err error 62 docker := gorm.NewSqlserverDocker() 63 pool, resource, query, err = docker.New() 64 assert.Nil(t, err) 65 mockConfig = docker.MockConfig 66 createSqlserverMigrations() 67 }, 68 }, 69 { 70 name: "sqlite", 71 setup: func() { 72 var err error 73 docker := gorm.NewSqliteDocker("goravel") 74 pool, resource, query, err = docker.New() 75 assert.Nil(t, err) 76 mockConfig = docker.MockConfig 77 createSqliteMigrations() 78 }, 79 }, 80 } 81 82 for _, test := range tests { 83 t.Run(test.name, func(t *testing.T) { 84 beforeEach() 85 test.setup() 86 87 mockContext := &consolemocks.Context{} 88 mockArtisan := &consolemocks.Artisan{} 89 migrateCommand := NewMigrateCommand(mockConfig) 90 assert.Nil(t, migrateCommand.Handle(mockContext)) 91 mockContext.On("OptionBool", "seed").Return(false).Once() 92 migrateFreshCommand := NewMigrateFreshCommand(mockConfig, mockArtisan) 93 assert.Nil(t, migrateFreshCommand.Handle(mockContext)) 94 95 var agent Agent 96 err := query.Where("name", "goravel").First(&agent) 97 assert.Nil(t, err) 98 assert.True(t, agent.ID > 0) 99 100 // Test MigrateFreshCommand with --seed flag and seeders specified 101 mockContext = &consolemocks.Context{} 102 mockArtisan = &consolemocks.Artisan{} 103 mockContext.On("OptionBool", "seed").Return(true).Once() 104 mockContext.On("OptionSlice", "seeder").Return([]string{"MockSeeder"}).Once() 105 mockArtisan.On("Call", "db:seed --seeder MockSeeder").Return(nil).Once() 106 migrateFreshCommand = NewMigrateFreshCommand(mockConfig, mockArtisan) 107 assert.Nil(t, migrateFreshCommand.Handle(mockContext)) 108 109 var agent1 Agent 110 err = query.Where("name", "goravel").First(&agent1) 111 assert.Nil(t, err) 112 assert.True(t, agent1.ID > 0) 113 114 // Test MigrateFreshCommand with --seed flag and no seeders specified 115 mockContext = &consolemocks.Context{} 116 mockArtisan = &consolemocks.Artisan{} 117 mockContext.On("OptionBool", "seed").Return(true).Once() 118 mockContext.On("OptionSlice", "seeder").Return([]string{}).Once() 119 mockArtisan.On("Call", "db:seed").Return(nil).Once() 120 migrateFreshCommand = NewMigrateFreshCommand(mockConfig, mockArtisan) 121 assert.Nil(t, migrateFreshCommand.Handle(mockContext)) 122 123 var agent2 Agent 124 err = query.Where("name", "goravel").First(&agent2) 125 assert.Nil(t, err) 126 assert.True(t, agent2.ID > 0) 127 128 if pool != nil && test.name != "sqlite" { 129 assert.Nil(t, pool.Purge(resource)) 130 } 131 132 removeMigrations() 133 }) 134 } 135 }