Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update tests mod #846

Merged
merged 6 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions contracts/testing/testing.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ type DatabaseDriver interface {
}

type DatabaseConfig struct {
// TODO: Fill this field
Driver string
Host string
Port int
Database string
Expand Down
2 changes: 1 addition & 1 deletion tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ toolchain go1.23.4

require (
github.com/brianvoe/gofakeit/v7 v7.2.1
github.com/goravel/framework v1.15.2-0.20250202111117-cbb806d1e8de
github.com/goravel/framework v1.15.2-0.20250203035626-702075c1ceaa
github.com/goravel/mysql v0.0.0-20250202150522-4e41e0908557
github.com/goravel/postgres v0.0.2-0.20250202145044-bfeb31ead351
github.com/spf13/cast v1.7.1
Expand Down
4 changes: 2 additions & 2 deletions tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQ
github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
github.com/goravel/framework v1.15.2-0.20250202111117-cbb806d1e8de h1:U8dX7nxF+NeB7xgSeYiWMsgy76Qj2ngE79eg+JU6dNA=
github.com/goravel/framework v1.15.2-0.20250202111117-cbb806d1e8de/go.mod h1:2p1D3MvyV+Ft+iC627iQMxzjMDwHGckgy8B+EgtCbqA=
github.com/goravel/framework v1.15.2-0.20250203035626-702075c1ceaa h1:uk/uWhYlw3K0ywNkratMbL27x3vCafM3Qh61lJiyDy4=
github.com/goravel/framework v1.15.2-0.20250203035626-702075c1ceaa/go.mod h1:2p1D3MvyV+Ft+iC627iQMxzjMDwHGckgy8B+EgtCbqA=
github.com/goravel/mysql v0.0.0-20250202150522-4e41e0908557 h1:Fl0e/GHo3QYTBmujmkTPp7mq3n1/XbeVKhRoNzglKXQ=
github.com/goravel/mysql v0.0.0-20250202150522-4e41e0908557/go.mod h1:HFrQicxhe6TBgdibbyKObz5r2kcLhfTCWHF+1+Jov+I=
github.com/goravel/postgres v0.0.2-0.20250202145044-bfeb31ead351 h1:cLiyIr7CRlCMulsRtduNegBNV1IxEfVCSm38JfFjDh8=
Expand Down
77 changes: 50 additions & 27 deletions tests/migrator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
contractsmigration "github.com/goravel/framework/contracts/database/migration"
contractsschema "github.com/goravel/framework/contracts/database/schema"
"github.com/goravel/framework/database/migration"
"github.com/goravel/sqlite"
)

type DefaultMigratorWithDBSuite struct {
Expand All @@ -24,18 +25,23 @@ func TestDefaultMigratorWithDBSuite(t *testing.T) {
func (s *DefaultMigratorWithDBSuite) SetupTest() {
postgresTestQuery := postgresTestQuery("goravel_", true)
mysqlTestQuery := mysqlTestQuery("goravel_", true)
sqlserverTestQuery := sqlserverTestQuery("goravel_", true)
sqliteTestQuery := sqliteTestQuery("goravel_", true)

s.driverToTestQuery = map[string]*TestQuery{
postgresTestQuery.Driver().Config().Driver: postgresTestQuery,
mysqlTestQuery.Driver().Config().Driver: mysqlTestQuery,
postgresTestQuery.Driver().Config().Driver: postgresTestQuery,
mysqlTestQuery.Driver().Config().Driver: mysqlTestQuery,
sqlserverTestQuery.Driver().Config().Driver: sqlserverTestQuery,
sqliteTestQuery.Driver().Config().Driver: sqliteTestQuery,
}
}

func (s *DefaultMigratorWithDBSuite) TearDownTest() {
// TODO Shutdown Sqlite
// if s.driverToTestQuery[contractsdatabase.DriverSqlite] != nil {
// s.NoError(s.driverToTestQuery[contractsdatabase.DriverSqlite].Docker().Shutdown())
// }
if s.driverToTestQuery[sqlite.Name] != nil {
docker, err := s.driverToTestQuery[sqlite.Name].Driver().Docker()
s.NoError(err)
s.NoError(docker.Shutdown())
}
}

func (s *DefaultMigratorWithDBSuite) TestRun() {
Expand Down Expand Up @@ -144,29 +150,24 @@ func TestDefaultMigratorWithPostgresSchema(t *testing.T) {
assert.False(t, schema.HasTable("users"))
}

// func TestDefaultMigratorWithSqlserverSchema(t *testing.T) {
// if env.IsWindows() {
// t.Skip("Skip test that using Docker")
// }
func TestDefaultMigratorWithSqlserverSchema(t *testing.T) {
sqlserverTestQuery := sqlserverTestQuery("", false)
sqlserverTestQuery.WithSchema("goravel")

// sqlserverDocker := docker.Sqlserver()
// require.NoError(t, sqlserverDocker.Ready())

// sqlserverQuery := gorm.NewTestQueryWithSchema(sqlserverDocker, "goravel")
// schema := newSchema(sqlserverQuery, map[contractsdatabase.Driver]*gorm.TestQuery{
// contractsdatabase.DriverSqlserver: sqlserverQuery,
// })
// testMigration := NewTestMigrationWithSqlserverSchema(schema)
// schema.Register([]contractsschema.Migration{
// testMigration,
// })
// migrator := migration.NewMigrator(nil, schema, "migrations")
schema := newSchema(sqlserverTestQuery, map[string]*TestQuery{
sqlserverTestQuery.Driver().Config().Driver: sqlserverTestQuery,
})
testMigration := NewTestMigrationWithSqlserverSchema(schema)
schema.Register([]contractsschema.Migration{
testMigration,
})
migrator := migration.NewMigrator(nil, schema, "migrations")

// assert.NoError(t, migrator.Run())
// assert.True(t, schema.HasTable("goravel.users"))
// assert.NoError(t, migrator.Rollback(1, 0))
// assert.False(t, schema.HasTable("goravel.users"))
// }
assert.NoError(t, migrator.Run())
assert.True(t, schema.HasTable("goravel.users"))
assert.NoError(t, migrator.Rollback(1, 0))
assert.False(t, schema.HasTable("goravel.users"))
}

type TestMigration struct {
schema contractsschema.Schema
Expand All @@ -189,3 +190,25 @@ func (r *TestMigration) Up() error {
func (r *TestMigration) Down() error {
return r.schema.DropIfExists("users")
}

type TestMigrationWithSqlserverSchema struct {
schema contractsschema.Schema
}

func NewTestMigrationWithSqlserverSchema(schema contractsschema.Schema) *TestMigrationWithSqlserverSchema {
return &TestMigrationWithSqlserverSchema{schema: schema}
}

func (r *TestMigrationWithSqlserverSchema) Signature() string {
return "20240817214501_create_users_table"
}

func (r *TestMigrationWithSqlserverSchema) Up() error {
return r.schema.Create("goravel.users", func(table contractsschema.Blueprint) {
table.String("name")
})
}

func (r *TestMigrationWithSqlserverSchema) Down() error {
return r.schema.DropIfExists("goravel.users")
}
62 changes: 62 additions & 0 deletions tests/mock_config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package tests

import (
"fmt"

"github.com/goravel/framework/contracts/database"
"github.com/goravel/framework/contracts/database/driver"
mocksconfig "github.com/goravel/framework/mocks/config"
"github.com/goravel/framework/testing/utils"
"github.com/goravel/mysql"
"github.com/goravel/postgres"
"github.com/goravel/sqlite"
"github.com/goravel/sqlserver"
)

func mockDatabaseConfig(mockConfig *mocksconfig.Config, config database.Config, connection string, prefix string, singular bool) {
mockConfig.EXPECT().GetBool("app.debug").Return(true)
mockConfig.EXPECT().GetInt("database.slow_threshold", 200).Return(200)
mockConfig.EXPECT().GetInt("database.pool.max_idle_conns", 10).Return(10)
mockConfig.EXPECT().GetInt("database.pool.max_open_conns", 100).Return(100)
mockConfig.EXPECT().GetInt("database.pool.conn_max_idletime", 3600).Return(3600)
mockConfig.EXPECT().GetInt("database.pool.conn_max_lifetime", 3600).Return(3600)
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.write", connection)).Return(nil)
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.read", connection)).Return(nil)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.host", connection)).Return(config.Host)
mockConfig.EXPECT().GetInt(fmt.Sprintf("database.connections.%s.port", connection)).Return(config.Port)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.username", connection)).Return(config.Username)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.password", connection)).Return(config.Password)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.database", connection)).Return(config.Database)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.prefix", connection)).Return(prefix)
mockConfig.EXPECT().GetBool(fmt.Sprintf("database.connections.%s.singular", connection)).Return(singular)
mockConfig.EXPECT().GetBool(fmt.Sprintf("database.connections.%s.no_lower_case", connection)).Return(false)
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.dsn", connection)).Return("")
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.schema", connection), "public").Return("public")
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.name_replacer", connection)).Return(nil)

if config.Driver == postgres.Name {
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.sslmode", connection)).Return("disable")
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.timezone", connection)).Return("UTC")
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.via", connection)).Return(func() (driver.Driver, error) {
return postgres.NewPostgres(mockConfig, utils.NewTestLog(), connection), nil
})
}
if config.Driver == mysql.Name {
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.loc", connection)).Return("UTC")
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.charset", connection)).Return("utf8mb4")
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.via", connection)).Return(func() (driver.Driver, error) {
return mysql.NewMysql(mockConfig, utils.NewTestLog(), connection), nil
})
}
if config.Driver == sqlserver.Name {
mockConfig.EXPECT().GetString(fmt.Sprintf("database.connections.%s.charset", connection)).Return("utf8mb4")
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.via", connection)).Return(func() (driver.Driver, error) {
return sqlserver.NewSqlserver(mockConfig, utils.NewTestLog(), connection), nil
})
}
if config.Driver == sqlite.Name {
mockConfig.EXPECT().Get(fmt.Sprintf("database.connections.%s.via", connection)).Return(func() (driver.Driver, error) {
return sqlite.NewSqlite(mockConfig, utils.NewTestLog(), connection), nil
})
}
}
20 changes: 16 additions & 4 deletions tests/orm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

