81 lines
1.9 KiB
Go
81 lines
1.9 KiB
Go
package services
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"testing"
|
|
|
|
"quyun/v2/app/commands/testx"
|
|
"quyun/v2/database"
|
|
"quyun/v2/database/models"
|
|
"quyun/v2/pkg/consts"
|
|
|
|
. "github.com/smartystreets/goconvey/convey"
|
|
"github.com/stretchr/testify/suite"
|
|
"go.ipao.vip/atom/contracts"
|
|
"go.uber.org/dig"
|
|
)
|
|
|
|
type TenantTestSuiteInjectParams struct {
|
|
dig.In
|
|
|
|
DB *sql.DB
|
|
Initials []contracts.Initial `group:"initials"`
|
|
}
|
|
|
|
type TenantTestSuite struct {
|
|
suite.Suite
|
|
TenantTestSuiteInjectParams
|
|
}
|
|
|
|
func Test_Tenant(t *testing.T) {
|
|
providers := testx.Default().With(Provide)
|
|
|
|
testx.Serve(providers, t, func(p TenantTestSuiteInjectParams) {
|
|
suite.Run(t, &TenantTestSuite{TenantTestSuiteInjectParams: p})
|
|
})
|
|
}
|
|
|
|
func (s *TenantTestSuite) Test_Follow() {
|
|
Convey("Follow Flow", s.T(), func() {
|
|
ctx := s.T().Context()
|
|
database.Truncate(ctx, s.DB, models.TableNameTenant, models.TableNameTenantUser, models.TableNameUser)
|
|
|
|
// User
|
|
u := &models.User{Username: "user_f", Phone: "13900000004"}
|
|
models.UserQuery.WithContext(ctx).Create(u)
|
|
ctx = context.WithValue(ctx, consts.CtxKeyUser, u.ID)
|
|
|
|
// Tenant
|
|
t := &models.Tenant{Name: "Tenant A", Status: consts.TenantStatusVerified}
|
|
models.TenantQuery.WithContext(ctx).Create(t)
|
|
|
|
Convey("should follow tenant", func() {
|
|
err := Tenant.Follow(ctx, u.ID, t.ID)
|
|
So(err, ShouldBeNil)
|
|
|
|
// Verify stats
|
|
profile, err := Tenant.GetPublicProfile(ctx, u.ID, t.ID)
|
|
So(err, ShouldBeNil)
|
|
So(profile.IsFollowing, ShouldBeTrue)
|
|
So(profile.Stats.Followers, ShouldEqual, 1)
|
|
|
|
// List Followed
|
|
list, err := Tenant.ListFollowed(ctx, u.ID)
|
|
So(err, ShouldBeNil)
|
|
So(len(list), ShouldEqual, 1)
|
|
So(list[0].Name, ShouldEqual, "Tenant A")
|
|
|
|
// Unfollow
|
|
err = Tenant.Unfollow(ctx, u.ID, t.ID)
|
|
So(err, ShouldBeNil)
|
|
|
|
// Verify
|
|
profile, err = Tenant.GetPublicProfile(ctx, u.ID, t.ID)
|
|
So(err, ShouldBeNil)
|
|
So(profile.IsFollowing, ShouldBeFalse)
|
|
So(profile.Stats.Followers, ShouldEqual, 0)
|
|
})
|
|
})
|
|
}
|