github.com/goravel/framework@v1.13.9/database/console/migrate_status_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 TestMigrateStatusCommand(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  		{
    49  			name: "postgresql",
    50  			setup: func() {
    51  				var err error
    52  				docker := gorm.NewPostgresqlDocker()
    53  				pool, resource, query, err = docker.New()
    54  				assert.Nil(t, err)
    55  				mockConfig = docker.MockConfig
    56  				createPostgresqlMigrations()
    57  			},
    58  		},
    59  		{
    60  			name: "sqlserver",
    61  			setup: func() {
    62  				var err error
    63  				docker := gorm.NewSqlserverDocker()
    64  				pool, resource, query, err = docker.New()
    65  				assert.Nil(t, err)
    66  				mockConfig = docker.MockConfig
    67  				createSqlserverMigrations()
    68  			},
    69  		},
    70  		{
    71  			name: "sqlite",
    72  			setup: func() {
    73  				var err error
    74  				docker := gorm.NewSqliteDocker("goravel")
    75  				pool, resource, query, err = docker.New()
    76  				assert.Nil(t, err)
    77  				mockConfig = docker.MockConfig
    78  				createSqliteMigrations()
    79  			},
    80  		},
    81  	}
    82  
    83  	for _, test := range tests {
    84  		t.Run(test.name, func(t *testing.T) {
    85  			beforeEach()
    86  			test.setup()
    87  
    88  			mockContext := &consolemocks.Context{}
    89  
    90  			migrateCommand := NewMigrateCommand(mockConfig)
    91  			assert.Nil(t, migrateCommand.Handle(mockContext))
    92  
    93  			migrateStatusCommand := NewMigrateStatusCommand(mockConfig)
    94  			assert.Nil(t, migrateStatusCommand.Handle(mockContext))
    95  
    96  			res, err := query.Table("migrations").Where("dirty", false).Update("dirty", true)
    97  			assert.Nil(t, err)
    98  			assert.Equal(t, int64(1), res.RowsAffected)
    99  
   100  			assert.Nil(t, migrateStatusCommand.Handle(mockContext))
   101  
   102  			if pool != nil && test.name != "sqlite" {
   103  				assert.Nil(t, pool.Purge(resource))
   104  			}
   105  
   106  			removeMigrations()
   107  		})
   108  	}
   109  }