contractsorm "github.com/goravel/framework/contracts/database/orm"
"github.com/goravel/framework/database/orm"
"github.com/goravel/sqlite"
)

type OrmSuite struct {
Expand Down Expand Up @@ -36,6 +37,16 @@ func (s *OrmSuite) SetupSuite() {
mysqlTestQuery.CreateTable(TestTableRoles)
connection = mysqlTestQuery.Driver().Config().Connection
s.queries[connection] = mysqlTestQuery

sqlserverTestQuery := sqlserverTestQuery("", false)
sqlserverTestQuery.CreateTable(TestTableRoles)
connection = sqlserverTestQuery.Driver().Config().Connection
s.queries[connection] = sqlserverTestQuery

sqliteTestQuery := sqliteTestQuery("", false)
sqliteTestQuery.CreateTable(TestTableRoles)
connection = sqliteTestQuery.Driver().Config().Connection
s.queries[connection] = sqliteTestQuery
}

func (s *OrmSuite) SetupTest() {
Expand All @@ -49,10 +60,11 @@ func (s *OrmSuite) SetupTest() {
}

func (s *OrmSuite) TearDownSuite() {
// TODO Shutdown Sqlite
// if s.queries[database.DriverSqlite] != nil {
// s.NoError(s.queries[database.DriverSqlite].Docker().Shutdown())
// }
if s.queries[sqlite.Name] != nil {
docker, err := s.queries[sqlite.Name].Driver().Docker()
s.NoError(err)
s.NoError(docker.Shutdown())
}
}

func (s *OrmSuite) TestConnection() {
Expand Down
Loading
Loading