Skip to content

Commit

Permalink
test: Redo tests for the Truncate function to achieve full coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
Dobefu committed Jan 19, 2025
1 parent 0b91942 commit 6c8f7d8
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 16 deletions.
108 changes: 92 additions & 16 deletions cmd/database/query/truncate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,107 @@ import (
"os"
"testing"

"github.com/DATA-DOG/go-sqlmock"
"github.com/Dobefu/csb/cmd/database"
"github.com/Dobefu/csb/cmd/init_env"
"github.com/Dobefu/csb/cmd/logger"
"github.com/stretchr/testify/assert"
)

func TestTruncate(t *testing.T) {
var err error
func setupTest(t *testing.T, dbType string) (*sqlmock.Sqlmock, func()) {
originalDBType := os.Getenv("DB_TYPE")
os.Setenv("DB_TYPE", dbType)

init_env.Main("../../../.env.test")
err = database.Connect()
assert.Equal(t, nil, err)
db, mock, err := sqlmock.New()

err = resetDb()
assert.Equal(t, nil, err)
if err != nil {
t.Fatalf("An error '%s' was not expected when opening a stub database connection", err)
}

err = Truncate("state")
assert.Equal(t, nil, err)
database.DB = db

dbType := os.Getenv("DB_TYPE")
os.Setenv("DB_TYPE", "bogus")
logger.SetExitOnFatal(false)
return &mock, func() {
db.Close()
os.Setenv("DB_TYPE", originalDBType)
}
}

err = Truncate("state")
assert.Equal(t, nil, err)
func TestTruncateMysql(t *testing.T) {
mock, cleanup := setupTest(t, "mysql")
defer cleanup()

os.Setenv("DB_TYPE", dbType)
(*mock).ExpectExec("TRUNCATE users").WillReturnResult(sqlmock.NewResult(0, 0))

err := Truncate("users")
assert.NoError(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncateMysqlError(t *testing.T) {
mock, cleanup := setupTest(t, "mysql")
defer cleanup()

(*mock).ExpectExec("TRUNCATE users").WillReturnError(sqlmock.ErrCancelled)

err := Truncate("users")
assert.Error(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncateSqlite3(t *testing.T) {
mock, cleanup := setupTest(t, "sqlite3")
defer cleanup()

(*mock).ExpectExec("DELETE FROM products").WillReturnResult(sqlmock.NewResult(0, 0))

err := Truncate("products")
assert.NoError(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncateSqlite3Error(t *testing.T) {
mock, cleanup := setupTest(t, "sqlite3")
defer cleanup()

(*mock).ExpectExec("DELETE FROM products").WillReturnError(sqlmock.ErrCancelled)

err := Truncate("products")
assert.Error(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncatePostgres(t *testing.T) {
mock, cleanup := setupTest(t, "postgres")
defer cleanup()

(*mock).ExpectExec("TRUNCATE orders").WillReturnResult(sqlmock.NewResult(0, 0))

err := Truncate("orders")
assert.NoError(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncatePostgresError(t *testing.T) {
mock, cleanup := setupTest(t, "postgres")
defer cleanup()

(*mock).ExpectExec("TRUNCATE orders").WillReturnError(sqlmock.ErrCancelled)

err := Truncate("orders")
assert.Error(t, err)

assert.NoError(t, (*mock).ExpectationsWereMet())
}

func TestTruncateUnsupportedDB(t *testing.T) {
logger.SetExitOnFatal(false)
_, cleanup := setupTest(t, "unsupported")
defer cleanup()

err := Truncate("test")
assert.NoError(t, err)
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/Dobefu/csb
go 1.23.0

require (
github.com/DATA-DOG/go-sqlmock v1.5.2
github.com/go-sql-driver/mysql v1.8.1
github.com/joho/godotenv v1.5.1
github.com/lib/pq v1.10.9
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
Expand Down

0 comments on commit 6c8f7d8

Please sign in to comment.