From e5c72591e637d523780aa5b58e1b42c02bd3d0f9 Mon Sep 17 00:00:00 2001 From: Kharec Date: Sat, 27 Dec 2025 17:32:01 +0100 Subject: [PATCH] feat: add repo-backed entity factories --- internal/testutils/entities.go | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/internal/testutils/entities.go b/internal/testutils/entities.go index 0c7929d..cde984e 100644 --- a/internal/testutils/entities.go +++ b/internal/testutils/entities.go @@ -3,6 +3,7 @@ package testutils import ( "fmt" "testing" + "time" "goyco/internal/database" "goyco/internal/repositories" @@ -11,6 +12,13 @@ import ( func CreatePostWithRepo(t *testing.T, repo repositories.PostRepository, authorID uint, title, url string) *database.Post { t.Helper() + if title == "" { + title = fmt.Sprintf("Post %d", time.Now().UnixNano()) + } + if url == "" { + url = fmt.Sprintf("https://example.com/%d", time.Now().UnixNano()) + } + post := &database.Post{ Title: title, URL: url, @@ -24,3 +32,91 @@ func CreatePostWithRepo(t *testing.T, repo repositories.PostRepository, authorID return post } + +func CreateUserWithRepo(t *testing.T, repo repositories.UserRepository, username, email, password string) *database.User { + t.Helper() + + if username == "" { + username = fmt.Sprintf("user_%d", time.Now().UnixNano()) + } + if email == "" { + email = fmt.Sprintf("%s@example.com", username) + } + if password == "" { + password = "hashed-password" + } + + user := &database.User{ + Username: username, + Email: email, + Password: password, + } + + if err := repo.Create(user); err != nil { + t.Fatalf("Failed to create test user: %v", err) + } + + return user +} + +func CreateVoteWithRepo(t *testing.T, repo repositories.VoteRepository, userID, postID uint, voteType database.VoteType) *database.Vote { + t.Helper() + + vote := &database.Vote{ + UserID: &userID, + PostID: postID, + Type: voteType, + } + + if err := repo.Create(vote); err != nil { + t.Fatalf("Failed to create test vote: %v", err) + } + + return vote +} + +func CreateRefreshTokenWithRepo(t *testing.T, repo repositories.RefreshTokenRepositoryInterface, userID uint, tokenHash string, expiresAt time.Time) *database.RefreshToken { + t.Helper() + + if tokenHash == "" { + tokenHash = fmt.Sprintf("token_%d", time.Now().UnixNano()) + } + if expiresAt.IsZero() { + expiresAt = time.Now().Add(24 * time.Hour) + } + + token := &database.RefreshToken{ + UserID: userID, + TokenHash: tokenHash, + ExpiresAt: expiresAt, + } + + if err := repo.Create(token); err != nil { + t.Fatalf("Failed to create test refresh token: %v", err) + } + + return token +} + +func CreateAccountDeletionRequestWithRepo(t *testing.T, repo repositories.AccountDeletionRepository, userID uint, tokenHash string, expiresAt time.Time) *database.AccountDeletionRequest { + t.Helper() + + if tokenHash == "" { + tokenHash = fmt.Sprintf("delete_%d", time.Now().UnixNano()) + } + if expiresAt.IsZero() { + expiresAt = time.Now().Add(24 * time.Hour) + } + + request := &database.AccountDeletionRequest{ + UserID: userID, + TokenHash: tokenHash, + ExpiresAt: expiresAt, + } + + if err := repo.Create(request); err != nil { + t.Fatalf("Failed to create test account deletion request: %v", err) + } + + return request +}