142 lines
4.4 KiB
Go
142 lines
4.4 KiB
Go
package webserver_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"net/http/httptest"
|
|
|
|
"github.com/andybalholm/cascadia"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/net/html"
|
|
|
|
. "gitlab.com/offline-twitter/twitter_offline_engine/pkg/persistence"
|
|
)
|
|
|
|
func TestTweetDetail(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/1413773185296650241", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tweet_nodes := cascadia.QueryAll(root, selector(".tweet"))
|
|
assert.Len(tweet_nodes, 4)
|
|
}
|
|
|
|
func TestTweetDetailMissing(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/100089", nil))
|
|
require.Equal(resp.StatusCode, 404)
|
|
}
|
|
|
|
func TestTweetDetailInvalidNumber(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/fwjgkj", nil))
|
|
require.Equal(resp.StatusCode, 400)
|
|
}
|
|
|
|
func TestTweetsWithContent(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
// Poll
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/1465534109573390348", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(".poll")), 1)
|
|
assert.Len(cascadia.QueryAll(root, selector(".poll__choice")), 4)
|
|
|
|
// Video
|
|
resp = do_request(httptest.NewRequest("GET", "/tweet/1453461248142495744", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err = html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector("video")), 1)
|
|
|
|
// Url
|
|
resp = do_request(httptest.NewRequest("GET", "/tweet/1438642143170646017", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err = html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(".embedded-link")), 3)
|
|
|
|
// Space
|
|
resp = do_request(httptest.NewRequest("GET", "/tweet/1624833173514293249", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err = html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
assert.Len(cascadia.QueryAll(root, selector(".space")), 1)
|
|
assert.Len(cascadia.QueryAll(root, selector("ul.space__participants-list li")), 9)
|
|
}
|
|
|
|
func TestTweetWithEntities(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/1489944024278523906", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
entities := cascadia.QueryAll(root, selector(".entity"))
|
|
assert.Len(entities, 2)
|
|
assert.Equal(entities[0].Data, "a")
|
|
assert.Equal(entities[0].FirstChild.Data, "@gofundme")
|
|
assert.Contains(entities[0].Attr, html.Attribute{Key: "href", Val: "/gofundme"})
|
|
assert.Equal(entities[1].Data, "a")
|
|
assert.Equal(entities[1].FirstChild.Data, "#BankruptGoFundMe")
|
|
assert.Contains(entities[1].Attr, html.Attribute{Key: "href", Val: "/search/%23BankruptGoFundMe"})
|
|
}
|
|
|
|
func TestLongTweet(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/1695110851324256692", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
paragraphs := cascadia.QueryAll(root, selector(".tweet .text"))
|
|
assert.Len(paragraphs, 22)
|
|
|
|
twt, err := profile.GetTweetById(TweetID(1695110851324256692))
|
|
require.NoError(err)
|
|
for i, s := range strings.Split(twt.Text, "\n") {
|
|
assert.Equal(strings.TrimSpace(s), strings.TrimSpace(paragraphs[i].FirstChild.Data))
|
|
}
|
|
}
|
|
|
|
func TestTombstoneTweet(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/31", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
tombstone := cascadia.Query(root, selector(".tweet .tombstone"))
|
|
assert.Equal("This Tweet was deleted by the Tweet author", strings.TrimSpace(tombstone.FirstChild.Data))
|
|
}
|
|
|
|
func TestTweetThread(t *testing.T) {
|
|
assert := assert.New(t)
|
|
require := require.New(t)
|
|
|
|
resp := do_request(httptest.NewRequest("GET", "/tweet/1698762403163304110", nil))
|
|
require.Equal(resp.StatusCode, 200)
|
|
root, err := html.Parse(resp.Body)
|
|
require.NoError(err)
|
|
|
|
reply_chains := cascadia.QueryAll(root, selector(".reply-chain"))
|
|
require.Len(reply_chains, 2)
|
|
|
|
thread_chain := reply_chains[0]
|
|
assert.Len(cascadia.QueryAll(thread_chain, selector(".reply-tweet")), 7)
|
|
}
|