github.com/goravel/framework@v1.13.9/database/console/migrate_refresh_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 TestMigrateRefreshCommand(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 mockArtisan := &consolemocks.Artisan{} 88 mockContext := &consolemocks.Context{} 89 mockContext.On("Option", "step").Return("").Once() 90 91 migrateCommand := NewMigrateCommand(mockConfig) 92 assert.Nil(t, migrateCommand.Handle(mockContext)) 93 94 // Test MigrateRefreshCommand without --seed flag 95 mockContext.On("OptionBool", "seed").Return(false).Once() 96 migrateRefreshCommand := NewMigrateRefreshCommand(mockConfig, mockArtisan) 97 assert.Nil(t, migrateRefreshCommand.Handle(mockContext)) 98 99 var agent Agent 100 err := query.Where("name", "goravel").First(&agent) 101 assert.Nil(t, err) 102 assert.True(t, agent.ID > 0) 103 104 mockArtisan = &consolemocks.Artisan{} 105 mockContext = &consolemocks.Context{} 106 mockContext.On("Option", "step").Return("5").Once() 107 108 migrateCommand = NewMigrateCommand(mockConfig) 109 assert.Nil(t, migrateCommand.Handle(mockContext)) 110 111 // Test MigrateRefreshCommand with --seed flag and --seeder specified 112 mockContext.On("OptionBool", "seed").Return(true).Once() 113 mockContext.On("OptionSlice", "seeder").Return([]string{"UserSeeder"}).Once() 114 mockArtisan.On("Call", "db:seed --seeder UserSeeder").Return(nil).Once() 115 migrateRefreshCommand = NewMigrateRefreshCommand(mockConfig, mockArtisan) 116 assert.Nil(t, migrateRefreshCommand.Handle(mockContext)) 117 118 mockArtisan = &consolemocks.Artisan{} 119 mockContext = &consolemocks.Context{} 120 121 // Test MigrateRefreshCommand with --seed flag and no --seeder specified 122 mockContext.On("Option", "step").Return("").Once() 123 mockContext.On("OptionBool", "seed").Return(true).Once() 124 mockContext.On("OptionSlice", "seeder").Return([]string{}).Once() 125 mockArtisan.On("Call", "db:seed").Return(nil).Once() 126 migrateRefreshCommand = NewMigrateRefreshCommand(mockConfig, mockArtisan) 127 assert.Nil(t, migrateRefreshCommand.Handle(mockContext)) 128 129 var agent1 Agent 130 err = query.Where("name", "goravel").First(&agent1) 131 assert.Nil(t, err) 132 assert.True(t, agent1.ID > 0) 133 134 if pool != nil && test.name != "sqlite" { 135 assert.Nil(t, pool.Purge(resource)) 136 } 137 138 mockContext.AssertExpectations(t) 139 removeMigrations() 140 }) 141 } 142 }