offline-twitter/scraper/tweet_test.go

191 lines
4.8 KiB
Go
Raw Normal View History

2021-05-22 18:20:18 -04:00
package scraper_test
import (
"fmt"
2021-05-22 18:20:18 -04:00
"encoding/json"
"io/ioutil"
"testing"
"offline_twitter/scraper"
)
func TestParseSingleTweet(t *testing.T) {
data, err := ioutil.ReadFile("test_responses/dave_smith_anarchist_handbook.json")
if err != nil {
panic(err)
}
var tweet_resp scraper.TweetResponse
err = json.Unmarshal(data, &tweet_resp)
if err != nil {
t.Errorf(err.Error())
}
tweets := tweet_resp.GlobalObjects.Tweets
users := tweet_resp.GlobalObjects.Users
if len(tweets) != 11 {
t.Errorf("Expected %d tweets, got %d instead", 11, len(tweets))
}
if len(users) != 11 {
t.Errorf("Expected %d users, got %d instead", 11, len(users))
}
dave_smith_tweet, ok := tweets["1395881699142160387"]
if !ok {
t.Errorf("Didn't find the Dave Smith tweet.")
}
tweet, err := scraper.ParseSingleTweet(dave_smith_tweet)
if err != nil {
t.Fatalf(err.Error())
}
expected_text := "The fact that @michaelmalice new book The Anarchist Handbook is just absolutely destroying on the charts is the largest white pill Ive swallowed in years."
actual_text := tweet.Text
if actual_text != expected_text {
t.Errorf("Expected: %q; got %q", expected_text, actual_text)
}
if len(tweet.Mentions) != 1 || tweet.Mentions[0] != "michaelmalice" {
t.Errorf("Expected %v, got %v", []string{"michaelmalice"}, tweet.Mentions)
}
2021-06-13 14:34:20 -07:00
if tweet.PostedAt.Unix() != 1621639105 {
t.Errorf("Expected %d, got %d", 1621639105, tweet.PostedAt.Unix())
}
2021-05-22 18:20:18 -04:00
}
func TestParseSingleTweet2(t *testing.T) {
data, err := ioutil.ReadFile("test_responses/midriffs_anarchist_cookbook.json")
if err != nil {
panic(err)
}
var tweet_resp scraper.TweetResponse
err = json.Unmarshal(data, &tweet_resp)
if err != nil {
t.Errorf(err.Error())
}
tweets := tweet_resp.GlobalObjects.Tweets
users := tweet_resp.GlobalObjects.Users
if len(tweets) != 12 {
t.Errorf("Expected %d tweets, got %d instead", 11, len(tweets))
}
if len(users) != 11 {
t.Errorf("Expected %d users, got %d instead", 11, len(users))
}
t1, ok := tweets["1395882872729477131"]
if !ok {
t.Fatalf("Didn't find first tweet")
}
t2, ok := tweets["1396194922009661441"]
if !ok {
t.Fatalf("Didn't find second tweet")
}
tweet1, err := scraper.ParseSingleTweet(t1)
if err != nil {
t.Fatalf(err.Error())
}
tweet2, err := scraper.ParseSingleTweet(t2)
if err != nil {
t.Fatalf(err.Error())
}
expected_text := "this saddens me every time"
if tweet1.Text != expected_text {
t.Errorf("Expected: %q, got: %q", expected_text, tweet1.Text)
}
expected_text = "sometimes they're too dimwitted to even get the wrong title right"
if tweet2.Text != expected_text {
t.Errorf("Expected: %q, got: %q", expected_text, tweet2.Text)
}
if len(tweet1.Images) != 1 {
t.Errorf("Expected 1 images but got %d", len(tweet1.Images))
}
if tweet2.InReplyTo != tweet1.ID {
t.Errorf("Expected %q, got %q", tweet1.ID, tweet2.InReplyTo)
}
if tweet1.QuotedTweet != 0 {
2021-05-22 18:20:18 -04:00
t.Errorf("Incorrectly believes it quote-tweets %q", tweet1.QuotedTweet)
}
if tweet2.QuotedTweet == 0 {
2021-05-22 18:20:18 -04:00
t.Errorf("Should be a quoted tweet")
}
quoted_tweet_, ok := tweets[fmt.Sprint(tweet2.QuotedTweet)]
2021-05-22 18:20:18 -04:00
if !ok {
t.Errorf("Couldn't find the quoted tweet")
}
quoted_tweet, err := scraper.ParseSingleTweet(quoted_tweet_)
if err != nil {
t.Errorf(err.Error())
}
expected_text = "I always liked \"The Anarchist's Cookbook.\""
if quoted_tweet.Text != expected_text {
t.Errorf("Expected %q, got %q", expected_text, quoted_tweet.Text)
}
}
2021-06-15 15:18:09 -07:00
2021-07-25 14:51:17 -07:00
func TestParseTweetWithVideo(t *testing.T) {
data, err := ioutil.ReadFile("test_responses/tweet_with_video.json")
if err != nil {
panic(err)
}
var apitweet scraper.APITweet
err = json.Unmarshal(data, &apitweet)
if err != nil {
t.Errorf(err.Error())
}
tweet, err := scraper.ParseSingleTweet(apitweet)
if err != nil {
t.Errorf(err.Error())
}
expected_video := "https://video.twimg.com/ext_tw_video/1418951950020845568/pu/vid/720x1280/sm4iL9_f8Lclh0aa.mp4?tag=12"
if len(tweet.Videos) != 1 || tweet.Videos[0].Filename != expected_video {
t.Errorf("Expected video %q, but got %+v", expected_video, tweet.Videos)
2021-07-25 14:51:17 -07:00
}
if len(tweet.Images) != 0 {
t.Errorf("Should not have any images, but has %d", len(tweet.Images))
}
}
2021-06-15 15:18:09 -07:00
func TestParseTweetResponse(t *testing.T) {
data, err := ioutil.ReadFile("test_responses/michael_malice_feed.json")
if err != nil {
panic(err)
}
var tweet_resp scraper.TweetResponse
err = json.Unmarshal(data, &tweet_resp)
if err != nil {
t.Errorf(err.Error())
}
tweets, retweets, users, err := scraper.ParseTweetResponse(tweet_resp)
if err != nil {
t.Errorf(err.Error())
}
if len(tweets) != 29 - 3 {
t.Errorf("Expected %d tweets, got %d", 29-3, len(tweets))
}
if len(retweets) != 3 {
t.Errorf("Expected %d tweets, got %d", 3, len(retweets))
}
if len(users) != 9 {
t.Errorf("Expected %d tweets, got %d", 9, len(users))
}
}