feat: 更新服务方法,显式接受用户ID参数,简化上下文调用
This commit is contained in:
@@ -51,7 +51,7 @@ func (s *CreatorTestSuite) Test_Apply() {
|
||||
form := &creator_dto.ApplyForm{
|
||||
Name: "My Channel",
|
||||
}
|
||||
err := Creator.Apply(ctx, form)
|
||||
err := Creator.Apply(ctx, u.ID, form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
t, _ := models.TenantQuery.WithContext(ctx).Where(models.TenantQuery.UserID.Eq(u.ID)).First()
|
||||
@@ -73,7 +73,15 @@ func (s *CreatorTestSuite) Test_Apply() {
|
||||
func (s *CreatorTestSuite) Test_CreateContent() {
|
||||
Convey("CreateContent", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
database.Truncate(ctx, s.DB, models.TableNameTenant, models.TableNameContent, models.TableNameContentAsset, models.TableNameContentPrice, models.TableNameUser)
|
||||
database.Truncate(
|
||||
ctx,
|
||||
s.DB,
|
||||
models.TableNameTenant,
|
||||
models.TableNameContent,
|
||||
models.TableNameContentAsset,
|
||||
models.TableNameContentPrice,
|
||||
models.TableNameUser,
|
||||
)
|
||||
|
||||
u := &models.User{Username: "creator2", Phone: "13700000002"}
|
||||
models.UserQuery.WithContext(ctx).Create(u)
|
||||
@@ -90,7 +98,7 @@ func (s *CreatorTestSuite) Test_CreateContent() {
|
||||
Price: 9.99,
|
||||
// MediaIDs: ... need media asset
|
||||
}
|
||||
err := Creator.CreateContent(ctx, form)
|
||||
err := Creator.CreateContent(ctx, u.ID, form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
c, _ := models.ContentQuery.WithContext(ctx).Where(models.ContentQuery.Title.Eq("New Song")).First()
|
||||
@@ -109,7 +117,15 @@ func (s *CreatorTestSuite) Test_CreateContent() {
|
||||
func (s *CreatorTestSuite) Test_UpdateContent() {
|
||||
Convey("UpdateContent", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
database.Truncate(ctx, s.DB, models.TableNameTenant, models.TableNameContent, models.TableNameContentAsset, models.TableNameContentPrice, models.TableNameUser)
|
||||
database.Truncate(
|
||||
ctx,
|
||||
s.DB,
|
||||
models.TableNameTenant,
|
||||
models.TableNameContent,
|
||||
models.TableNameContentAsset,
|
||||
models.TableNameContentPrice,
|
||||
models.TableNameUser,
|
||||
)
|
||||
|
||||
u := &models.User{Username: "creator3", Phone: "13700000003"}
|
||||
models.UserQuery.WithContext(ctx).Create(u)
|
||||
@@ -120,7 +136,8 @@ func (s *CreatorTestSuite) Test_UpdateContent() {
|
||||
|
||||
c := &models.Content{TenantID: t.ID, UserID: u.ID, Title: "Old Title", Genre: "audio"}
|
||||
models.ContentQuery.WithContext(ctx).Create(c)
|
||||
models.ContentPriceQuery.WithContext(ctx).Create(&models.ContentPrice{TenantID: t.ID, UserID: u.ID, ContentID: c.ID, PriceAmount: 100})
|
||||
models.ContentPriceQuery.WithContext(ctx).
|
||||
Create(&models.ContentPrice{TenantID: t.ID, UserID: u.ID, ContentID: c.ID, PriceAmount: 100})
|
||||
|
||||
Convey("should update content", func() {
|
||||
form := &creator_dto.ContentUpdateForm{
|
||||
@@ -128,7 +145,7 @@ func (s *CreatorTestSuite) Test_UpdateContent() {
|
||||
Genre: "video",
|
||||
Price: 20.00,
|
||||
}
|
||||
err := Creator.UpdateContent(ctx, cast.ToString(c.ID), form)
|
||||
err := Creator.UpdateContent(ctx, u.ID, cast.ToString(c.ID), form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
// Verify
|
||||
@@ -145,7 +162,15 @@ func (s *CreatorTestSuite) Test_UpdateContent() {
|
||||
func (s *CreatorTestSuite) Test_Dashboard() {
|
||||
Convey("Dashboard", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
database.Truncate(ctx, s.DB, models.TableNameTenant, models.TableNameTenantUser, models.TableNameTenantLedger, models.TableNameUser, models.TableNameOrder)
|
||||
database.Truncate(
|
||||
ctx,
|
||||
s.DB,
|
||||
models.TableNameTenant,
|
||||
models.TableNameTenantUser,
|
||||
models.TableNameTenantLedger,
|
||||
models.TableNameUser,
|
||||
models.TableNameOrder,
|
||||
)
|
||||
|
||||
u := &models.User{Username: "creator4", Phone: "13700000004"}
|
||||
models.UserQuery.WithContext(ctx).Create(u)
|
||||
@@ -165,11 +190,15 @@ func (s *CreatorTestSuite) Test_Dashboard() {
|
||||
models.TenantLedgerQuery.WithContext(ctx).Create(
|
||||
&models.TenantLedger{TenantID: t.ID, Type: consts.TenantLedgerTypeDebitPurchase, Amount: 1000}, // 10.00
|
||||
&models.TenantLedger{TenantID: t.ID, Type: consts.TenantLedgerTypeDebitPurchase, Amount: 2000}, // 20.00
|
||||
&models.TenantLedger{TenantID: t.ID, Type: consts.TenantLedgerTypeCreditRefund, Amount: 500}, // -5.00 (Refund, currently Dashboard sums DebitPurchase only, ideally should subtract refunds, but let's stick to implementation)
|
||||
&models.TenantLedger{
|
||||
TenantID: t.ID,
|
||||
Type: consts.TenantLedgerTypeCreditRefund,
|
||||
Amount: 500,
|
||||
}, // -5.00 (Refund, currently Dashboard sums DebitPurchase only, ideally should subtract refunds, but let's stick to implementation)
|
||||
)
|
||||
|
||||
Convey("should get stats", func() {
|
||||
stats, err := Creator.Dashboard(ctx)
|
||||
stats, err := Creator.Dashboard(ctx, u.ID)
|
||||
So(err, ShouldBeNil)
|
||||
So(stats.TotalFollowers.Value, ShouldEqual, 2)
|
||||
// Implementation sums 'debit_purchase' only based on my code
|
||||
@@ -198,21 +227,21 @@ func (s *CreatorTestSuite) Test_PayoutAccount() {
|
||||
Account: "user@example.com",
|
||||
Realname: "John Doe",
|
||||
}
|
||||
err := Creator.AddPayoutAccount(ctx, form)
|
||||
err := Creator.AddPayoutAccount(ctx, u.ID, form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
// List
|
||||
list, err := Creator.ListPayoutAccounts(ctx)
|
||||
list, err := Creator.ListPayoutAccounts(ctx, u.ID)
|
||||
So(err, ShouldBeNil)
|
||||
So(len(list), ShouldEqual, 1)
|
||||
So(list[0].Account, ShouldEqual, "user@example.com")
|
||||
|
||||
// Remove
|
||||
err = Creator.RemovePayoutAccount(ctx, list[0].ID)
|
||||
err = Creator.RemovePayoutAccount(ctx, u.ID, list[0].ID)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
// Verify Empty
|
||||
list, err = Creator.ListPayoutAccounts(ctx)
|
||||
list, err = Creator.ListPayoutAccounts(ctx, u.ID)
|
||||
So(err, ShouldBeNil)
|
||||
So(len(list), ShouldEqual, 0)
|
||||
})
|
||||
@@ -222,7 +251,15 @@ func (s *CreatorTestSuite) Test_PayoutAccount() {
|
||||
func (s *CreatorTestSuite) Test_Withdraw() {
|
||||
Convey("Withdraw", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
database.Truncate(ctx, s.DB, models.TableNameTenant, models.TableNamePayoutAccount, models.TableNameUser, models.TableNameOrder, models.TableNameTenantLedger)
|
||||
database.Truncate(
|
||||
ctx,
|
||||
s.DB,
|
||||
models.TableNameTenant,
|
||||
models.TableNamePayoutAccount,
|
||||
models.TableNameUser,
|
||||
models.TableNameOrder,
|
||||
models.TableNameTenantLedger,
|
||||
)
|
||||
|
||||
u := &models.User{Username: "creator6", Phone: "13700000006", Balance: 5000} // 50.00
|
||||
models.UserQuery.WithContext(ctx).Create(u)
|
||||
@@ -231,7 +268,14 @@ func (s *CreatorTestSuite) Test_Withdraw() {
|
||||
t := &models.Tenant{UserID: u.ID, Name: "Channel 6", Code: "127", Status: consts.TenantStatusVerified}
|
||||
models.TenantQuery.WithContext(ctx).Create(t)
|
||||
|
||||
pa := &models.PayoutAccount{TenantID: t.ID, UserID: u.ID, Type: "bank", Name: "Bank", Account: "123", Realname: "Creator"}
|
||||
pa := &models.PayoutAccount{
|
||||
TenantID: t.ID,
|
||||
UserID: u.ID,
|
||||
Type: "bank",
|
||||
Name: "Bank",
|
||||
Account: "123",
|
||||
Realname: "Creator",
|
||||
}
|
||||
models.PayoutAccountQuery.WithContext(ctx).Create(pa)
|
||||
|
||||
Convey("should withdraw successfully", func() {
|
||||
@@ -239,7 +283,7 @@ func (s *CreatorTestSuite) Test_Withdraw() {
|
||||
Amount: 20.00,
|
||||
AccountID: cast.ToString(pa.ID),
|
||||
}
|
||||
err := Creator.Withdraw(ctx, form)
|
||||
err := Creator.Withdraw(ctx, u.ID, form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
// Verify Balance Deducted
|
||||
@@ -247,7 +291,9 @@ func (s *CreatorTestSuite) Test_Withdraw() {
|
||||
So(uReload.Balance, ShouldEqual, 3000)
|
||||
|
||||
// Verify Order Created
|
||||
o, _ := models.OrderQuery.WithContext(ctx).Where(models.OrderQuery.TenantID.Eq(t.ID), models.OrderQuery.Type.Eq(consts.OrderTypeWithdrawal)).First()
|
||||
o, _ := models.OrderQuery.WithContext(ctx).
|
||||
Where(models.OrderQuery.TenantID.Eq(t.ID), models.OrderQuery.Type.Eq(consts.OrderTypeWithdrawal)).
|
||||
First()
|
||||
So(o, ShouldNotBeNil)
|
||||
So(o.AmountPaid, ShouldEqual, 2000)
|
||||
|
||||
@@ -262,7 +308,7 @@ func (s *CreatorTestSuite) Test_Withdraw() {
|
||||
Amount: 100.00,
|
||||
AccountID: cast.ToString(pa.ID),
|
||||
}
|
||||
err := Creator.Withdraw(ctx, form)
|
||||
err := Creator.Withdraw(ctx, u.ID, form)
|
||||
So(err, ShouldNotBeNil)
|
||||
})
|
||||
})
|
||||
@@ -279,7 +325,7 @@ func (s *CreatorTestSuite) Test_Refund() {
|
||||
// Creator
|
||||
creator := &models.User{Username: "creator7", Phone: "13700000007", Balance: 5000} // Has funds
|
||||
models.UserQuery.WithContext(ctx).Create(creator)
|
||||
creatorCtx := context.WithValue(ctx, consts.CtxKeyUser, creator.ID)
|
||||
// creatorCtx := context.WithValue(ctx, consts.CtxKeyUser, creator.ID)
|
||||
|
||||
// Tenant
|
||||
t := &models.Tenant{UserID: creator.ID, Name: "Channel 7", Code: "128", Status: consts.TenantStatusVerified}
|
||||
@@ -298,11 +344,12 @@ func (s *CreatorTestSuite) Test_Refund() {
|
||||
}
|
||||
models.OrderQuery.WithContext(ctx).Create(o)
|
||||
models.OrderItemQuery.WithContext(ctx).Create(&models.OrderItem{OrderID: o.ID, ContentID: 100}) // Fake content
|
||||
models.ContentAccessQuery.WithContext(ctx).Create(&models.ContentAccess{UserID: buyer.ID, ContentID: 100, Status: consts.ContentAccessStatusActive})
|
||||
models.ContentAccessQuery.WithContext(ctx).
|
||||
Create(&models.ContentAccess{UserID: buyer.ID, ContentID: 100, Status: consts.ContentAccessStatusActive})
|
||||
|
||||
Convey("should accept refund", func() {
|
||||
form := &creator_dto.RefundForm{Action: "accept", Reason: "Defective"}
|
||||
err := Creator.ProcessRefund(creatorCtx, cast.ToString(o.ID), form)
|
||||
err := Creator.ProcessRefund(ctx, creator.ID, cast.ToString(o.ID), form)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
// Verify Order
|
||||
@@ -317,7 +364,9 @@ func (s *CreatorTestSuite) Test_Refund() {
|
||||
So(bReload.Balance, ShouldEqual, 1000) // 0 + 1000
|
||||
|
||||
// Verify Access
|
||||
acc, _ := models.ContentAccessQuery.WithContext(ctx).Where(models.ContentAccessQuery.UserID.Eq(buyer.ID)).First()
|
||||
acc, _ := models.ContentAccessQuery.WithContext(ctx).
|
||||
Where(models.ContentAccessQuery.UserID.Eq(buyer.ID)).
|
||||
First()
|
||||
So(acc.Status, ShouldEqual, consts.ContentAccessStatusRevoked)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user