diff options
author | 2022-03-15 16:12:35 +0100 | |
---|---|---|
committer | 2022-03-15 16:12:35 +0100 | |
commit | 532c4cc6978a7fe707373106eebade237c89693a (patch) | |
tree | 937bf0a44ef2a8d8d366786693decf2c65b20db5 /internal/processing/account_test.go | |
parent | [performance] Add dereference shortcuts to avoid making http calls to self (#... (diff) | |
download | gotosocial-532c4cc6978a7fe707373106eebade237c89693a.tar.xz |
[feature] Federate local account deletion (#431)
* add account delete to API
* model account delete request
* add AccountDeleteLocal
* federate local account deletes
* add DeleteLocal
* update transport (controller) to allow shortcuts
* delete logic + testing
* update swagger docs
* more tests + fixes
Diffstat (limited to 'internal/processing/account_test.go')
-rw-r--r-- | internal/processing/account_test.go | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/internal/processing/account_test.go b/internal/processing/account_test.go new file mode 100644 index 000000000..f974f0b9d --- /dev/null +++ b/internal/processing/account_test.go @@ -0,0 +1,90 @@ +/* + GoToSocial + Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +package processing_test + +import ( + "context" + "encoding/json" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/activity/pub" + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" +) + +type AccountTestSuite struct { + ProcessingStandardTestSuite +} + +func (suite *AccountTestSuite) TestAccountDeleteLocal() { + ctx := context.Background() + deletingAccount := suite.testAccounts["local_account_1"] + followingAccount := suite.testAccounts["remote_account_1"] + + // make the following account follow the deleting account so that a delete message will be sent to it via the federating API + follow := >smodel.Follow{ + ID: "01FJ1S8DX3STJJ6CEYPMZ1M0R3", + CreatedAt: time.Now(), + UpdatedAt: time.Now(), + URI: fmt.Sprintf("%s/follow/01FJ1S8DX3STJJ6CEYPMZ1M0R3", followingAccount.URI), + AccountID: followingAccount.ID, + TargetAccountID: deletingAccount.ID, + } + err := suite.db.Put(ctx, follow) + suite.NoError(err) + + errWithCode := suite.processor.AccountDeleteLocal(ctx, suite.testAutheds["local_account_1"], &apimodel.AccountDeleteRequest{ + Password: "password", + DeleteOriginID: deletingAccount.ID, + }) + suite.NoError(errWithCode) + time.Sleep(1 * time.Second) // wait a sec for the delete to process + + // the delete should be federated outwards to the following account's inbox + sent, ok := suite.sentHTTPRequests[followingAccount.InboxURI] + suite.True(ok) + delete := &struct { + Actor string `json:"actor"` + ID string `json:"id"` + Object string `json:"object"` + To string `json:"to"` + CC string `json:"cc"` + Type string `json:"type"` + }{} + err = json.Unmarshal(sent, delete) + suite.NoError(err) + + suite.Equal(deletingAccount.URI, delete.Actor) + suite.Equal(deletingAccount.URI, delete.Object) + suite.Equal(deletingAccount.FollowersURI, delete.To) + suite.Equal(pub.PublicActivityPubIRI, delete.CC) + suite.Equal("Delete", delete.Type) + + // the deleted account should be deleted + dbAccount, err := suite.db.GetAccountByID(ctx, deletingAccount.ID) + suite.NoError(err) + suite.WithinDuration(dbAccount.SuspendedAt, time.Now(), 30*time.Second) +} + +func TestAccountTestSuite(t *testing.T) { + suite.Run(t, &AccountTestSuite{}) +} |