[feature] Implemented notification clear (#720)

* Implemented notification clear

* Added the cache clear mechanism

* added multi user check test
This commit is contained in:
Artémis 2022-08-01 11:13:49 +02:00 committed by GitHub
commit 4fdbef04b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 109 additions and 1 deletions

View file

@ -108,3 +108,17 @@ func (n *notificationDB) GetNotifications(ctx context.Context, accountID string,
return notifs, nil
}
func (n *notificationDB) ClearNotifications(ctx context.Context, accountID string) db.Error {
if _, err := n.conn.
NewDelete().
Table("notifications").
Where("target_account_id = ?", accountID).
Exec(ctx); err != nil {
return n.conn.ProcessError(err)
}
n.cache.Clear()
return nil
}

View file

@ -118,6 +118,35 @@ func (suite *NotificationTestSuite) TestGetNotificationsWithoutSpam() {
}
}
func (suite *NotificationTestSuite) TestClearNotificationsWithSpam() {
suite.spamNotifs()
testAccount := suite.testAccounts["local_account_1"]
err := suite.db.ClearNotifications(context.Background(), testAccount.ID)
suite.NoError(err)
notifications, err := suite.db.GetNotifications(context.Background(), testAccount.ID, 20, "ZZZZZZZZZZZZZZZZZZZZZZZZZZ", "00000000000000000000000000")
suite.NoError(err)
suite.NotNil(notifications)
suite.Empty(notifications)
}
func (suite *NotificationTestSuite) TestClearNotificationsWithTwoAccounts() {
suite.spamNotifs()
testAccount := suite.testAccounts["local_account_1"]
err := suite.db.ClearNotifications(context.Background(), testAccount.ID)
suite.NoError(err)
notifications, err := suite.db.GetNotifications(context.Background(), testAccount.ID, 20, "ZZZZZZZZZZZZZZZZZZZZZZZZZZ", "00000000000000000000000000")
suite.NoError(err)
suite.NotNil(notifications)
suite.Empty(notifications)
notif := []*gtsmodel.Notification{}
err = suite.db.GetAll(context.Background(), &notif)
suite.NoError(err)
suite.NotEmpty(notif)
}
func TestNotificationTestSuite(t *testing.T) {
suite.Run(t, new(NotificationTestSuite))
}

View file

@ -32,4 +32,6 @@ type Notification interface {
GetNotifications(ctx context.Context, accountID string, limit int, maxID string, sinceID string) ([]*gtsmodel.Notification, Error)
// GetNotification returns one notification according to its id.
GetNotification(ctx context.Context, id string) (*gtsmodel.Notification, Error)
// ClearNotifications deletes every notification that pertain to the given accountID.
ClearNotifications(ctx context.Context, accountID string) Error
}