github.com/goravel/framework@v1.13.9/database/console/migrate_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 consolemock "github.com/goravel/framework/contracts/console/mocks" 11 ormcontract "github.com/goravel/framework/contracts/database/orm" 12 "github.com/goravel/framework/database/gorm" 13 "github.com/goravel/framework/database/orm" 14 "github.com/goravel/framework/support/file" 15 ) 16 17 type Agent struct { 18 orm.Model 19 Name string 20 } 21 22 func TestMigrateCommand(t *testing.T) { 23 if testing.Short() { 24 t.Skip("Skipping tests of using docker") 25 } 26 27 var ( 28 mockConfig *configmock.Config 29 pool *dockertest.Pool 30 resource *dockertest.Resource 31 query ormcontract.Query 32 ) 33 34 beforeEach := func() { 35 pool = nil 36 mockConfig = &configmock.Config{} 37 } 38 39 tests := []struct { 40 name string 41 setup func() 42 }{ 43 { 44 name: "mysql", 45 setup: func() { 46 var err error 47 docker := gorm.NewMysqlDocker() 48 pool, resource, query, err = docker.New() 49 assert.Nil(t, err) 50 mockConfig = docker.MockConfig 51 createMysqlMigrations() 52 }, 53 }, 54 { 55 name: "postgresql", 56 setup: func() { 57 var err error 58 docker := gorm.NewPostgresqlDocker() 59 pool, resource, query, err = docker.New() 60 assert.Nil(t, err) 61 mockConfig = docker.MockConfig 62 createPostgresqlMigrations() 63 }, 64 }, 65 { 66 name: "sqlserver", 67 setup: func() { 68 var err error 69 docker := gorm.NewSqlserverDocker() 70 pool, resource, query, err = docker.New() 71 assert.Nil(t, err) 72 mockConfig = docker.MockConfig 73 createSqlserverMigrations() 74 }, 75 }, 76 { 77 name: "sqlite", 78 setup: func() { 79 var err error 80 docker := gorm.NewSqliteDocker("goravel") 81 _, _, query, err = docker.New() 82 assert.Nil(t, err) 83 mockConfig = docker.MockConfig 84 createSqliteMigrations() 85 }, 86 }, 87 } 88 89 for _, test := range tests { 90 t.Run(test.name, func(t *testing.T) { 91 beforeEach() 92 test.setup() 93 94 migrateCommand := NewMigrateCommand(mockConfig) 95 mockContext := &consolemock.Context{} 96 assert.Nil(t, migrateCommand.Handle(mockContext)) 97 98 var agent Agent 99 assert.Nil(t, query.Where("name", "goravel").First(&agent)) 100 assert.True(t, agent.ID > 0) 101 102 if pool != nil { 103 assert.Nil(t, pool.Purge(resource)) 104 } 105 106 removeMigrations() 107 }) 108 } 109 } 110 111 func createMysqlMigrations() { 112 _ = file.Create("database/migrations/20230311160527_create_agents_table.up.sql", 113 `CREATE TABLE agents ( 114 id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 115 name varchar(255) NOT NULL, 116 created_at datetime(3) NOT NULL, 117 updated_at datetime(3) NOT NULL, 118 PRIMARY KEY (id), 119 KEY idx_agents_created_at (created_at), 120 KEY idx_agents_updated_at (updated_at) 121 ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; 122 INSERT INTO agents (name, created_at, updated_at) VALUES ('goravel', '2023-03-11 16:07:41', '2023-03-11 16:07:45'); 123 `) 124 _ = file.Create("database/migrations/20230311160527_create_agents_table.down.sql", 125 `DROP TABLE agents; 126 `) 127 } 128 129 func createPostgresqlMigrations() { 130 _ = file.Create("database/migrations/20230311160527_create_agents_table.up.sql", 131 `CREATE TABLE agents ( 132 id SERIAL PRIMARY KEY NOT NULL, 133 name varchar(255) NOT NULL, 134 created_at timestamp NOT NULL, 135 updated_at timestamp NOT NULL 136 ); 137 INSERT INTO agents (name, created_at, updated_at) VALUES ('goravel', '2023-03-11 16:07:41', '2023-03-11 16:07:45'); 138 `) 139 _ = file.Create("database/migrations/20230311160527_create_agents_table.down.sql", 140 `DROP TABLE agents; 141 `) 142 } 143 144 func createSqlserverMigrations() { 145 _ = file.Create("database/migrations/20230311160527_create_agents_table.up.sql", 146 `CREATE TABLE agents ( 147 id bigint NOT NULL IDENTITY(1,1), 148 name varchar(255) NOT NULL, 149 created_at datetime NOT NULL, 150 updated_at datetime NOT NULL, 151 PRIMARY KEY (id) 152 ); 153 INSERT INTO agents (name, created_at, updated_at) VALUES ('goravel', '2023-03-11 16:07:41', '2023-03-11 16:07:45'); 154 `) 155 _ = file.Create("database/migrations/20230311160527_create_agents_table.down.sql", 156 `DROP TABLE agents; 157 `) 158 } 159 160 func createSqliteMigrations() { 161 _ = file.Create("database/migrations/20230311160527_create_agents_table.up.sql", 162 `CREATE TABLE agents ( 163 id integer PRIMARY KEY AUTOINCREMENT NOT NULL, 164 name varchar(255) NOT NULL, 165 created_at datetime NOT NULL, 166 updated_at datetime NOT NULL 167 ); 168 INSERT INTO agents (name, created_at, updated_at) VALUES ('goravel', '2023-03-11 16:07:41', '2023-03-11 16:07:45'); 169 `) 170 _ = file.Create("database/migrations/20230311160527_create_agents_table.down.sql", 171 `DROP TABLE agents; 172 `) 173 } 174 175 func removeMigrations() { 176 _ = file.Remove("database") 177 _ = file.Remove("goravel") 178 }