auth/internal/session/repository/sqlite3/sqlite3_session_test.go

128 lines
2.7 KiB
Go

package sqlite3_test
import (
"context"
"regexp"
"testing"
"github.com/DATA-DOG/go-sqlmock"
"source.toby3d.me/toby3d/auth/internal/domain"
repository "source.toby3d.me/toby3d/auth/internal/session/repository/sqlite3"
"source.toby3d.me/toby3d/auth/internal/testing/sqltest"
)
//nolint: gochecknoglobals // slices cannot be contants
var tableColumns = []string{"created_at", "code", "data"}
func TestCreate(t *testing.T) {
t.Parallel()
session := domain.TestSession(t)
session.Profile = nil
model, err := repository.NewSession(session)
if err != nil {
t.Fatal(err)
}
db, mock, cleanup := sqltest.Open(t)
t.Cleanup(cleanup)
createTable(t, mock)
mock.ExpectExec(regexp.QuoteMeta(`INSERT INTO sessions`)).
WithArgs(
sqltest.Time{},
model.Code,
model.Data,
).
WillReturnResult(sqlmock.NewResult(1, 1))
if err := repository.NewSQLite3SessionRepository(db).
Create(context.Background(), *session); err != nil {
t.Error(err)
}
}
func TestGet(t *testing.T) {
t.Parallel()
session := domain.TestSession(t)
session.Profile = nil
model, err := repository.NewSession(session)
if err != nil {
t.Fatal(err)
}
db, mock, cleanup := sqltest.Open(t)
t.Cleanup(cleanup)
createTable(t, mock)
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM sessions`)).
WithArgs(session.Code).
WillReturnRows(sqlmock.NewRows(tableColumns).
AddRow(
model.CreatedAt.Time,
model.Code,
model.Data,
))
result, err := repository.NewSQLite3SessionRepository(db).
Get(context.Background(), session.Code)
if err != nil {
t.Fatal(err)
}
if result.Code != session.Code {
t.Errorf("Get(%s) = %+v, want %+v", session.Code, result, session)
}
}
func TestGetAndDelete(t *testing.T) {
t.Parallel()
session := domain.TestSession(t)
session.Profile = nil
model, err := repository.NewSession(session)
if err != nil {
t.Fatal(err)
}
db, mock, cleanup := sqltest.Open(t)
t.Cleanup(cleanup)
createTable(t, mock)
mock.ExpectBegin()
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM sessions`)).
WithArgs(session.Code).
WillReturnRows(sqlmock.NewRows(tableColumns).
AddRow(
model.CreatedAt.Time,
model.Code,
model.Data,
))
mock.ExpectExec(regexp.QuoteMeta(`DELETE FROM sessions`)).
WithArgs(model.Code).
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
result, err := repository.NewSQLite3SessionRepository(db).
GetAndDelete(context.Background(), session.Code)
if err != nil {
t.Fatal(err)
}
if result.Code != session.Code {
t.Errorf("GetAndDelete(%s) = %+v, want %+v", session.Code, result, session)
}
}
func createTable(tb testing.TB, mock sqlmock.Sqlmock) {
tb.Helper()
mock.ExpectExec(regexp.QuoteMeta(repository.QueryTable)).
WillReturnResult(sqlmock.NewResult(1, 1))
}