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 175 176 177 178 179 180 181 182 183 |
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"
)
// getUserByUsername queries user from db by it's username
func (e *AppTestSuite) getUserByUsername(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
}
// insertUser inserts user into db
func (e *AppTestSuite) insertUser(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
}
// getLastSessionByUserID gets last inserted [models.Session] for particular user
func (e *AppTestSuite) getLastSessionByUserID(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)
session.UserID = uid
return session
}
// getLastUserByEmail gets last inserted [models.User] by user's email
func (e *AppTestSuite) getLastUserByEmail(em string) models.User {
query, args, err := pgq.
Select("id", "username", "activated", "email", "password", "created_at", "last_login_at").
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, &u.CreatedAt, &u.LastLoginAt)
if errors.Is(err, pgx.ErrNoRows) {
return models.User{} //nolint:exhaustruct
}
e.require.NoError(err)
return u
}
// getNoteBySlug gets [models.Note] by slug
func (e *AppTestSuite) getNoteBySlug(slug string) models.Note {
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 models.Note
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 models.Note{} //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
}
func (e *AppTestSuite) getResetPasswordTokenByUserID(u uuid.UUID) userVerificationToken {
query, args, err := pgq.
Select("token", "used_at").
From("password_reset_tokens ").
Where(pgq.Eq{"user_id": u.String()}).
Limit(1).
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
}
|