Add unit tests for player configurations and referral system
- Implement tests for player configuration creation, update, and deletion, ensuring proper handling of free and paid user scenarios. - Add tests for referral registration, including valid and invalid referrer cases. - Create tests for referral reward flow, verifying correct reward distribution and eligibility. - Establish a test database setup with necessary schema for user, plan, payment, and notification models. - Introduce helper functions for seeding test data and loading entities from the database.
This commit is contained in:
@@ -24,7 +24,7 @@ type PlayerConfig struct {
|
||||
Airplay *bool `gorm:"column:airplay;type:boolean;not null;default:true" json:"airplay"`
|
||||
Chromecast *bool `gorm:"column:chromecast;type:boolean;not null;default:true" json:"chromecast"`
|
||||
IsActive *bool `gorm:"column:is_active;type:boolean;not null;default:true" json:"is_active"`
|
||||
IsDefault bool `gorm:"column:is_default;type:boolean;not null;index:idx_player_configs_is_default,priority:1;index:idx_player_configs_user_default,priority:1" json:"is_default"`
|
||||
IsDefault bool `gorm:"column:is_default;type:boolean;not null;index:idx_player_configs_user_default,priority:1;index:idx_player_configs_is_default,priority:1" json:"is_default"`
|
||||
CreatedAt *time.Time `gorm:"column:created_at;type:timestamp(3) without time zone;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp(3) without time zone;not null" json:"updated_at"`
|
||||
Version *int64 `gorm:"column:version;type:bigint;not null;default:1;version" json:"-"`
|
||||
|
||||
@@ -21,16 +21,16 @@ type User struct {
|
||||
GoogleID *string `gorm:"column:google_id;type:text;uniqueIndex:user_google_id_key,priority:1" json:"google_id"`
|
||||
StorageUsed int64 `gorm:"column:storage_used;type:bigint;not null" json:"storage_used"`
|
||||
PlanID *string `gorm:"column:plan_id;type:uuid" json:"plan_id"`
|
||||
CreatedAt *time.Time `gorm:"column:created_at;type:timestamp(3) without time zone;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp(3) without time zone;not null" json:"updated_at"`
|
||||
Version *int64 `gorm:"column:version;type:bigint;not null;default:1;version" json:"-"`
|
||||
TelegramID *string `gorm:"column:telegram_id;type:character varying" json:"telegram_id"`
|
||||
ReferredByUserID *string `gorm:"column:referred_by_user_id;type:uuid;index:idx_user_referred_by_user_id,priority:1" json:"referred_by_user_id"`
|
||||
ReferralEligible *bool `gorm:"column:referral_eligible;type:boolean;not null;default:true" json:"referral_eligible"`
|
||||
ReferralRewardBps *int32 `gorm:"column:referral_reward_bps;type:integer" json:"referral_reward_bps"`
|
||||
ReferralRewardGrantedAt *time.Time `gorm:"column:referral_reward_granted_at;type:timestamp with time zone" json:"referral_reward_granted_at"`
|
||||
ReferralRewardPaymentID *string `gorm:"column:referral_reward_payment_id;type:uuid" json:"referral_reward_payment_id"`
|
||||
ReferralRewardAmount *float64 `gorm:"column:referral_reward_amount;type:numeric(65,30)" json:"referral_reward_amount"`
|
||||
CreatedAt *time.Time `gorm:"column:created_at;type:timestamp(3) without time zone;not null;default:CURRENT_TIMESTAMP" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp(3) without time zone;not null" json:"updated_at"`
|
||||
Version *int64 `gorm:"column:version;type:bigint;not null;default:1;version" json:"-"`
|
||||
TelegramID *string `gorm:"column:telegram_id;type:character varying" json:"telegram_id"`
|
||||
}
|
||||
|
||||
// TableName User's table name
|
||||
|
||||
@@ -41,6 +41,12 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user {
|
||||
_user.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_user.Version = field.NewInt64(tableName, "version")
|
||||
_user.TelegramID = field.NewString(tableName, "telegram_id")
|
||||
_user.ReferredByUserID = field.NewString(tableName, "referred_by_user_id")
|
||||
_user.ReferralEligible = field.NewBool(tableName, "referral_eligible")
|
||||
_user.ReferralRewardBps = field.NewInt32(tableName, "referral_reward_bps")
|
||||
_user.ReferralRewardGrantedAt = field.NewTime(tableName, "referral_reward_granted_at")
|
||||
_user.ReferralRewardPaymentID = field.NewString(tableName, "referral_reward_payment_id")
|
||||
_user.ReferralRewardAmount = field.NewFloat64(tableName, "referral_reward_amount")
|
||||
|
||||
_user.fillFieldMap()
|
||||
|
||||
@@ -50,20 +56,26 @@ func newUser(db *gorm.DB, opts ...gen.DOOption) user {
|
||||
type user struct {
|
||||
userDo userDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.String
|
||||
Email field.String
|
||||
Password field.String
|
||||
Username field.String
|
||||
Avatar field.String
|
||||
Role field.String
|
||||
GoogleID field.String
|
||||
StorageUsed field.Int64
|
||||
PlanID field.String
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
Version field.Int64
|
||||
TelegramID field.String
|
||||
ALL field.Asterisk
|
||||
ID field.String
|
||||
Email field.String
|
||||
Password field.String
|
||||
Username field.String
|
||||
Avatar field.String
|
||||
Role field.String
|
||||
GoogleID field.String
|
||||
StorageUsed field.Int64
|
||||
PlanID field.String
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
Version field.Int64
|
||||
TelegramID field.String
|
||||
ReferredByUserID field.String
|
||||
ReferralEligible field.Bool
|
||||
ReferralRewardBps field.Int32
|
||||
ReferralRewardGrantedAt field.Time
|
||||
ReferralRewardPaymentID field.String
|
||||
ReferralRewardAmount field.Float64
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
@@ -93,6 +105,12 @@ func (u *user) updateTableName(table string) *user {
|
||||
u.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
u.Version = field.NewInt64(table, "version")
|
||||
u.TelegramID = field.NewString(table, "telegram_id")
|
||||
u.ReferredByUserID = field.NewString(table, "referred_by_user_id")
|
||||
u.ReferralEligible = field.NewBool(table, "referral_eligible")
|
||||
u.ReferralRewardBps = field.NewInt32(table, "referral_reward_bps")
|
||||
u.ReferralRewardGrantedAt = field.NewTime(table, "referral_reward_granted_at")
|
||||
u.ReferralRewardPaymentID = field.NewString(table, "referral_reward_payment_id")
|
||||
u.ReferralRewardAmount = field.NewFloat64(table, "referral_reward_amount")
|
||||
|
||||
u.fillFieldMap()
|
||||
|
||||
@@ -117,7 +135,7 @@ func (u *user) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
}
|
||||
|
||||
func (u *user) fillFieldMap() {
|
||||
u.fieldMap = make(map[string]field.Expr, 13)
|
||||
u.fieldMap = make(map[string]field.Expr, 19)
|
||||
u.fieldMap["id"] = u.ID
|
||||
u.fieldMap["email"] = u.Email
|
||||
u.fieldMap["password"] = u.Password
|
||||
@@ -131,6 +149,12 @@ func (u *user) fillFieldMap() {
|
||||
u.fieldMap["updated_at"] = u.UpdatedAt
|
||||
u.fieldMap["version"] = u.Version
|
||||
u.fieldMap["telegram_id"] = u.TelegramID
|
||||
u.fieldMap["referred_by_user_id"] = u.ReferredByUserID
|
||||
u.fieldMap["referral_eligible"] = u.ReferralEligible
|
||||
u.fieldMap["referral_reward_bps"] = u.ReferralRewardBps
|
||||
u.fieldMap["referral_reward_granted_at"] = u.ReferralRewardGrantedAt
|
||||
u.fieldMap["referral_reward_payment_id"] = u.ReferralRewardPaymentID
|
||||
u.fieldMap["referral_reward_amount"] = u.ReferralRewardAmount
|
||||
}
|
||||
|
||||
func (u user) clone(db *gorm.DB) user {
|
||||
|
||||
Reference in New Issue
Block a user