5 分钟发布一次
This commit is contained in:
@@ -1,13 +1,22 @@
|
||||
package listing
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"hfb_sys/backend/internal/database"
|
||||
"hfb_sys/backend/internal/model"
|
||||
)
|
||||
|
||||
type stubConfigReader map[string]string
|
||||
|
||||
func (s stubConfigReader) FindValue(_ context.Context, key string) (string, error) {
|
||||
return s[key], nil
|
||||
}
|
||||
|
||||
func TestConsumableValueOnlyCountsChargedResources(t *testing.T) {
|
||||
value := consumableValue(map[string]any{
|
||||
"resources": []any{
|
||||
@@ -108,6 +117,62 @@ func TestCreateRequiresPublishAgreements(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishCooldownUsesConfiguredMinutes(t *testing.T) {
|
||||
service := NewService(nil, stubConfigReader{publishCooldownMinutesKey: "2"})
|
||||
|
||||
cooldown, err := service.publishCooldown(t.Context())
|
||||
if err != nil {
|
||||
t.Fatalf("expected no error, got %v", err)
|
||||
}
|
||||
if cooldown != 2*time.Minute {
|
||||
t.Fatalf("expected 2m cooldown, got %s", cooldown)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishCooldownCanBeDisabled(t *testing.T) {
|
||||
service := NewService(nil, stubConfigReader{publishCooldownMinutesKey: "0"})
|
||||
|
||||
cooldown, err := service.publishCooldown(t.Context())
|
||||
if err != nil {
|
||||
t.Fatalf("expected no error, got %v", err)
|
||||
}
|
||||
if cooldown != 0 {
|
||||
t.Fatalf("expected disabled cooldown, got %s", cooldown)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryCreateRejectsRecentOwnerPublish(t *testing.T) {
|
||||
db := database.NewTestDB()
|
||||
if err := db.AutoMigrate(&model.User{}, &model.GameAccount{}, &model.RentalListing{}); err != nil {
|
||||
t.Fatalf("failed to migrate test db: %v", err)
|
||||
}
|
||||
user := model.User{Phone: "18800000000", RealnameStatus: "verified", Status: "active"}
|
||||
if err := db.Create(&user).Error; err != nil {
|
||||
t.Fatalf("failed to create user: %v", err)
|
||||
}
|
||||
latestCreatedAt := time.Now().Add(-2 * time.Minute)
|
||||
if err := db.Create(&model.RentalListing{
|
||||
ListingNo: "202606270001",
|
||||
AccountID: 1,
|
||||
OwnerID: user.ID,
|
||||
Status: "published",
|
||||
CreatedAt: latestCreatedAt,
|
||||
ReviewStatus: "approved",
|
||||
}).Error; err != nil {
|
||||
t.Fatalf("failed to create latest listing: %v", err)
|
||||
}
|
||||
|
||||
repo := NewRepository(db, nil)
|
||||
_, err := repo.Create(t.Context(), user.ID, validCreateRequest(), false, 5*time.Minute)
|
||||
var cooldownErr PublishCooldownError
|
||||
if !errors.As(err, &cooldownErr) {
|
||||
t.Fatalf("expected PublishCooldownError, got %v", err)
|
||||
}
|
||||
if cooldownErr.Remaining <= 0 {
|
||||
t.Fatalf("expected positive remaining cooldown, got %s", cooldownErr.Remaining)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryUpdateAllowsOfflineListingResubmit(t *testing.T) {
|
||||
db := database.NewTestDB()
|
||||
if err := db.AutoMigrate(&model.GameAccount{}, &model.RentalListing{}); err != nil {
|
||||
@@ -127,7 +192,7 @@ func TestRepositoryUpdateAllowsOfflineListingResubmit(t *testing.T) {
|
||||
"online_time": map[string]any{"start": "09:00", "end": "23:00"},
|
||||
},
|
||||
}
|
||||
created, err := repo.Create(t.Context(), 1, req, false)
|
||||
created, err := repo.Create(t.Context(), 1, req, false, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create listing: %v", err)
|
||||
}
|
||||
@@ -148,6 +213,22 @@ func TestRepositoryUpdateAllowsOfflineListingResubmit(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func validCreateRequest() CreateRequest {
|
||||
return CreateRequest{
|
||||
Title: "测试账号",
|
||||
ServerRegion: "QQ",
|
||||
LoginPlatform: "QQ账号密码",
|
||||
RankLevel: "黑鹰",
|
||||
HafCoinAmount: 100000000,
|
||||
PriceCent: 10000,
|
||||
DepositAmountCent: 50000,
|
||||
ScreenshotURLS: []string{"https://example.com/a.png"},
|
||||
AssetSummary: map[string]any{
|
||||
"online_time": map[string]any{"start": "09:00", "end": "23:00"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplySellerListingPriceUsesSellerTotalPrice(t *testing.T) {
|
||||
item := &ListingDTO{
|
||||
PriceCent: 23800,
|
||||
|
||||
Reference in New Issue
Block a user