feat: sync durable moderation and appeals
This commit is contained in:
parent
e1a95c7318
commit
9f467f4be7
140 changed files with 13730 additions and 316 deletions
71
internal/rpc/account_reports_rpc_test.go
Normal file
71
internal/rpc/account_reports_rpc_test.go
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/iamxvbaba/td/clock"
|
||||
"github.com/iamxvbaba/td/tg"
|
||||
"go.uber.org/zap/zaptest"
|
||||
|
||||
appmoderation "telesrv/internal/app/moderation"
|
||||
appusers "telesrv/internal/app/users"
|
||||
"telesrv/internal/domain"
|
||||
"telesrv/internal/store/memory"
|
||||
)
|
||||
|
||||
func TestAccountReportPeerPersistsImmutableSnapshot(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
users := memory.NewUserStore()
|
||||
reporter, err := users.Create(ctx, domain.User{
|
||||
AccessHash: 101, Phone: "15550005001", FirstName: "Reporter",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
target, err := users.Create(ctx, domain.User{
|
||||
AccessHash: 202, Phone: "15550005002", FirstName: "Target",
|
||||
Username: "reported_target", About: "original bio",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
userService := appusers.NewService(users)
|
||||
reports := memory.NewModerationReportStore()
|
||||
router := New(Config{}, Deps{
|
||||
Users: userService,
|
||||
Moderation: appmoderation.NewService(
|
||||
reports, appmoderation.WithPeerReaders(userService, nil),
|
||||
),
|
||||
}, zaptest.NewLogger(t), clock.System)
|
||||
ok, err := router.onAccountReportPeer(
|
||||
WithUserID(ctx, reporter.ID),
|
||||
&tg.AccountReportPeerRequest{
|
||||
Peer: &tg.InputPeerUser{
|
||||
UserID: target.ID, AccessHash: target.AccessHash,
|
||||
},
|
||||
Reason: &tg.InputReportReasonFake{},
|
||||
Message: "This profile impersonates someone.",
|
||||
},
|
||||
)
|
||||
if err != nil || !ok {
|
||||
t.Fatalf("report peer ok=%v err=%v", ok, err)
|
||||
}
|
||||
stored := reports.Reports()
|
||||
if len(stored) != 1 ||
|
||||
stored[0].ReporterUserID != reporter.ID ||
|
||||
stored[0].Target != (domain.Peer{Type: domain.PeerTypeUser, ID: target.ID}) ||
|
||||
stored[0].Reason != domain.ModerationReasonFake ||
|
||||
len(stored[0].Items) != 1 ||
|
||||
stored[0].Items[0].Kind != domain.ModerationItemPeer {
|
||||
t.Fatalf("stored report=%+v", stored)
|
||||
}
|
||||
if _, err := users.UpdateProfile(ctx, target.ID, "Changed", "", "changed later"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
again, found, err := reports.GetModerationReport(ctx, stored[0].ID)
|
||||
if err != nil || !found ||
|
||||
string(again.Items[0].Evidence) != string(stored[0].Items[0].Evidence) {
|
||||
t.Fatalf("immutable snapshot=%+v found=%v err=%v", again, found, err)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue