mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-27 01:20:28 +00:00
[chore] Add a couple tests for updating list entries (#2580)
This commit is contained in:
parent
7e0a203173
commit
14b684b2b5
2 changed files with 128 additions and 0 deletions
126
internal/api/client/lists/listaccountsadd_test.go
Normal file
126
internal/api/client/lists/listaccountsadd_test.go
Normal 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))
|
||||
}
|
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue