Files
threshold/internal/db/db_test/db.go
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

236 lines
4.5 KiB
Go
Raw Normal View History

2023-02-02 17:15:17 -08:00
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
2023-02-02 17:15:17 -08:00
// Package db_test provides some helper funcs for testing db integrations
package db_test
import (
"errors"
2021-07-14 17:31:58 -07:00
"github.com/hashicorp/go-secure-stdlib/base62"
"google.golang.org/protobuf/proto"
)
const (
defaultUserTablename = "db_test_user"
defaultCarTableName = "db_test_car"
defaultRentalTableName = "db_test_rental"
defaultScooterTableName = "db_test_scooter"
defaultAccessoryTableName = "db_test_accessory"
defaultScooterAccessoryTableName = "db_test_scooter_accessory"
)
type TestUser struct {
*StoreTestUser
table string `gorm:"-"`
}
func NewTestUser() (*TestUser, error) {
publicId, err := base62.Random(20)
if err != nil {
return nil, err
}
return &TestUser{
StoreTestUser: &StoreTestUser{
PublicId: publicId,
},
}, nil
}
2020-06-29 06:31:23 -04:00
func AllocTestUser() TestUser {
return TestUser{
StoreTestUser: &StoreTestUser{},
}
}
// Clone is useful when you're retrying transactions and you need to send the user several times
2022-10-25 18:29:38 -05:00
func (u *TestUser) Clone() any {
s := proto.Clone(u.StoreTestUser)
return &TestUser{
StoreTestUser: s.(*StoreTestUser),
}
}
func (u *TestUser) TableName() string {
if u.table != "" {
return u.table
}
return defaultUserTablename
}
func (u *TestUser) SetTableName(name string) {
switch name {
case "":
u.table = defaultUserTablename
default:
u.table = name
}
}
type TestCar struct {
*StoreTestCar
table string `gorm:"-"`
}
func NewTestCar() (*TestCar, error) {
publicId, err := base62.Random(20)
if err != nil {
return nil, err
}
return &TestCar{
StoreTestCar: &StoreTestCar{
PublicId: publicId,
},
}, nil
}
func (c *TestCar) TableName() string {
if c.table != "" {
return c.table
}
return defaultCarTableName
}
func (c *TestCar) SetTableName(name string) {
2020-07-23 17:58:41 -04:00
c.table = name
}
type TestRental struct {
*StoreTestRental
table string `gorm:"-"`
}
func NewTestRental() (*TestRental, error) {
publicId, err := base62.Random(20)
if err != nil {
return nil, err
}
return &TestRental{
StoreTestRental: &StoreTestRental{
PublicId: publicId,
},
}, nil
}
func (r *TestRental) TableName() string {
if r.table != "" {
return r.table
}
return defaultRentalTableName
}
func (r *TestRental) SetTableName(name string) {
2020-07-23 17:58:41 -04:00
r.table = name
}
2020-06-29 08:18:57 -04:00
type TestScooter struct {
*StoreTestScooter
table string `gorm:"-"`
}
func NewTestScooter() (*TestScooter, error) {
privateId, err := base62.Random(20)
if err != nil {
return nil, err
}
return &TestScooter{
StoreTestScooter: &StoreTestScooter{
PrivateId: privateId,
},
}, nil
}
2022-10-25 18:29:38 -05:00
func (t *TestScooter) Clone() any {
2020-06-29 08:18:57 -04:00
s := proto.Clone(t.StoreTestScooter)
return &TestScooter{
StoreTestScooter: s.(*StoreTestScooter),
}
}
2020-06-29 08:18:57 -04:00
func (t *TestScooter) TableName() string {
if t.table != "" {
return t.table
}
return defaultScooterTableName
2020-06-29 08:18:57 -04:00
}
func (t *TestScooter) SetTableName(name string) {
2020-07-23 17:58:41 -04:00
t.table = name
2020-06-29 08:18:57 -04:00
}
type TestAccessory struct {
*StoreTestAccessory
table string `gorm:"-"`
}
func NewTestAccessory(description string) (*TestAccessory, error) {
if description == "" {
return nil, errors.New("missing description")
}
return &TestAccessory{StoreTestAccessory: &StoreTestAccessory{Description: description}}, nil
}
2022-10-25 18:29:38 -05:00
func (t *TestAccessory) Clone() any {
s := proto.Clone(t.StoreTestAccessory)
return &TestAccessory{
StoreTestAccessory: s.(*StoreTestAccessory),
}
}
func (t *TestAccessory) TableName() string {
if t.table != "" {
return t.table
}
return defaultAccessoryTableName
}
func (t *TestAccessory) SetTableName(name string) {
t.table = name
}
type TestScooterAccessory struct {
*StoreTestScooterAccessory
table string `gorm:"-"`
}
func NewTestScooterAccessory(scooterId, accessoryId uint32) (*TestScooterAccessory, error) {
if accessoryId == 0 {
return nil, errors.New("mssing accessory id")
}
return &TestScooterAccessory{
StoreTestScooterAccessory: &StoreTestScooterAccessory{
ScooterId: scooterId,
AccessoryId: accessoryId,
},
}, nil
}
2022-10-25 18:29:38 -05:00
func (t *TestScooterAccessory) Clone() any {
s := proto.Clone(t.StoreTestScooterAccessory)
return &TestScooterAccessory{
StoreTestScooterAccessory: s.(*StoreTestScooterAccessory),
}
}
func (t *TestScooterAccessory) TableName() string {
if t.table != "" {
return t.table
}
return defaultScooterAccessoryTableName
}
func (t *TestScooterAccessory) SetTableName(name string) {
t.table = name
}
2020-06-29 08:18:57 -04:00
type Cloner interface {
2022-10-25 18:29:38 -05:00
Clone() any
2020-06-29 08:18:57 -04:00
}
type NotIder struct{}
2022-10-25 18:29:38 -05:00
func (i *NotIder) Clone() any {
2020-06-29 08:18:57 -04:00
return &NotIder{}
}