diff --git a/persistence/media_download.go b/persistence/media_download.go index 1d733e5..c4cf405 100644 --- a/persistence/media_download.go +++ b/persistence/media_download.go @@ -193,7 +193,7 @@ func (p Profile) DownloadUserContentWithInjector(u *scraper.User, downloader Med * If this user should have a big profile picture, defer to the regular `DownloadUserContentFor` method. */ func (p Profile) DownloadUserProfileImageTiny(u *scraper.User) error { - if p.IsFollowing(u.Handle) { + if p.IsFollowing(*u) { return p.DownloadUserContentFor(u) } diff --git a/persistence/user_queries.go b/persistence/user_queries.go index b79ee91..2147fd8 100644 --- a/persistence/user_queries.go +++ b/persistence/user_queries.go @@ -240,11 +240,12 @@ func (p Profile) GetAllFollowedUsers() []scraper.UserHandle { return ret } -func (p Profile) IsFollowing(handle scraper.UserHandle) bool { - for _, follow := range p.GetAllFollowedUsers() { - if follow == handle { - return true - } +func (p Profile) IsFollowing(user scraper.User) bool { + row := p.DB.QueryRow("select is_followed from users where id like ?", user.ID) + var ret bool + err := row.Scan(&ret) + if err != nil { + panic(err) } - return false + return ret } diff --git a/persistence/user_queries_test.go b/persistence/user_queries_test.go index 2439a23..c5d36ff 100644 --- a/persistence/user_queries_test.go +++ b/persistence/user_queries_test.go @@ -214,6 +214,38 @@ func TestFollowUnfollowUser(t *testing.T) { assert.False(user_reloaded.IsFollowed) } +/** + * Should correctly report whether a User is followed or not, according to the DB (not the in-memory objects) + */ +func TestIsFollowingUser(t *testing.T) { + assert := assert.New(t) + + profile_path := "test_profiles/TestUserQueries" + profile := create_or_load_profile(profile_path) + + // Create the user + user := create_dummy_user() + assert.False(user.IsFollowed) + err := profile.SaveUser(&user) + assert.NoError(err) + + // Make sure the user isn't "followed" + assert.False(profile.IsFollowing(user)) + user.IsFollowed = true + assert.False(profile.IsFollowing(user)) // Should check the DB not the in-memory User + user.IsFollowed = false + + profile.SetUserFollowed(&user, true) + + assert.True(profile.IsFollowing(user)) + user.IsFollowed = false + assert.True(profile.IsFollowing(user)) // Check the DB, not the User + user.IsFollowed = true + + profile.SetUserFollowed(&user, false) + assert.False(profile.IsFollowing(user)) +} + /** * Should create a new Unknown User from the given handle. * The Unknown User should work consistently with other Users.