github.com/goravel/framework@v1.13.9/database/gorm/dialector_test.go (about) 1 package gorm 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/glebarez/sqlite" 8 "github.com/stretchr/testify/suite" 9 "gorm.io/driver/mysql" 10 "gorm.io/driver/postgres" 11 "gorm.io/driver/sqlserver" 12 13 configmock "github.com/goravel/framework/contracts/config/mocks" 14 databasecontract "github.com/goravel/framework/contracts/database" 15 "github.com/goravel/framework/contracts/database/orm" 16 ) 17 18 type DialectorTestSuite struct { 19 suite.Suite 20 mockConfig *configmock.Config 21 config databasecontract.Config 22 } 23 24 func TestDialectorTestSuite(t *testing.T) { 25 suite.Run(t, &DialectorTestSuite{ 26 config: databasecontract.Config{ 27 Host: "localhost", 28 Port: 3306, 29 Database: "forge", 30 Username: "root", 31 Password: "123123", 32 }, 33 }) 34 } 35 36 func (s *DialectorTestSuite) SetupTest() { 37 s.mockConfig = &configmock.Config{} 38 } 39 40 func (s *DialectorTestSuite) TestMysql() { 41 dialector := NewDialectorImpl(s.mockConfig, orm.DriverMysql.String()) 42 s.mockConfig.On("GetString", "database.connections.mysql.driver"). 43 Return(orm.DriverMysql.String()).Once() 44 s.mockConfig.On("GetString", "database.connections.mysql.charset"). 45 Return("utf8mb4").Once() 46 s.mockConfig.On("GetString", "database.connections.mysql.loc"). 47 Return("Local").Once() 48 dialectors, err := dialector.Make([]databasecontract.Config{s.config}) 49 s.Equal(mysql.New(mysql.Config{ 50 DSN: fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=%t&loc=%s&multiStatements=true", 51 s.config.Username, s.config.Password, s.config.Host, s.config.Port, s.config.Database, "utf8mb4", true, "Local"), 52 }), dialectors[0]) 53 s.Nil(err) 54 } 55 56 func (s *DialectorTestSuite) TestPostgresql() { 57 dialector := NewDialectorImpl(s.mockConfig, orm.DriverPostgresql.String()) 58 s.mockConfig.On("GetString", "database.connections.postgresql.driver"). 59 Return(orm.DriverPostgresql.String()).Once() 60 s.mockConfig.On("GetString", "database.connections.postgresql.sslmode"). 61 Return("disable").Once() 62 s.mockConfig.On("GetString", "database.connections.postgresql.timezone"). 63 Return("UTC").Once() 64 dialectors, err := dialector.Make([]databasecontract.Config{s.config}) 65 s.Equal(postgres.New(postgres.Config{ 66 DSN: fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s&timezone=%s", 67 s.config.Username, s.config.Password, s.config.Host, s.config.Port, s.config.Database, "disable", "UTC"), 68 }), dialectors[0]) 69 s.Nil(err) 70 } 71 72 func (s *DialectorTestSuite) TestSqlite() { 73 dialector := NewDialectorImpl(s.mockConfig, orm.DriverSqlite.String()) 74 s.mockConfig.On("GetString", "database.connections.sqlite.driver"). 75 Return(orm.DriverSqlite.String()).Once() 76 dialectors, err := dialector.Make([]databasecontract.Config{s.config}) 77 s.Equal(sqlite.Open(fmt.Sprintf("%s?multi_stmts=true", s.config.Database)), dialectors[0]) 78 s.Nil(err) 79 } 80 81 func (s *DialectorTestSuite) TestSqlserver() { 82 dialector := NewDialectorImpl(s.mockConfig, orm.DriverSqlserver.String()) 83 s.mockConfig.On("GetString", "database.connections.sqlserver.driver"). 84 Return(orm.DriverSqlserver.String()).Once() 85 s.mockConfig.On("GetString", "database.connections.sqlserver.charset"). 86 Return("utf8mb4").Once() 87 dialectors, err := dialector.Make([]databasecontract.Config{s.config}) 88 s.Equal(sqlserver.New(sqlserver.Config{ 89 DSN: fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s&charset=%s&MultipleActiveResultSets=true", 90 s.config.Username, s.config.Password, s.config.Host, s.config.Port, s.config.Database, "utf8mb4"), 91 }), dialectors[0]) 92 s.Nil(err) 93 }