session_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package gorm
  2. import (
  3. "database/sql"
  4. "testing"
  5. "time"
  6. "gorm.io/driver/postgres"
  7. "github.com/DATA-DOG/go-sqlmock"
  8. "github.com/go-test/deep"
  9. "github.com/porter-dev/porter/internal/models"
  10. "github.com/porter-dev/porter/internal/repository"
  11. "github.com/stretchr/testify/require"
  12. "github.com/stretchr/testify/suite"
  13. "gorm.io/gorm"
  14. )
  15. type Suite struct {
  16. suite.Suite
  17. db *gorm.DB
  18. mock sqlmock.Sqlmock
  19. repo repository.SessionRepository
  20. session *models.Session
  21. }
  22. func (s *Suite) SetupSuite() {
  23. var (
  24. db *sql.DB
  25. err error
  26. )
  27. // TODO: make it work with gorm.io/gorm, currently only works with jinzhu/gorm (gorm V1)
  28. db, s.mock, err = sqlmock.New()
  29. // db, s.mock, err = sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherRegexp))
  30. require.NoError(s.T(), err)
  31. s.db, err = gorm.Open(postgres.New(postgres.Config{
  32. Conn: db,
  33. }), &gorm.Config{})
  34. require.NoError(s.T(), err)
  35. s.repo = NewSessionRepository(s.db)
  36. }
  37. func (s *Suite) AfterTest(_, _ string) {
  38. require.NoError(s.T(), s.mock.ExpectationsWereMet())
  39. }
  40. func TestInit(t *testing.T) {
  41. suite.Run(t, new(Suite))
  42. }
  43. func (s *Suite) TestShouldCreateNewSession() {
  44. var (
  45. key = "onekey"
  46. data = []byte("onedata")
  47. expiresAt = time.Now()
  48. )
  49. rows := sqlmock.NewRows([]string{"id"}).AddRow("111")
  50. s.mock.ExpectBegin()
  51. // s.mock.ExpectQuery(`INSERT INTO "sessions" ("created_at","updated_at","deleted_at","key","data","expires_at")
  52. // VALUES ($1,$2,$3,$4,$5,$6) RETURNING "sessions"."id"`).
  53. s.mock.ExpectQuery(`.*`).
  54. WithArgs(sqlmock.AnyArg(), sqlmock.AnyArg(), sqlmock.AnyArg(), key, data, expiresAt).
  55. WillReturnRows(rows)
  56. s.mock.ExpectCommit()
  57. // test function
  58. _, err := s.repo.CreateSession(&models.Session{
  59. Key: key,
  60. Data: data,
  61. ExpiresAt: expiresAt,
  62. })
  63. require.NoError(s.T(), err)
  64. }
  65. func (s *Suite) TestShoudSelectSessionByKey() {
  66. var (
  67. key = "onekey"
  68. )
  69. rows := sqlmock.NewRows([]string{"Key"}).AddRow(key)
  70. s.mock.ExpectQuery(`.*`). // do proper regex labor later as meditative exercise
  71. WithArgs(key).
  72. WillReturnRows(rows)
  73. // test function
  74. res, err := s.repo.SelectSession(&models.Session{
  75. Key: key,
  76. })
  77. require.NoError(s.T(), err)
  78. require.Nil(s.T(), deep.Equal(&models.Session{Key: key}, res))
  79. }
  80. func (s *Suite) TestShouldUpdateSessionByKey() {
  81. var (
  82. key = "onekey"
  83. data = []byte("chobanilime")
  84. expiresAt = time.Now()
  85. )
  86. // rows := sqlmock.NewRows([]string{"Key"}).AddRow(key)
  87. s.mock.ExpectBegin()
  88. s.mock.ExpectExec(`.*`). // do proper regex labor later as meditative exercise
  89. WithArgs(sqlmock.AnyArg(), key, data, sqlmock.AnyArg(), key).
  90. WillReturnResult(sqlmock.NewResult(1, 1))
  91. s.mock.ExpectCommit()
  92. // test function
  93. _, err := s.repo.UpdateSession(&models.Session{
  94. Key: key,
  95. Data: data,
  96. ExpiresAt: expiresAt,
  97. })
  98. require.NoError(s.T(), err)
  99. // require.Nil(s.T(), deep.Equal(&models.Session{Data: data}, res))
  100. }
  101. func (s *Suite) TestShouldDeleteSession() {
  102. var (
  103. key = "onekey"
  104. )
  105. // rows := sqlmock.NewRows([]string{"id"}).AddRow("111")
  106. s.mock.ExpectBegin()
  107. s.mock.ExpectExec(`.*`).
  108. WithArgs(key).
  109. WillReturnResult(sqlmock.NewResult(1, 1))
  110. s.mock.ExpectCommit()
  111. // test function
  112. _, err := s.repo.DeleteSession(&models.Session{
  113. Key: key,
  114. })
  115. require.NoError(s.T(), err)
  116. }