[chore] Add a couple tests for updating list entries (#2580)
This commit is contained in:
parent
7e0a203173
commit
14b684b2b5
|
@ -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
|
testEmojis map[string]*gtsmodel.Emoji
|
||||||
testEmojiCategories map[string]*gtsmodel.EmojiCategory
|
testEmojiCategories map[string]*gtsmodel.EmojiCategory
|
||||||
testLists map[string]*gtsmodel.List
|
testLists map[string]*gtsmodel.List
|
||||||
|
testListEntries map[string]*gtsmodel.ListEntry
|
||||||
|
|
||||||
// module being tested
|
// module being tested
|
||||||
listsModule *lists.Module
|
listsModule *lists.Module
|
||||||
|
@ -71,6 +72,7 @@ func (suite *ListsStandardTestSuite) SetupSuite() {
|
||||||
suite.testEmojis = testrig.NewTestEmojis()
|
suite.testEmojis = testrig.NewTestEmojis()
|
||||||
suite.testEmojiCategories = testrig.NewTestEmojiCategories()
|
suite.testEmojiCategories = testrig.NewTestEmojiCategories()
|
||||||
suite.testLists = testrig.NewTestLists()
|
suite.testLists = testrig.NewTestLists()
|
||||||
|
suite.testListEntries = testrig.NewTestListEntries()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (suite *ListsStandardTestSuite) SetupTest() {
|
func (suite *ListsStandardTestSuite) SetupTest() {
|
||||||
|
|
Loading…
Reference in New Issue