all repos

onasty @ e0dc5bb

a one-time notes service

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
package e2e

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) uuid.UUID {
	p, err := e.hasher.Hash(passwd)
	e.require.NoError(err)

	query, args, err := pgq.
		Insert("users").
		Columns("username", "email", "password", "activated", "created_at", "last_login_at").
		Values(uname, email, p, true, 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(pgx.ErrNoRows, err) {
		return models.Session{}
	}

	e.require.NoError(err)
	return session
}

func (e *AppTestSuite) getNoteFromDBbySlug(slug string) models.Note {
	query, args, err := pgq.
		Select("id", "content", "slug", "burn_before_expiration", "created_at", "expires_at").
		From("notes").
		Where("slug = ?", slug).
		SQL()
	e.require.NoError(err)

	var note models.Note
	err = e.postgresDB.QueryRow(e.ctx, query, args...).
		Scan(&note.ID, &note.Content, &note.Slug, &note.BurnBeforeExpiration, &note.CreatedAt, &note.ExpiresAt)
	if errors.Is(err, pgx.ErrNoRows) {
		return models.Note{}
	}

	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{}
	}

	e.require.NoError(err)
	return na
}