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  }