Explorar el Código

session queries

sunguroku hace 5 años
padre
commit
8a77b3f37e
Se han modificado 2 ficheros con 156 adiciones y 0 borrados
  1. 51 0
      internal/queries/session/session.go
  2. 105 0
      internal/queries/session/session_test.go

+ 51 - 0
internal/queries/session/session.go

@@ -0,0 +1,51 @@
+package session
+
+import (
+	"github.com/porter-dev/porter/internal/models"
+	"gorm.io/gorm"
+)
+
+// Repository for testing. Potential TODO: swap out actual functional calls to point to repoitory.
+type Repository interface {
+	CreateSession(db *gorm.DB, session *models.Session) (*models.Session, error)
+	UpdateSession(db *gorm.DB, session *models.Session) (*models.Session, error)
+	DeleteSession(db *gorm.DB, session *models.Session) (*models.Session, error)
+	SelectSession(db *gorm.DB, session *models.Session) (*models.Session, error)
+}
+
+// CreateSession must take in Key, Data, and ExpiresAt as arguments.
+func CreateSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
+	// TODO: check for duplicate and return error
+	if err := db.Create(session).Error; err != nil {
+		return nil, err
+	}
+	return session, nil
+}
+
+// UpdateSession updates only the Data field using Key as selector.
+func UpdateSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
+	if err := db.Model(session).Where("Key = ?", session.Key).Updates(session).Error; err != nil {
+		return nil, err
+	}
+	return session, nil
+}
+
+// DeleteSession deletes a session by Key
+func DeleteSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
+
+	if err := db.Where("Key = ?", session.Key).Delete(session).Error; err != nil {
+		return nil, err
+	}
+
+	return session, nil
+}
+
+// SelectSession returns a session with matching key
+func SelectSession(db *gorm.DB, session *models.Session) (*models.Session, error) {
+
+	if err := db.Where("Key = ?", session.Key).First(session).Error; err != nil {
+		return nil, err
+	}
+
+	return session, nil
+}

+ 105 - 0
internal/queries/session/session_test.go

@@ -0,0 +1,105 @@
+package session
+
+import (
+	"database/sql"
+	"regexp"
+	"testing"
+	"time"
+
+	"github.com/DATA-DOG/go-sqlmock"
+	"github.com/porter-dev/porter/internal/models"
+	"github.com/stretchr/testify/require"
+	"github.com/stretchr/testify/suite"
+
+	"github.com/jinzhu/gorm"
+)
+
+type Suite struct {
+	suite.Suite
+	DB   *gorm.DB
+	mock sqlmock.Sqlmock
+
+	repository Repository
+	session    *models.Session
+}
+
+func (s *Suite) SetupSuite() {
+	var (
+		db  *sql.DB
+		err error
+	)
+
+	db, s.mock, err = sqlmock.New()
+	require.NoError(s.T(), err)
+
+	s.DB, err = gorm.Open("postgres", db)
+	require.NoError(s.T(), err)
+
+	s.DB.LogMode(true)
+
+	// s.repository = CreateRepository(s.DB)
+}
+
+func (s *Suite) AfterTest(_, _ string) {
+	require.NoError(s.T(), s.mock.ExpectationsWereMet())
+}
+
+func TestInit(t *testing.T) {
+	suite.Run(t, new(Suite))
+}
+
+func (s *Suite) TestShouldCreateNewSession(t *testing.T) {
+	var (
+		key       = "onekey"
+		data      = []byte("onedata")
+		expiresAt = time.Now()
+	)
+
+	s.mock.ExpectQuery(regexp.QuoteMeta(
+		`INSERT INTO "sessions" ("key","data","expires_at") 
+			VALUES ($1,$2, $3) RETURNING "key"."data"."expires_at`)).
+		WithArgs(key, data, expiresAt).
+		WillReturnRows(
+			sqlmock.NewRows([]string{"key"}).AddRow(key))
+
+	// db.AutoMigrate(&models.Session{})
+	// defer db.Close()
+
+	// test function
+	_, err := CreateSession(s.DB, &models.Session{Key: key, Data: data, ExpiresAt: expiresAt})
+	require.NoError(s.T(), err)
+	// db.Migrator().DropTable(&models.Session{})
+}
+
+// func TestShouldUpdateSessionByKey(t *testing.T) {
+// 	db, _ := dbConn.New()
+// 	// db.AutoMigrate(&models.Session{})
+// 	// defer db.Close()
+
+// 	// test function
+// 	UpdateSession(db, &models.Session{Key: "hia", Data: []byte("pls"), ExpiresAt: time.Now()})
+
+// 	// db.Migrator().DropTable(&models.Session{})
+// }
+
+// func TestShouldDeleteSessionByKey(t *testing.T) {
+// 	db, _ := dbConn.New()
+// 	// db.AutoMigrate(&models.Session{})
+// 	// defer db.Close()
+
+// 	// test function
+// 	DeleteSession(db, &models.Session{Key: "hia"})
+
+// 	// db.Migrator().DropTable(&models.Session{})
+// }
+
+// func TestShoudSelectSessionByKey(t *testing.T) {
+// 	db, _ := dbConn.New()
+// 	// db.AutoMigrate(&models.Session{})
+// 	// defer db.Close()
+
+// 	// test function
+// 	SelectSession(db, &models.Session{Key: "hi"})
+
+// 	// db.Migrator().DropTable(&models.Session{})
+// }