github.com/goravel/framework@v1.13.9/database/db/config_test.go (about) 1 package db 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/suite" 8 9 configmock "github.com/goravel/framework/contracts/config/mocks" 10 databasecontract "github.com/goravel/framework/contracts/database" 11 ) 12 13 type ConfigTestSuite struct { 14 suite.Suite 15 config *ConfigImpl 16 connection string 17 mockConfig *configmock.Config 18 } 19 20 func TestConfigTestSuite(t *testing.T) { 21 suite.Run(t, &ConfigTestSuite{ 22 connection: "mysql", 23 }) 24 } 25 26 func (s *ConfigTestSuite) SetupTest() { 27 s.mockConfig = &configmock.Config{} 28 s.config = NewConfigImpl(s.mockConfig, s.connection) 29 } 30 31 func (s *ConfigTestSuite) TestFillDefaultForConfigs() { 32 host := "localhost" 33 port := 3306 34 database := "forge" 35 username := "root" 36 password := "123123" 37 38 tests := []struct { 39 name string 40 configs []databasecontract.Config 41 setup func() 42 expectConfigs []databasecontract.Config 43 }{ 44 { 45 name: "success when configs is empty", 46 configs: []databasecontract.Config{}, 47 setup: func() { 48 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.driver", s.connection)).Return("mysql").Once() 49 }, 50 }, 51 { 52 name: "success when configs have item but key is empty", 53 configs: []databasecontract.Config{{}}, 54 setup: func() { 55 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.driver", s.connection)).Return("mysql").Once() 56 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.host", s.connection)).Return(host).Once() 57 s.mockConfig.On("GetInt", fmt.Sprintf("database.connections.%s.port", s.connection)).Return(port).Once() 58 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.database", s.connection)).Return(database).Once() 59 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.username", s.connection)).Return(username).Once() 60 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.password", s.connection)).Return(password).Once() 61 }, 62 expectConfigs: []databasecontract.Config{ 63 { 64 Host: host, 65 Port: port, 66 Database: database, 67 Username: username, 68 Password: password, 69 }, 70 }, 71 }, 72 { 73 name: "success when configs have item", 74 configs: []databasecontract.Config{ 75 { 76 Host: "localhost", 77 Port: 3306, 78 Database: "forge", 79 Username: "root", 80 Password: "123123", 81 }, 82 }, 83 setup: func() { 84 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.driver", s.connection)).Return("mysql").Once() 85 }, 86 expectConfigs: []databasecontract.Config{ 87 { 88 Host: "localhost", 89 Port: 3306, 90 Database: "forge", 91 Username: "root", 92 Password: "123123", 93 }, 94 }, 95 }, 96 { 97 name: "success when sqlite", 98 configs: []databasecontract.Config{ 99 { 100 Database: "forge", 101 }, 102 }, 103 setup: func() { 104 s.mockConfig.On("GetString", fmt.Sprintf("database.connections.%s.driver", s.connection)).Return("sqlite").Once() 105 }, 106 expectConfigs: []databasecontract.Config{ 107 { 108 Database: "forge", 109 }, 110 }, 111 }, 112 } 113 114 for _, test := range tests { 115 s.Run(test.name, func() { 116 test.setup() 117 configs := s.config.fillDefault(test.configs) 118 s.Equal(test.expectConfigs, configs) 119 s.mockConfig.AssertExpectations(s.T()) 120 }) 121 } 122 }