Files
Zane Walker 7e940c83a7
Some checks failed
Build & Test / build-test (push) Has been cancelled
Build & Test / swagger-codegen-cli (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
(Feat): Initial Commit
2026-07-03 19:41:31 +05:30

173 lines
5.8 KiB
Go

package fixtures
import (
"context"
"fmt"
"time"
"allaboutapps.dev/aw/go-starter/internal/models"
"allaboutapps.dev/aw/go-starter/internal/util"
"github.com/aarondl/null/v8"
"github.com/aarondl/sqlboiler/v4/boil"
)
const (
PlainTestUserPassword = "password"
HashedTestUserPassword = "$argon2id$v=19$m=65536,t=1,p=4$RFO8ulg2c2zloG0029pAUQ$2Po6NUIhVCMm9vivVDuzo7k5KVWfZzJJfeXzC+n+row" //nolint:gosec
)
// Insertable represents a common interface for all model instances so they may be inserted via the Inserts() func
type Insertable interface {
Insert(ctx context.Context, exec boil.ContextExecutor, columns boil.Columns) error
}
// The main definition which fixtures are available through Fixtures().
// Mind the declaration order! The fields get inserted exactly in the order they are declared.
type FixtureMap struct {
User1 *models.User
User1AppUserProfile *models.AppUserProfile
User1AccessToken1 *models.AccessToken
User1RefreshToken1 *models.RefreshToken
User2 *models.User
User2AppUserProfile *models.AppUserProfile
User2AccessToken1 *models.AccessToken
User2RefreshToken1 *models.RefreshToken
UserDeactivated *models.User
UserDeactivatedAppUserProfile *models.AppUserProfile
UserDeactivatedAccessToken1 *models.AccessToken
UserDeactivatedRefreshToken1 *models.RefreshToken
User1PushToken *models.PushToken
User1PushTokenAPN *models.PushToken
UserRequiresConfirmation *models.User
UserRequiresConfirmationAppUserProfile *models.AppUserProfile
UserRequiresConfirmationConfirmationToken *models.ConfirmationToken
}
// Fixtures returns a function wrapping our fixtures, which tests are allowed to manipulate.
// Each test (which may run concurrently) receives a fresh copy, preventing side effects between test runs.
func Fixtures() FixtureMap {
now := time.Now()
f := FixtureMap{}
f.User1 = &models.User{
ID: "f6ede5d8-e22a-4ca5-aa12-67821865a3e5",
IsActive: true,
Username: null.StringFrom("user1@example.com"),
Password: null.StringFrom(HashedTestUserPassword),
Scopes: []string{"app"},
}
f.User1AppUserProfile = &models.AppUserProfile{
UserID: f.User1.ID,
LegalAcceptedAt: null.TimeFrom(now.Add(time.Minute * -10)),
}
f.User1AccessToken1 = &models.AccessToken{
Token: "1cfc27d7-a178-4051-802b-f3ff3967c95c",
ValidUntil: now.Add(10 * 365 * 24 * time.Hour),
UserID: f.User1.ID,
}
f.User1RefreshToken1 = &models.RefreshToken{
Token: "66412eaf-2b89-404d-bbb5-46c3b8bf1a53",
UserID: f.User1.ID,
}
f.User2 = &models.User{
ID: "76a79a2b-fbd8-45a0-b35b-671a28a87acf",
IsActive: true,
Username: null.StringFrom("user2@example.com"),
Password: null.StringFrom(HashedTestUserPassword),
Scopes: []string{"app"},
}
f.User2AppUserProfile = &models.AppUserProfile{
UserID: f.User2.ID,
LegalAcceptedAt: null.TimeFrom(now.Add(time.Minute * -10)),
}
f.User2AccessToken1 = &models.AccessToken{
Token: "115d28c5-f585-4fb5-9656-fb321739fee5",
ValidUntil: now.Add(10 * 365 * 24 * time.Hour),
UserID: f.User2.ID,
}
f.User2RefreshToken1 = &models.RefreshToken{
Token: "ea909c75-63d1-4348-a63c-4bcf8ab334a2",
UserID: f.User2.ID,
}
f.UserRequiresConfirmation = &models.User{
ID: "402e1669-fff7-43ca-8f08-071c06409479",
IsActive: false,
RequiresConfirmation: true,
Username: null.StringFrom("userrequiresconfirmation@example.com"),
Password: null.StringFrom(HashedTestUserPassword),
Scopes: []string{"app"},
}
f.UserRequiresConfirmationAppUserProfile = &models.AppUserProfile{
UserID: f.UserRequiresConfirmation.ID,
LegalAcceptedAt: null.TimeFrom(now.Add(time.Minute * -10)),
}
f.UserRequiresConfirmationConfirmationToken = &models.ConfirmationToken{
Token: "c9182e0b-4a46-4825-9f10-56f04a8b1665",
ValidUntil: now.Add(time.Hour),
UserID: f.UserRequiresConfirmation.ID,
}
f.UserDeactivated = &models.User{
ID: "d9c0dee9-239e-4323-979a-a5354d289627",
IsActive: false,
Username: null.StringFrom("userdeactivated@example.com"),
Password: null.StringFrom(HashedTestUserPassword),
Scopes: []string{"app"},
}
f.UserDeactivatedAppUserProfile = &models.AppUserProfile{
UserID: f.UserDeactivated.ID,
LegalAcceptedAt: null.Time{},
}
f.UserDeactivatedAccessToken1 = &models.AccessToken{
Token: "24d0b38d-387c-400c-80fc-a71d85031d4c",
ValidUntil: now.Add(10 * 365 * 24 * time.Hour),
UserID: f.UserDeactivated.ID,
}
f.UserDeactivatedRefreshToken1 = &models.RefreshToken{
Token: "b6e13a88-7b18-4f17-b819-71b196be2444",
UserID: f.UserDeactivated.ID,
}
f.User1PushToken = &models.PushToken{
ID: "98ad176b-af90-44b7-b991-d9ebfc5dd9a0",
Token: "cQ_Qk3ZCCZelUZ_K_Yn2BV:APA91bG4jst5srGYZqBAn_wRfiJUzAOQ4k8tV0sDcV4uas2ln5wNwkE_ebneR5Fqk7GvndZ-h3mWnjWaI8yZ4sVwo8qu_Aztotqup4mlEPNYgFGqTlJ5ltQrJG5oKp4RoYQ_0CeFaymn",
UserID: f.User1.ID,
Provider: models.ProviderTypeFCM,
}
f.User1PushTokenAPN = &models.PushToken{
ID: "5909b472-86f8-4d15-bb63-d49f4fad41a3",
Token: "0a863a72-d391-4217-9f26-388801684744",
UserID: f.User1.ID,
Provider: models.ProviderTypeApn,
}
return f
}
// Inserts defines the order in which the fixtures will be inserted
// into the test database
func Inserts() []Insertable {
fix := Fixtures()
insertableIfc := (*Insertable)(nil)
inserts, err := util.GetFieldsImplementing(&fix, insertableIfc)
if err != nil {
panic(fmt.Errorf("failed to get insertable fixture fields: %w", err))
}
return inserts
}