Skip to content

Instantly share code, notes, and snippets.

@alfiankan
Last active June 10, 2022 08:06
Show Gist options
  • Save alfiankan/8ed8edaa29b3f3bc052dcdf10ad4f4c5 to your computer and use it in GitHub Desktop.
Save alfiankan/8ed8edaa29b3f3bc052dcdf10ad4f4c5 to your computer and use it in GitHub Desktop.
package main
import (
"errors"
"log"
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/jmoiron/sqlx"
"github.com/stretchr/testify/assert"
)
func CreateUser(db *sqlx.DB, name, email string) (insertedID int64, err error) {
result, err := db.Exec("INSERT INTO users (name, email) VALUES (?,?)", name, email)
if err != nil {
return
}
insertedID, err = result.LastInsertId()
return
}
func TestMockDbCreateUser(t *testing.T) {
db, mock, err := sqlmock.New()
if err != nil {
log.Fatalln("error", err)
}
defer db.Close()
sqlxdb := sqlx.NewDb(db, "sqlite3")
if err != nil {
log.Fatalln(err)
}
t.Run("[+] positive while create user must be nill error and inserted id 140", func(t *testing.T) {
name := "joni"
email := "joni@gmail.com"
log.Println("start query")
mock.ExpectExec("INSERT INTO users").WithArgs(name, email).WillReturnResult(sqlmock.NewResult(140, 0))
id, err := CreateUser(sqlxdb, name, email)
assert.Equal(t, int64(140), id)
assert.Nil(t, err)
})
t.Run("[-] negative while create user must error", func(t *testing.T) {
name := "joni"
email := "joni@gmail.com"
log.Println("start query")
mock.ExpectExec("INSERT INTO users").WithArgs(name, email).WillReturnError(errors.New("INSERT USER ERROR"))
_, err := CreateUser(sqlxdb, name, email)
assert.Error(t, err)
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment