[chore] Refactor account deleting/block logic, tidy up some other processing things (#1599)

* start refactoring account deletion

* update to use state.DB

* further messing about

* some more tidying up

* more tidying, cleaning, nice-making

* further adventures in refactoring and the woes of technical debt

* update fr accept/reject

* poking + prodding

* fix up deleting

* create fave uri

* don't log using requestingAccount.ID because it might be nil

* move getBookmarks function

* use exists query to check for status bookmark

* use deletenotifications func

* fiddle

* delete follow request notif

* split up some db functions

* Fix possible nil pointer panic

* fix more possible nil pointers

* fix license headers

* warn when follow missing (target) account

* return wrapped err when bookmark/fave models can't be retrieved

* simplify self account delete

* warn log likely race condition

* de-sillify status delete loop

* move error check due north

* warn when unfollowSideEffects has no target account

* warn when no boost account is found

* warn + dump follow when no account

* more warnings

* warn on fave account not set

* move for loop inside anonymous function

* fix funky logic

* don't remove mutual account items on block;
do make sure unfollow occurs in both directions!
This commit is contained in:
tobi 2023-03-20 19:10:08 +01:00 committed by GitHub
commit e8595f0c64
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 2472 additions and 1321 deletions

View file

@ -19,11 +19,13 @@ package bundb_test
import (
"context"
"errors"
"fmt"
"testing"
"time"
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
"github.com/superseriousbusiness/gotosocial/internal/id"
"github.com/superseriousbusiness/gotosocial/testrig"
@ -112,10 +114,10 @@ func (suite *NotificationTestSuite) TestGetNotificationsWithoutSpam() {
}
}
func (suite *NotificationTestSuite) TestClearNotificationsWithSpam() {
func (suite *NotificationTestSuite) TestDeleteNotificationsWithSpam() {
suite.spamNotifs()
testAccount := suite.testAccounts["local_account_1"]
err := suite.db.ClearNotifications(context.Background(), testAccount.ID)
err := suite.db.DeleteNotifications(context.Background(), testAccount.ID, "")
suite.NoError(err)
notifications, err := suite.db.GetNotifications(context.Background(), testAccount.ID, []string{}, 20, id.Highest, id.Lowest)
@ -124,10 +126,10 @@ func (suite *NotificationTestSuite) TestClearNotificationsWithSpam() {
suite.Empty(notifications)
}
func (suite *NotificationTestSuite) TestClearNotificationsWithTwoAccounts() {
func (suite *NotificationTestSuite) TestDeleteNotificationsWithTwoAccounts() {
suite.spamNotifs()
testAccount := suite.testAccounts["local_account_1"]
err := suite.db.ClearNotifications(context.Background(), testAccount.ID)
err := suite.db.DeleteNotifications(context.Background(), testAccount.ID, "")
suite.NoError(err)
notifications, err := suite.db.GetNotifications(context.Background(), testAccount.ID, []string{}, 20, id.Highest, id.Lowest)
@ -141,6 +143,69 @@ func (suite *NotificationTestSuite) TestClearNotificationsWithTwoAccounts() {
suite.NotEmpty(notif)
}
func (suite *NotificationTestSuite) TestDeleteNotificationsOriginatingFromAccount() {
testAccount := suite.testAccounts["local_account_2"]
if err := suite.db.DeleteNotifications(context.Background(), "", testAccount.ID); err != nil {
suite.FailNow(err.Error())
}
notif := []*gtsmodel.Notification{}
if err := suite.db.GetAll(context.Background(), &notif); err != nil && !errors.Is(err, db.ErrNoEntries) {
suite.FailNow(err.Error())
}
for _, n := range notif {
if n.OriginAccountID == testAccount.ID {
suite.FailNowf("", "no notifications with origin account id %s should remain", testAccount.ID)
}
}
}
func (suite *NotificationTestSuite) TestDeleteNotificationsOriginatingFromAndTargetingAccount() {
originAccount := suite.testAccounts["local_account_2"]
targetAccount := suite.testAccounts["admin_account"]
if err := suite.db.DeleteNotifications(context.Background(), targetAccount.ID, originAccount.ID); err != nil {
suite.FailNow(err.Error())
}
notif := []*gtsmodel.Notification{}
if err := suite.db.GetAll(context.Background(), &notif); err != nil && !errors.Is(err, db.ErrNoEntries) {
suite.FailNow(err.Error())
}
for _, n := range notif {
if n.OriginAccountID == originAccount.ID || n.TargetAccountID == targetAccount.ID {
suite.FailNowf(
"",
"no notifications with origin account id %s and target account %s should remain",
originAccount.ID,
targetAccount.ID,
)
}
}
}
func (suite *NotificationTestSuite) TestDeleteNotificationsPertainingToStatusID() {
testStatus := suite.testStatuses["local_account_1_status_1"]
if err := suite.db.DeleteNotificationsForStatus(context.Background(), testStatus.ID); err != nil {
suite.FailNow(err.Error())
}
notif := []*gtsmodel.Notification{}
if err := suite.db.GetAll(context.Background(), &notif); err != nil && !errors.Is(err, db.ErrNoEntries) {
suite.FailNow(err.Error())
}
for _, n := range notif {
if n.StatusID == testStatus.ID {
suite.FailNowf("", "no notifications with status id %s should remain", testStatus.ID)
}
}
}
func TestNotificationTestSuite(t *testing.T) {
suite.Run(t, new(NotificationTestSuite))
}