1+ import unittest
2+ import os
3+ import json
4+ from unittest .mock import patch
5+ from typer .testing import CliRunner
6+ from main import app
7+
8+ TEST_DRAFTS_FILE = "test-drafts.json"
9+
10+ class TestThreadsCLI (unittest .TestCase ):
11+ def setUp (self ):
12+ self .runner = CliRunner ()
13+
14+ def tearDown (self ):
15+ if os .path .exists (TEST_DRAFTS_FILE ):
16+ os .remove (TEST_DRAFTS_FILE )
17+
18+ def test_get_profile (self ):
19+ result = self .runner .invoke (app , ["get-profile" ])
20+ self .assertEqual (result .exit_code , 0 )
21+ self .assertIn ("Profile" , result .stdout )
22+
23+ def test_get_recent_posts (self ):
24+ result = self .runner .invoke (app , ["get-recent-posts" , "--limit" , "5" ])
25+ self .assertEqual (result .exit_code , 0 )
26+ self .assertIn ("Recent Posts" , result .stdout )
27+
28+ def test_create_text_post (self ):
29+ with patch ("main.create_post" ) as mock_create_post :
30+ mock_create_post .return_value = {"id" : "123" }
31+ result = self .runner .invoke (app , ["create-text-post" , "Test post" ])
32+ self .assertEqual (result .exit_code , 0 )
33+ self .assertIn ("Post created with ID: 123" , result .stdout )
34+
35+ def test_create_draft (self ):
36+ result = self .runner .invoke (app , ["create-draft" , "Test draft" , "--drafts-file" , TEST_DRAFTS_FILE ])
37+ self .assertEqual (result .exit_code , 0 )
38+ self .assertTrue (os .path .exists (TEST_DRAFTS_FILE ))
39+ with open (TEST_DRAFTS_FILE , "r" ) as file :
40+ drafts = json .load (file )
41+ self .assertEqual (len (drafts ), 1 )
42+ self .assertEqual (drafts [0 ]["text" ], "Test draft" )
43+
44+ def test_get_drafts (self ):
45+ self .runner .invoke (app , ["create-draft" , "Test draft 1" , "--drafts-file" , TEST_DRAFTS_FILE ])
46+ self .runner .invoke (app , ["create-draft" , "Test draft 2" , "--drafts-file" , TEST_DRAFTS_FILE ])
47+ result = self .runner .invoke (app , ["get-drafts" , "--drafts-file" , TEST_DRAFTS_FILE ])
48+ self .assertEqual (result .exit_code , 0 )
49+ self .assertIn ("Test draft 1" , result .stdout )
50+ self .assertIn ("Test draft 2" , result .stdout )
51+
52+ def test_send_draft (self ):
53+ self .runner .invoke (app , ["create-draft" , "Test draft" , "--drafts-file" , TEST_DRAFTS_FILE ])
54+ with open (TEST_DRAFTS_FILE , "r" ) as file :
55+ drafts = json .load (file )
56+ draft_id = drafts [0 ]["id" ]
57+
58+ # Test sending an existing draft
59+ with patch ("main.create_text_post" ) as mock_create_text_post :
60+ result = self .runner .invoke (app , ["send-draft" , str (draft_id ), "--drafts-file" , TEST_DRAFTS_FILE ])
61+ self .assertEqual (result .exit_code , 0 )
62+ self .assertIn (f"Draft with ID { draft_id } sent and removed from drafts." , result .stdout )
63+ with open (TEST_DRAFTS_FILE , "r" ) as file :
64+ drafts = json .load (file )
65+ self .assertEqual (len (drafts ), 0 )
66+
67+ # Test sending a non-existing draft
68+ result = self .runner .invoke (app , ["send-draft" , "999" , "--drafts-file" , TEST_DRAFTS_FILE ])
69+ self .assertEqual (result .exit_code , 1 )
70+ self .assertIn ("Draft with ID 999 not found." , result .stdout )
71+
72+ if __name__ == "__main__" :
73+ unittest .main ()
0 commit comments