149 lines
4.2 KiB
Go
149 lines
4.2 KiB
Go
package webserver_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"net/http/httptest"
|
|
|
|
"github.com/andybalholm/cascadia"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/net/html"
|
|
)
|
|
|
|
func TestUserFeed(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/cernovich", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
title_node := cascadia.Query(root, selector("title"))
|
|
assert.Equal(title_node.FirstChild.Data, "@Cernovich | Offline Twitter")
|
|
|
|
assert.Len(cascadia.QueryAll(root, selector(".timeline > .tweet")), 8)
|
|
assert.Len(cascadia.QueryAll(root, selector(".timeline > .pinned-tweet")), 1)
|
|
assert.Len(cascadia.QueryAll(root, selector(".tweet")), 12) // Pinned tweet appears again
|
|
}
|
|
|
|
func TestUserFeedWithEntityInBio(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/michaelmalice", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
bio_entities := cascadia.QueryAll(root, selector(".user-header__bio .entity"))
|
|
require.Len(bio_entities, 1)
|
|
assert.Equal(bio_entities[0].FirstChild.Data, "@SheathUnderwear")
|
|
}
|
|
|
|
func TestUserFeedMissing(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/awefhwefhwejh", nil))
|
|
require.Equal(resp.StatusCode, 404)
|
|
}
|
|
|
|
func TestUserFeedWithCursor(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
// With a cursor
|
|
req := httptest.NewRequest("GET", "/cernovich?cursor=1631935701000", nil)
|
|
req.Header.Set("HX-Request", "true")
|
|
resp := do_request(req)
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(":not(.tweet__quoted-tweet) > .tweet")), 2)
|
|
}
|
|
|
|
func TestUserFeedWithCursorBadNumber(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
// With a cursor but it sucks
|
|
resp := do_request(httptest.NewRequest("GET", "/cernovich?cursor=asdf", nil))
|
|
require.Equal(resp.StatusCode, 400)
|
|
}
|
|
|
|
func TestUserFeedTweetsOnlyTab(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/Peter_Nimitz/without_replies", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tweets := cascadia.QueryAll(root, selector(".timeline > .tweet"))
|
|
assert.Len(tweets, 2)
|
|
}
|
|
|
|
func TestUserFeedMediaTab(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/Cernovich/media", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tweets := cascadia.QueryAll(root, selector(".timeline > .tweet"))
|
|
assert.Len(tweets, 1)
|
|
}
|
|
|
|
func TestUserFeedLikesTab(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/MysteryGrove/likes", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tweets := cascadia.QueryAll(root, selector(".timeline > .tweet"))
|
|
assert.Len(tweets, 5)
|
|
|
|
// Double check pagination works properly
|
|
resp = do_request(httptest.NewRequest("GET", "/MysteryGrove/likes?cursor=5", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err = html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tweets = cascadia.QueryAll(root, selector(".timeline > .tweet"))
|
|
assert.Len(tweets, 4)
|
|
}
|
|
|
|
// Followers and followees
|
|
// -----------------------
|
|
|
|
func TestUserFollowers(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/Offline_Twatter/followers", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(".users-list > .user")), 2)
|
|
}
|
|
|
|
func TestUserFollowees(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/Offline_Twatter/followees", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(".users-list > .user")), 1)
|
|
}
|