diff options
Diffstat (limited to 'internal/federation/federatingdb/accept_test.go')
| -rw-r--r-- | internal/federation/federatingdb/accept_test.go | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/internal/federation/federatingdb/accept_test.go b/internal/federation/federatingdb/accept_test.go new file mode 100644 index 000000000..2651c6a5f --- /dev/null +++ b/internal/federation/federatingdb/accept_test.go @@ -0,0 +1,120 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// 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 federatingdb_test + +import ( + "bytes" + "io" + "testing" + + "code.superseriousbusiness.org/activity/streams/vocab" + "code.superseriousbusiness.org/gotosocial/internal/ap" + "code.superseriousbusiness.org/gotosocial/internal/gtsmodel" + "code.superseriousbusiness.org/gotosocial/internal/messages" + "code.superseriousbusiness.org/gotosocial/testrig" + "github.com/stretchr/testify/suite" +) + +const ( + rMediaPath = "../../../testrig/media" + rTemplatePath = "../../../web/template" +) + +type AcceptTestSuite struct { + FederatingDBTestSuite +} + +func (suite *AcceptTestSuite) TestAcceptRemoteReplyRequest() { + // Accept of a reply by + // brand_new_person to foss_satan. + const acceptJSON = `{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://gotosocial.org/ns" + ], + "type": "Accept", + "to": "https://unknown-instance.com/users/brand_new_person", + "cc": "https://www.w3.org/ns/activitystreams#Public", + "id": "http://fossbros-anonymous.io/users/foss_satan/accepts/1234", + "actor": "http://fossbros-anonymous.io/users/foss_satan", + "object": { + "type": "ReplyRequest", + "id": "https://unknown-instance.com/users/brand_new_person/statuses/01H641QSRS3TCXSVC10X4GPKW7/replyRequest", + "actor": "https://unknown-instance.com/users/brand_new_person", + "object": "http://fossbros-anonymous.io/users/foss_satan/statuses/01FVW7JHQFSFK166WWKR8CBA6M", + "instrument": "https://unknown-instance.com/users/brand_new_person/statuses/01H641QSRS3TCXSVC10X4GPKW7" + }, + "result": "http://fossbros-anonymous.io/users/foss_satan/authorizations/1234" +}` + + // The accept will be delivered by foss_satan to zork. + ctx := createTestContext( + suite.T(), + suite.testAccounts["local_account_1"], + suite.testAccounts["remote_account_1"], + ) + + // Have zork follow foss_satan for this test, + // else the message will be scattered unto the four winds. + follow := >smodel.Follow{ + ID: "01K4STEH5NWAXBZ4TFNGQQQ984", + CreatedAt: testrig.TimeMustParse("2022-05-14T13:21:09+02:00"), + UpdatedAt: testrig.TimeMustParse("2022-05-14T13:21:09+02:00"), + AccountID: "01F8MH1H7YV1Z7D2C8K2730QBF", + TargetAccountID: "01F8MH5ZK5VRH73AKHQM6Y9VNX", + URI: "http://localhost:8080/users/the_mighty_zork/follow/01G1TK3PQKFW1BQZ9WVYRTFECK", + } + if err := suite.state.DB.PutFollow(ctx, follow); err != nil { + suite.FailNow(err.Error()) + } + + // Parse accept into vocab.Type. + t, err := ap.DecodeType(ctx, io.NopCloser(bytes.NewBufferString(acceptJSON))) + if err != nil { + suite.FailNow(err.Error()) + } + accept := t.(vocab.ActivityStreamsAccept) + + // Process the accept. + if err := suite.federatingDB.Accept(ctx, accept); err != nil { + suite.FailNow(err.Error()) + } + + // There should be an accept msg + // heading to the processor now. + msg, ok := suite.state.Workers.Federator.Queue.PopCtx(ctx) + if !ok { + suite.FailNow("no message in queue") + } + + suite.EqualValues( + &messages.FromFediAPI{ + APObjectType: "ReplyRequest", + APActivityType: "Accept", + APIRI: testrig.URLMustParse("http://fossbros-anonymous.io/users/foss_satan/authorizations/1234"), + APObject: testrig.URLMustParse("https://unknown-instance.com/users/brand_new_person/statuses/01H641QSRS3TCXSVC10X4GPKW7"), + Requesting: suite.testAccounts["remote_account_1"], + Receiving: suite.testAccounts["local_account_1"], + }, + msg, + ) +} + +func TestAcceptTestSuite(t *testing.T) { + suite.Run(t, new(AcceptTestSuite)) +} |
