88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package hostorg
|
||
|
||
import (
|
||
"context"
|
||
"testing"
|
||
|
||
"hyapp-admin-server/internal/appctx"
|
||
|
||
"github.com/DATA-DOG/go-sqlmock"
|
||
)
|
||
|
||
func TestUpdateManagerProfilePersistsStatus(t *testing.T) {
|
||
db, mock, err := sqlmock.New()
|
||
if err != nil {
|
||
t.Fatalf("new sqlmock: %v", err)
|
||
}
|
||
defer db.Close()
|
||
|
||
status := "disabled"
|
||
reader := NewReader(db, nil, nil)
|
||
ctx := appctx.WithContext(context.Background(), "lalu")
|
||
|
||
// 经理状态是 manager_profiles 的身份开关;PUT 传 status 时必须落到 UPDATE,否则前端刷新会重新读到旧状态。
|
||
mock.ExpectExec(`(?s)UPDATE manager_profiles\s+SET updated_at_ms = \?, status = \?\s+WHERE app_code = \? AND user_id = \?`).
|
||
WithArgs(sqlmock.AnyArg(), "disabled", "lalu", int64(1003)).
|
||
WillReturnResult(sqlmock.NewResult(0, 1))
|
||
mock.ExpectQuery(`(?s)SELECT COUNT\(DISTINCT mp\.user_id\).*FROM manager_profiles mp`).
|
||
WillReturnRows(sqlmock.NewRows([]string{"count"}).AddRow(int64(1)))
|
||
mock.ExpectQuery(`(?s)SELECT mp\.user_id, COALESCE\(manager\.current_display_user_id, ''\).*FROM manager_profiles mp`).
|
||
WillReturnRows(managerListRows().
|
||
AddRow(int64(1003), "1003", "manager", "avatar.png", int64(7), "西亚区", "disabled", "+63",
|
||
true, true, true, true, true, true, true, true, true, true,
|
||
int64(0), int64(0), int64(1710000000000), int64(1710000001000)))
|
||
|
||
item, err := reader.UpdateManagerProfile(ctx, 1003, 7, updateManagerRequest{Status: &status})
|
||
if err != nil {
|
||
t.Fatalf("update manager profile: %v", err)
|
||
}
|
||
if item.Status != "disabled" {
|
||
t.Fatalf("manager status = %q, want disabled", item.Status)
|
||
}
|
||
if err := mock.ExpectationsWereMet(); err != nil {
|
||
t.Fatalf("sql expectations: %v", err)
|
||
}
|
||
}
|
||
|
||
func TestUpdateManagerProfileRejectsInvalidStatus(t *testing.T) {
|
||
db, _, err := sqlmock.New()
|
||
if err != nil {
|
||
t.Fatalf("new sqlmock: %v", err)
|
||
}
|
||
defer db.Close()
|
||
|
||
status := "off"
|
||
reader := NewReader(db, nil, nil)
|
||
_, err = reader.UpdateManagerProfile(appctx.WithContext(context.Background(), "lalu"), 1003, 7, updateManagerRequest{Status: &status})
|
||
if err == nil || err.Error() != "manager status is invalid" {
|
||
t.Fatalf("invalid status error = %v", err)
|
||
}
|
||
}
|
||
|
||
func managerListRows() *sqlmock.Rows {
|
||
return sqlmock.NewRows([]string{
|
||
"user_id",
|
||
"current_display_user_id",
|
||
"username",
|
||
"avatar",
|
||
"region_id",
|
||
"region_name",
|
||
"status",
|
||
"contact_info",
|
||
"can_grant_avatar_frame",
|
||
"can_grant_vehicle",
|
||
"can_grant_badge",
|
||
"can_grant_vip",
|
||
"can_update_user_level",
|
||
"can_add_bd_leader",
|
||
"can_add_admin",
|
||
"can_add_superadmin",
|
||
"can_block_user",
|
||
"can_transfer_user_country",
|
||
"bd_leader_count",
|
||
"last_invited_at_ms",
|
||
"created_at_ms",
|
||
"updated_at_ms",
|
||
})
|
||
}
|