onasty/e2e/e2e_utils_db_test.go(view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
package e2e_test
import (
"errors"
"time"
"github.com/gofrs/uuid/v5"
"github.com/henvic/pgq"
"github.com/jackc/pgx/v5"
"github.com/olexsmir/onasty/internal/models"
)
func (e *AppTestSuite) getUserFromDBByUsername(username string) models.User {
query, args, err := pgq.
Select("id", "username", "email", "password", "created_at", "last_login_at").
From("users").
Where(pgq.Eq{"username": username}).
SQL()
e.require.NoError(err)
var user models.User
err = e.postgresDB.QueryRow(e.ctx, query, args...).
Scan(&user.ID, &user.Username, &user.Email, &user.Password, &user.CreatedAt, &user.LastLoginAt)
e.require.NoError(err)
return user
}
func (e *AppTestSuite) insertUserIntoDB(uname, email, passwd string, activated ...bool) uuid.UUID {
p, err := e.hasher.Hash(passwd)
e.require.NoError(err)
var a bool
if len(activated) == 1 {
a = activated[0]
}
query, args, err := pgq.
Insert("users").
Columns("username", "email", "password", "activated", "created_at", "last_login_at").
Values(uname, email, p, a, time.Now(), time.Now()).
Returning("id").
SQL()
e.require.NoError(err)
var id uuid.UUID
err = e.postgresDB.QueryRow(e.ctx, query, args...).Scan(&id)
e.require.NoError(err)
return id
}
func (e *AppTestSuite) getLastUserSessionByUserID(uid uuid.UUID) models.Session {
query, args, err := pgq.
Select("refresh_token", "expires_at").
From("sessions").
Where(pgq.Eq{"user_id": uid.String()}).
OrderBy("expires_at DESC").
SQL()
e.require.NoError(err)
var session models.Session
err = e.postgresDB.QueryRow(e.ctx, query, args...).
Scan(&session.RefreshToken, &session.ExpiresAt)
if errors.Is(err, pgx.ErrNoRows) {
return models.Session{} //nolint:exhaustruct
}
e.require.NoError(err)
return session
}
func (e *AppTestSuite) getLastInsertedUserByEmail(em string) models.User {
query, args, err := pgq.
Select("id", "username", "activated", "email", "password").
From("users").
Where(pgq.Eq{"email": em}).
OrderBy("created_at DESC").
Limit(1).
SQL()
e.require.NoError(err)
var u models.User
err = e.postgresDB.QueryRow(e.ctx, query, args...).
Scan(&u.ID, &u.Username, &u.Activated, &u.Email, &u.Password)
if errors.Is(err, pgx.ErrNoRows) {
return models.User{} //nolint:exhaustruct
}
e.require.NoError(err)
return u
}
type noteModel struct {
ID uuid.UUID
Content string
Slug string
BurnBeforeExpiration bool
Password string
IsRead bool
ReadAt *time.Time
CreatedAt time.Time
ExpiresAt time.Time
}
func (e *AppTestSuite) getNoteFromDBbySlug(slug string) noteModel {
query, args, err := pgq.
Select(
"id",
"content",
"slug",
"burn_before_expiration",
"read_at",
"created_at",
"expires_at",
).
From("notes").
Where(pgq.Eq{"slug": slug}).
SQL()
e.require.NoError(err)
var note noteModel
err = e.postgresDB.QueryRow(e.ctx, query, args...).
Scan(¬e.ID, ¬e.Content, ¬e.Slug, ¬e.BurnBeforeExpiration, ¬e.ReadAt, ¬e.CreatedAt, ¬e.ExpiresAt)
if errors.Is(err, pgx.ErrNoRows) {
return noteModel{} //nolint:exhaustruct
}
e.require.NoError(err)
return note
}
type noteAuthorModel struct {
noteID uuid.UUID
userID uuid.UUID
}
func (e *AppTestSuite) getLastNoteAuthorsRecordByAuthorID(uid uuid.UUID) noteAuthorModel {
qeuery, args, err := pgq.
Select("note_id", "user_id").
From("notes_authors").
Where(pgq.Eq{"user_id": uid.String()}).
OrderBy("created_at DESC").
Limit(1).
SQL()
e.require.NoError(err)
var na noteAuthorModel
err = e.postgresDB.QueryRow(e.ctx, qeuery, args...).Scan(&na.noteID, &na.userID)
if errors.Is(err, pgx.ErrNoRows) {
return noteAuthorModel{} //nolint:exhaustruct
}
e.require.NoError(err)
return na
}
type userVerificationToken struct {
Token string
UsedAt *time.Time
}
func (e *AppTestSuite) getVerificationTokenByUserID(u uuid.UUID) userVerificationToken {
query, args, err := pgq.
Select("token", "used_at").
From("verification_tokens").
Where(pgq.Eq{"user_id": u.String()}).
SQL()
e.require.NoError(err)
var r userVerificationToken
err = e.postgresDB.QueryRow(e.ctx, query, args...).Scan(&r.Token, &r.UsedAt)
e.require.NoError(err)
return r
}
|