From a640324c062f6616d730ea9cc01f1ff41b80623c Mon Sep 17 00:00:00 2001 From: Beast Date: Fri, 27 Mar 2026 17:16:28 +0800 Subject: [PATCH] fix: return tweet id that is not valid Twitter API since id parameter only accept tweet id that is within 7 days. This is because we use the search recent API. --- src/repositories/relevant_tweet.rs | 40 +++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/repositories/relevant_tweet.rs b/src/repositories/relevant_tweet.rs index 553d995..b1676bf 100644 --- a/src/repositories/relevant_tweet.rs +++ b/src/repositories/relevant_tweet.rs @@ -93,7 +93,7 @@ impl RelevantTweetRepository { } pub async fn get_newest_tweet_id(&self) -> Result, DbError> { - let row = sqlx::query("SELECT id FROM relevant_tweets ORDER BY created_at DESC LIMIT 1") + let row = sqlx::query("SELECT id FROM relevant_tweets WHERE created_at >= NOW() - INTERVAL '7 days' ORDER BY created_at DESC LIMIT 1") .fetch_optional(&self.pool) .await?; @@ -244,7 +244,7 @@ mod tests { utils::test_db::reset_database, Config, }; - use chrono::Utc; + use chrono::{Duration, Utc}; use sqlx::PgPool; // --- Helpers to create dummy data --- @@ -291,7 +291,6 @@ mod tests { } // --- Tests --- - #[tokio::test] async fn test_upsert_and_find_by_id() { let (repo, author_repo) = setup_test_repository().await; @@ -347,4 +346,39 @@ mod tests { assert!(existing.contains("t2")); assert!(!existing.contains("t3")); } + + #[tokio::test] + async fn test_get_newest_tweet_id_returns_none_when_no_recent_tweets() { + let (repo, author_repo) = setup_test_repository().await; + let author_id = "author_old"; + seed_author(&author_repo, author_id, "stale_user").await; + + let mut old_tweet = create_payload("tweet_old", author_id, "stale tweet"); + old_tweet.created_at = Utc::now() - Duration::days(8); + repo.upsert_many(&vec![old_tweet]).await.unwrap(); + + let newest_tweet_id = repo.get_newest_tweet_id().await.unwrap(); + assert_eq!( + newest_tweet_id, None, + "Should return None when no tweet is within the last 7 days" + ); + } + + #[tokio::test] + async fn test_get_newest_tweet_id_returns_some_when_recent_tweet_exists() { + let (repo, author_repo) = setup_test_repository().await; + let author_id = "author_recent"; + seed_author(&author_repo, author_id, "active_user").await; + + let mut recent_tweet = create_payload("tweet_recent", author_id, "recent tweet"); + recent_tweet.created_at = Utc::now() - Duration::days(2); + repo.upsert_many(&vec![recent_tweet]).await.unwrap(); + + let newest_tweet_id = repo.get_newest_tweet_id().await.unwrap(); + assert_eq!( + newest_tweet_id, + Some("tweet_recent".to_string()), + "Should return the newest tweet id when at least one tweet is within the last 7 days" + ); + } }