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  }