Fix parsing of spaces in APIv2; improve no-worsening of Spaces

This commit is contained in:
Alessio 2022-11-25 13:22:20 -05:00
parent 433dd5e0bb
commit 412574e46f
4 changed files with 26 additions and 6 deletions

View File

@ -27,11 +27,11 @@ func (p Profile) SaveSpace(s scraper.Space) error {
short_url=case when short_url == "" then :short_url else short_url end,
state=:state,
title=:title,
updated_at=:updated_at,
updated_at=max(:updated_at, updated_at),
is_available_for_replay=:is_available_for_replay,
replay_watch_count=:replay_watch_count,
live_listeners_count=:live_listeners_count,
is_details_fetched=:is_details_fetched
is_details_fetched=(is_details_fetched or :is_details_fetched)
`, &s)
if err != nil {
return fmt.Errorf("Error saving space (space ID %q, value: %#v):\n %w", s.ID, s, err)

View File

@ -38,8 +38,11 @@ func TestNoWorseningSpace(t *testing.T) {
space := create_space_from_id(rand.Int())
space.ShortUrl = "Some Short Url"
space.Title = "Debating Somebody"
space.CreatedAt = scraper.TimestampFromUnix(1000)
space.UpdatedAt = scraper.TimestampFromUnix(2000)
space.CreatedById = scraper.UserID(-1)
space.IsDetailsFetched = true
// Save the space
err := profile.SaveSpace(space)
@ -47,8 +50,11 @@ func TestNoWorseningSpace(t *testing.T) {
// Worsen the space, then re-save
space.ShortUrl = ""
space.Title = ""
space.CreatedAt = scraper.TimestampFromUnix(0)
space.UpdatedAt = scraper.TimestampFromUnix(0)
space.CreatedById = scraper.UserID(0)
space.IsDetailsFetched = false
err = profile.SaveSpace(space)
require.NoError(err)
@ -57,6 +63,9 @@ func TestNoWorseningSpace(t *testing.T) {
require.NoError(err)
assert.Equal(new_space.ShortUrl, "Some Short Url")
assert.Equal(new_space.Title, "Debating Somebody")
assert.Equal(new_space.CreatedAt, scraper.TimestampFromUnix(1000))
assert.Equal(new_space.UpdatedAt, scraper.TimestampFromUnix(2000))
assert.Equal(new_space.CreatedById, scraper.UserID(-1))
assert.True(new_space.IsDetailsFetched)
}

View File

@ -249,7 +249,14 @@ func (api_result APIV2Result) ToTweetTrove(ignore_null_entries bool) TweetTrove
ret.Tweets[main_tweet.ID] = main_tweet
} else if api_result.Result.Card.Legacy.Name == "3691233323:audiospace" {
space := api_result.Result.Card.ParseAsSpace()
main_tweet.Spaces = []Space{space}
// Attach it to the Tweet that linked it
main_tweet.SpaceID = space.ID
// Put it in the trove; avoid clobbering
if existing_space, is_ok := ret.Spaces[space.ID]; !is_ok || !existing_space.IsDetailsFetched {
ret.Spaces[space.ID] = space
}
// main_tweet.Spaces = []Space{space}
// Remove it from the Urls
for i, url := range main_tweet.Urls {

View File

@ -444,6 +444,7 @@ func TestAPIV2ParseTweetWithPoll(t *testing.T) {
*/
func TestAPIV2ParseTweetWithSpace(t *testing.T) {
assert := assert.New(t)
require := require.New(t)
data, err := os.ReadFile("test_responses/api_v2/tweet_with_audiospaces_card.json")
if err != nil {
panic(err)
@ -457,11 +458,14 @@ func TestAPIV2ParseTweetWithSpace(t *testing.T) {
assert.Len(trove.Tweets, 1)
tweet, ok := trove.Tweets[1497647006445146113]
require.True(t, ok)
require.True(ok)
assert.Len(tweet.Urls, 0)
assert.Len(tweet.Spaces, 1)
assert.Equal(tweet.SpaceID, SpaceID("1dRJZlRNZDzKB"))
require.Len(trove.Spaces, 1)
s, is_ok := trove.Spaces["1dRJZlRNZDzKB"]
require.True(is_ok)
s := tweet.Spaces[0]
assert.Equal(SpaceID("1dRJZlRNZDzKB"), s.ID)
assert.Equal("https://t.co/5RLbEwQgvH", s.ShortUrl)
assert.False(s.IsDetailsFetched)