offline-twitter/pkg/webserver/handler_follow_unfollow_test.go
2025-02-15 19:46:10 -08:00

61 lines
1.7 KiB
Go

package webserver_test
import (
"testing"
"net/http/httptest"
"strings"
"github.com/andybalholm/cascadia"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/html"
)
// TODO: deprecated-offline-follows
func TestFollowUnfollow(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
user, err := profile.GetUserByHandle("kwamurai")
require.NoError(err)
require.False(user.IsFollowed)
// Follow the user
resp := do_request(httptest.NewRequest("POST", "/follow/kwamurai", nil))
require.Equal(resp.StatusCode, 200)
root, err := html.Parse(resp.Body)
require.NoError(err)
button := cascadia.Query(root, selector("button"))
assert.Contains(button.Attr, html.Attribute{Key: "hx-post", Val: "/unfollow/kwamurai"})
assert.Equal(strings.TrimSpace(button.FirstChild.Data), "Unfollow")
user, err = profile.GetUserByHandle("kwamurai")
require.NoError(err)
require.True(user.IsFollowed)
// Unfollow the user
resp = do_request(httptest.NewRequest("POST", "/unfollow/kwamurai", nil))
require.Equal(resp.StatusCode, 200)
root, err = html.Parse(resp.Body)
require.NoError(err)
button = cascadia.Query(root, selector("button"))
assert.Contains(button.Attr, html.Attribute{Key: "hx-post", Val: "/follow/kwamurai"})
assert.Equal(strings.TrimSpace(button.FirstChild.Data), "Follow")
user, err = profile.GetUserByHandle("kwamurai")
require.NoError(err)
require.False(user.IsFollowed)
}
func TestFollowUnfollowPostOnly(t *testing.T) {
require := require.New(t)
resp := do_request(httptest.NewRequest("GET", "/follow/kwamurai", nil))
require.Equal(resp.StatusCode, 405)
resp = do_request(httptest.NewRequest("GET", "/unfollow/kwamurai", nil))
require.Equal(resp.StatusCode, 405)
}