[chore] Add a couple tests for updating list entries (#2580)

This commit is contained in:
tobi 2024-01-28 13:01:12 +01:00 committed by GitHub
parent 7e0a203173
commit 14b684b2b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 128 additions and 0 deletions

View file

@ -0,0 +1,126 @@
// 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 lists_test
import (
"context"
"fmt"
"io"
"net/http"
"net/http/httptest"
"testing"
"codeberg.org/gruf/go-bytes"
"github.com/stretchr/testify/suite"
"github.com/superseriousbusiness/gotosocial/internal/api/client/lists"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/oauth"
"github.com/superseriousbusiness/gotosocial/testrig"
)
type ListAccountsAddTestSuite struct {
ListsStandardTestSuite
}
func (suite *ListAccountsAddTestSuite) postListAccounts(
expectedHTTPStatus int,
listID string,
accountIDs []string,
) ([]byte, error) {
var (
recorder = httptest.NewRecorder()
ctx, _ = testrig.CreateGinTestContext(recorder, nil)
)
// Prepare test context.
ctx.Set(oauth.SessionAuthorizedAccount, suite.testAccounts["local_account_1"])
ctx.Set(oauth.SessionAuthorizedToken, oauth.DBTokenToToken(suite.testTokens["local_account_1"]))
ctx.Set(oauth.SessionAuthorizedApplication, suite.testApplications["application_1"])
ctx.Set(oauth.SessionAuthorizedUser, suite.testUsers["local_account_1"])
// Inject path parameters.
ctx.AddParam("id", listID)
// Inject query parameters.
requestPath := config.GetProtocol() + "://" + config.GetHost() + "/api/" + lists.BasePath + "/" + listID + "/accounts"
// Prepare test body.
buf, w, err := testrig.CreateMultipartFormData("", "", map[string][]string{
"account_ids[]": accountIDs,
})
// Prepare test context request.
request := httptest.NewRequest(http.MethodPost, requestPath, bytes.NewReader(buf.Bytes()))
request.Header.Set("accept", "application/json")
request.Header.Set("content-type", w.FormDataContentType())
ctx.Request = request
// trigger the handler
suite.listsModule.ListAccountsPOSTHandler(ctx)
// read the response
result := recorder.Result()
defer result.Body.Close()
b, err := io.ReadAll(result.Body)
if err != nil {
return nil, err
}
// Check status code.
if status := recorder.Code; expectedHTTPStatus != status {
err = fmt.Errorf("expected %d got %d", expectedHTTPStatus, status)
}
return b, err
}
func (suite *ListAccountsAddTestSuite) TestPostListAccountNotFollowed() {
listID := suite.testLists["local_account_1_list_1"].ID
accountIDs := []string{
suite.testAccounts["remote_account_1"].ID,
}
resp, err := suite.postListAccounts(http.StatusNotFound, listID, accountIDs)
suite.NoError(err)
suite.Equal(`{"error":"Not Found: you do not follow account 01F8MH5ZK5VRH73AKHQM6Y9VNX"}`, string(resp))
}
func (suite *ListAccountsAddTestSuite) TestPostListAccountOK() {
// Remove turtle from the list.
if err := suite.db.DeleteListEntry(
context.Background(),
suite.testListEntries["local_account_1_list_1_entry_1"].ID,
); err != nil {
suite.FailNow(err.Error())
}
// Add turtle back to the list.
listID := suite.testLists["local_account_1_list_1"].ID
accountIDs := []string{
suite.testAccounts["local_account_2"].ID,
}
resp, err := suite.postListAccounts(http.StatusOK, listID, accountIDs)
suite.NoError(err)
suite.Equal(`{}`, string(resp))
}
func TestListAccountsAddTestSuite(t *testing.T) {
suite.Run(t, new(ListAccountsAddTestSuite))
}

View file

@ -55,6 +55,7 @@ type ListsStandardTestSuite struct {
testEmojis map[string]*gtsmodel.Emoji
testEmojiCategories map[string]*gtsmodel.EmojiCategory
testLists map[string]*gtsmodel.List
testListEntries map[string]*gtsmodel.ListEntry
// module being tested
listsModule *lists.Module
@ -71,6 +72,7 @@ func (suite *ListsStandardTestSuite) SetupSuite() {
suite.testEmojis = testrig.NewTestEmojis()
suite.testEmojiCategories = testrig.NewTestEmojiCategories()
suite.testLists = testrig.NewTestLists()
suite.testListEntries = testrig.NewTestListEntries()
}
func (suite *ListsStandardTestSuite) SetupTest() {