summaryrefslogtreecommitdiff
path: root/internal/api/client/statuses/statushistory_test.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2024-04-17 14:06:49 +0200
committerLibravatar GitHub <noreply@github.com>2024-04-17 13:06:49 +0100
commitef16919d4a551ead52bb0c7f9ae3f6974b073472 (patch)
tree3dc372cf00447e6dae01bc4498e1a3e0355919a3 /internal/api/client/statuses/statushistory_test.go
parent[bugfix] Fix minor API issue w/ boosted statuses (#2846) (diff)
downloadgotosocial-ef16919d4a551ead52bb0c7f9ae3f6974b073472.tar.xz
[feature] Stub status history endpoint (#2847)
Diffstat (limited to 'internal/api/client/statuses/statushistory_test.go')
-rw-r--r--internal/api/client/statuses/statushistory_test.go133
1 files changed, 133 insertions, 0 deletions
diff --git a/internal/api/client/statuses/statushistory_test.go b/internal/api/client/statuses/statushistory_test.go
new file mode 100644
index 000000000..e524e9239
--- /dev/null
+++ b/internal/api/client/statuses/statushistory_test.go
@@ -0,0 +1,133 @@
+// 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 statuses_test
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "strings"
+ "testing"
+
+ "github.com/gin-gonic/gin"
+ "github.com/stretchr/testify/suite"
+ "github.com/superseriousbusiness/gotosocial/internal/api/client/statuses"
+ "github.com/superseriousbusiness/gotosocial/internal/oauth"
+ "github.com/superseriousbusiness/gotosocial/testrig"
+)
+
+type StatusHistoryTestSuite struct {
+ StatusStandardTestSuite
+}
+
+func (suite *StatusHistoryTestSuite) TestGetHistory() {
+ var (
+ testApplication = suite.testApplications["application_1"]
+ testAccount = suite.testAccounts["local_account_1"]
+ testUser = suite.testUsers["local_account_1"]
+ testToken = oauth.DBTokenToToken(suite.testTokens["local_account_1"])
+ targetStatusID = suite.testStatuses["local_account_1_status_1"].ID
+ target = fmt.Sprintf("http://localhost:8080%s", strings.ReplaceAll(statuses.HistoryPath, ":id", targetStatusID))
+ )
+
+ // Setup request.
+ recorder := httptest.NewRecorder()
+ request := httptest.NewRequest(http.MethodGet, target, nil)
+ request.Header.Set("accept", "application/json")
+ ctx, _ := testrig.CreateGinTestContext(recorder, request)
+
+ // Set auth + path params.
+ ctx.Set(oauth.SessionAuthorizedApplication, testApplication)
+ ctx.Set(oauth.SessionAuthorizedToken, testToken)
+ ctx.Set(oauth.SessionAuthorizedUser, testUser)
+ ctx.Set(oauth.SessionAuthorizedAccount, testAccount)
+ ctx.Params = gin.Params{
+ gin.Param{
+ Key: statuses.IDKey,
+ Value: targetStatusID,
+ },
+ }
+
+ // Call the handler.
+ suite.statusModule.StatusHistoryGETHandler(ctx)
+
+ // Check code.
+ if code := recorder.Code; code != http.StatusOK {
+ suite.FailNow("", "unexpected http code: %d", code)
+ }
+
+ // Read body.
+ result := recorder.Result()
+ defer result.Body.Close()
+
+ b, err := io.ReadAll(result.Body)
+ if err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ // Indent nicely.
+ dst := new(bytes.Buffer)
+ if err := json.Indent(dst, b, "", " "); err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ suite.Equal(`[
+ {
+ "content": "hello everyone!",
+ "spoiler_text": "introduction post",
+ "sensitive": true,
+ "created_at": "2021-10-20T10:40:37.000Z",
+ "account": {
+ "id": "01F8MH1H7YV1Z7D2C8K2730QBF",
+ "username": "the_mighty_zork",
+ "acct": "the_mighty_zork",
+ "display_name": "original zork (he/they)",
+ "locked": false,
+ "discoverable": true,
+ "bot": false,
+ "created_at": "2022-05-20T11:09:18.000Z",
+ "note": "\u003cp\u003ehey yo this is my profile!\u003c/p\u003e",
+ "url": "http://localhost:8080/@the_mighty_zork",
+ "avatar": "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/original/01F8MH58A357CV5K7R7TJMSH6S.jpg",
+ "avatar_static": "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/avatar/small/01F8MH58A357CV5K7R7TJMSH6S.jpg",
+ "header": "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/original/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg",
+ "header_static": "http://localhost:8080/fileserver/01F8MH1H7YV1Z7D2C8K2730QBF/header/small/01PFPMWK2FF0D9WMHEJHR07C3Q.jpg",
+ "followers_count": 2,
+ "following_count": 2,
+ "statuses_count": 7,
+ "last_status_at": "2023-12-10T09:24:00.000Z",
+ "emojis": [],
+ "fields": [],
+ "enable_rss": true,
+ "role": {
+ "name": "user"
+ }
+ },
+ "poll": null,
+ "media_attachments": [],
+ "emojis": []
+ }
+]`, dst.String())
+}
+
+func TestStatusHistoryTestSuite(t *testing.T) {
+ suite.Run(t, new(StatusHistoryTestSuite))
+}