139 lines
4.1 KiB
Python
139 lines
4.1 KiB
Python
"""Tests for normalize module."""
|
|
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
# Add lib to path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "scripts"))
|
|
|
|
from lib import normalize, schema
|
|
|
|
|
|
class TestNormalizeRedditItems(unittest.TestCase):
|
|
def test_normalizes_basic_item(self):
|
|
items = [
|
|
{
|
|
"id": "R1",
|
|
"title": "Test Thread",
|
|
"url": "https://reddit.com/r/test/1",
|
|
"subreddit": "test",
|
|
"date": "2026-01-15",
|
|
"why_relevant": "Relevant because...",
|
|
"relevance": 0.85,
|
|
}
|
|
]
|
|
|
|
result = normalize.normalize_reddit_items(items, "2026-01-01", "2026-01-31")
|
|
|
|
self.assertEqual(len(result), 1)
|
|
self.assertIsInstance(result[0], schema.RedditItem)
|
|
self.assertEqual(result[0].id, "R1")
|
|
self.assertEqual(result[0].title, "Test Thread")
|
|
self.assertEqual(result[0].date_confidence, "high")
|
|
|
|
def test_sets_low_confidence_for_old_date(self):
|
|
items = [
|
|
{
|
|
"id": "R1",
|
|
"title": "Old Thread",
|
|
"url": "https://reddit.com/r/test/1",
|
|
"subreddit": "test",
|
|
"date": "2025-12-01", # Before range
|
|
"relevance": 0.5,
|
|
}
|
|
]
|
|
|
|
result = normalize.normalize_reddit_items(items, "2026-01-01", "2026-01-31")
|
|
|
|
self.assertEqual(result[0].date_confidence, "low")
|
|
|
|
def test_handles_engagement(self):
|
|
items = [
|
|
{
|
|
"id": "R1",
|
|
"title": "Thread with engagement",
|
|
"url": "https://reddit.com/r/test/1",
|
|
"subreddit": "test",
|
|
"engagement": {
|
|
"score": 100,
|
|
"num_comments": 50,
|
|
"upvote_ratio": 0.9,
|
|
},
|
|
"relevance": 0.5,
|
|
}
|
|
]
|
|
|
|
result = normalize.normalize_reddit_items(items, "2026-01-01", "2026-01-31")
|
|
|
|
self.assertIsNotNone(result[0].engagement)
|
|
self.assertEqual(result[0].engagement.score, 100)
|
|
self.assertEqual(result[0].engagement.num_comments, 50)
|
|
|
|
|
|
class TestNormalizeXItems(unittest.TestCase):
|
|
def test_normalizes_basic_item(self):
|
|
items = [
|
|
{
|
|
"id": "X1",
|
|
"text": "Test post content",
|
|
"url": "https://x.com/user/status/123",
|
|
"author_handle": "testuser",
|
|
"date": "2026-01-15",
|
|
"why_relevant": "Relevant because...",
|
|
"relevance": 0.9,
|
|
}
|
|
]
|
|
|
|
result = normalize.normalize_x_items(items, "2026-01-01", "2026-01-31")
|
|
|
|
self.assertEqual(len(result), 1)
|
|
self.assertIsInstance(result[0], schema.XItem)
|
|
self.assertEqual(result[0].id, "X1")
|
|
self.assertEqual(result[0].author_handle, "testuser")
|
|
|
|
def test_handles_x_engagement(self):
|
|
items = [
|
|
{
|
|
"id": "X1",
|
|
"text": "Post with engagement",
|
|
"url": "https://x.com/user/status/123",
|
|
"author_handle": "user",
|
|
"engagement": {
|
|
"likes": 100,
|
|
"reposts": 25,
|
|
"replies": 15,
|
|
"quotes": 5,
|
|
},
|
|
"relevance": 0.5,
|
|
}
|
|
]
|
|
|
|
result = normalize.normalize_x_items(items, "2026-01-01", "2026-01-31")
|
|
|
|
self.assertIsNotNone(result[0].engagement)
|
|
self.assertEqual(result[0].engagement.likes, 100)
|
|
self.assertEqual(result[0].engagement.reposts, 25)
|
|
|
|
|
|
class TestItemsToDicts(unittest.TestCase):
|
|
def test_converts_items(self):
|
|
items = [
|
|
schema.RedditItem(
|
|
id="R1",
|
|
title="Test",
|
|
url="https://reddit.com/r/test/1",
|
|
subreddit="test",
|
|
)
|
|
]
|
|
|
|
result = normalize.items_to_dicts(items)
|
|
|
|
self.assertEqual(len(result), 1)
|
|
self.assertIsInstance(result[0], dict)
|
|
self.assertEqual(result[0]["id"], "R1")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|