151 lines
3.8 KiB
Go
151 lines
3.8 KiB
Go
package store_test
|
|
|
|
import (
|
|
"fmt"
|
|
"gitea.deepak.science/deepak/gogmagog/models"
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestSelectUserByUsername(t *testing.T) {
|
|
// set up test
|
|
assert := assert.New(t)
|
|
|
|
id := 1
|
|
username := "test"
|
|
displayName := "Tom Est"
|
|
password := []byte("ABC€")
|
|
|
|
str, mock := getDbMock(t)
|
|
|
|
rows := sqlmock.NewRows([]string{
|
|
"user_id",
|
|
"username",
|
|
"display_name",
|
|
"password",
|
|
}).
|
|
AddRow(id, username, displayName, password)
|
|
|
|
mock.ExpectQuery(`^SELECT user_id, username, display_name, password FROM users WHERE username = \$1`).
|
|
WithArgs(username).
|
|
WillReturnRows(rows)
|
|
|
|
// function under test
|
|
user, err := str.SelectUserByUsername(username)
|
|
|
|
// test results
|
|
assert.Nil(err)
|
|
assert.EqualValues(id, user.UserID)
|
|
assert.Equal(username, user.Username)
|
|
assert.Equal(displayName, user.DisplayName)
|
|
assert.Equal(password, user.Password)
|
|
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("unfulfilled expectations: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestErrUserByID(t *testing.T) {
|
|
assert := assert.New(t)
|
|
|
|
str, mock := getDbMock(t)
|
|
username := "snth"
|
|
mock.ExpectQuery(`^SELECT user_id, username, display_name, password FROM users WHERE username = \$1`).WithArgs(username).WillReturnError(fmt.Errorf("example error"))
|
|
|
|
user, err := str.SelectUserByUsername(username)
|
|
assert.NotNil(err)
|
|
assert.Nil(user)
|
|
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("unfulfilled expectations: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestInsertUser(t *testing.T) {
|
|
// setup
|
|
assert := assert.New(t)
|
|
|
|
str, mock := getDbMock(t)
|
|
username := "test"
|
|
displayName := "Tom Est"
|
|
password := []byte("ABC€")
|
|
usr := &models.User{Username: username, DisplayName: displayName, Password: password}
|
|
|
|
idToUse := 8
|
|
|
|
rows := sqlmock.NewRows([]string{"user_id"}).AddRow(8)
|
|
|
|
mock.ExpectBegin()
|
|
mock.ExpectQuery(`^INSERT INTO users \(username, display_name, password\) VALUES \(\$1, \$2, \$3\) RETURNING user_id$`).
|
|
WithArgs(username, displayName, password).
|
|
WillReturnRows(rows)
|
|
mock.ExpectCommit()
|
|
|
|
// function under test
|
|
insertedId, err := str.InsertUser(usr)
|
|
// check results
|
|
assert.Nil(err)
|
|
assert.EqualValues(idToUse, insertedId)
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("unfulfilled expectations: %s", err)
|
|
}
|
|
|
|
}
|
|
|
|
func TestInsertUserErr(t *testing.T) {
|
|
// setup
|
|
assert := assert.New(t)
|
|
|
|
str, mock := getDbMock(t)
|
|
username := "test"
|
|
displayName := "Tom Est"
|
|
password := []byte("ABC€")
|
|
usr := &models.User{Username: username, DisplayName: displayName, Password: password}
|
|
|
|
mock.ExpectBegin()
|
|
mock.ExpectQuery(`^INSERT INTO users \(username, display_name, password\) VALUES \(\$1, \$2, \$3\) RETURNING user_id$`).
|
|
WithArgs(username, displayName, password).
|
|
WillReturnError(fmt.Errorf("example error"))
|
|
mock.ExpectRollback()
|
|
|
|
// function under test
|
|
_, err := str.InsertUser(usr)
|
|
// check results
|
|
assert.NotNil(err)
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("unfulfilled expectations: %s", err)
|
|
}
|
|
|
|
}
|
|
|
|
func TestInsertUserCommitErr(t *testing.T) {
|
|
// setup
|
|
assert := assert.New(t)
|
|
|
|
str, mock := getDbMock(t)
|
|
username := "test"
|
|
displayName := "Tom Est"
|
|
password := []byte("ABC€")
|
|
usr := &models.User{Username: username, DisplayName: displayName, Password: password}
|
|
|
|
idToUse := 8
|
|
|
|
rows := sqlmock.NewRows([]string{"user_id"}).AddRow(idToUse)
|
|
|
|
mock.ExpectBegin()
|
|
mock.ExpectQuery(`^INSERT INTO users \(username, display_name, password\) VALUES \(\$1, \$2, \$3\) RETURNING user_id$`).
|
|
WithArgs(username, displayName, password).
|
|
WillReturnRows(rows)
|
|
mock.ExpectCommit().WillReturnError(fmt.Errorf("another error example"))
|
|
|
|
// function under test
|
|
_, err := str.InsertUser(usr)
|
|
// check results
|
|
assert.NotNil(err)
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Errorf("unfulfilled expectations: %s", err)
|
|
}
|
|
|
|
}
|