Skip to content

Commit bb3fa2a

Browse files
committed
Refactor and clean up and add tests
1 parent b49789a commit bb3fa2a

File tree

2 files changed

+95
-22
lines changed

2 files changed

+95
-22
lines changed

main.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -242,12 +242,12 @@ def schedule_post(text: str, post_time: str):
242242
typer.echo(f"Post scheduled for {post_time} with text: '{text}'")
243243

244244
@app.command()
245-
def create_draft(text: str):
246-
"""
247-
Create a draft with text.
248-
"""
249-
if os.path.exists(DRAFTS_FILE):
250-
with open(DRAFTS_FILE, 'r') as file:
245+
def create_draft(text: str, drafts_file: str = DRAFTS_FILE):
246+
'''
247+
Create a draft with the given text and save it to the drafts file.
248+
'''
249+
if os.path.exists(drafts_file):
250+
with open(drafts_file, 'r') as file:
251251
drafts = json.load(file)
252252
else:
253253
drafts = []
@@ -261,21 +261,21 @@ def create_draft(text: str):
261261
}
262262
drafts.append(draft)
263263

264-
with open(DRAFTS_FILE, 'w') as file:
264+
with open(drafts_file, 'w') as file:
265265
json.dump(drafts, file, indent=4)
266266

267267
typer.echo(f"Draft created with ID: {next_id}")
268268

269269
@app.command()
270-
def get_drafts():
271-
"""
272-
Retrieve all drafts.
273-
"""
274-
if not os.path.exists(DRAFTS_FILE):
270+
def get_drafts(drafts_file: str = DRAFTS_FILE):
271+
'''
272+
Get all drafts from the drafts file.
273+
'''
274+
if not os.path.exists(drafts_file):
275275
typer.echo("No drafts found.")
276276
return
277277

278-
with open(DRAFTS_FILE, 'r') as file:
278+
with open(drafts_file, 'r') as file:
279279
drafts = json.load(file)
280280

281281
table = Table(title="Drafts")
@@ -293,28 +293,28 @@ def get_drafts():
293293
console.print(table)
294294

295295
@app.command()
296-
def send_draft(draft_id: int):
297-
"""
298-
Sends a draft with a specific ID and removes it from drafts.
299-
"""
300-
if not os.path.exists(DRAFTS_FILE):
296+
def send_draft(draft_id: int, drafts_file: str = DRAFTS_FILE):
297+
'''
298+
Send a draft with the given ID and remove it from the drafts file.
299+
'''
300+
if not os.path.exists(drafts_file):
301301
typer.echo("No drafts found.")
302-
return
302+
raise typer.Exit(1)
303303

304-
with open(DRAFTS_FILE, 'r') as file:
304+
with open(drafts_file, 'r') as file:
305305
drafts = json.load(file)
306306

307307
draft = next((draft for draft in drafts if draft['id'] == draft_id), None)
308308

309309
if draft is None:
310310
typer.echo(f"Draft with ID {draft_id} not found.")
311-
return
311+
raise typer.Exit(1)
312312

313313
create_text_post(draft['text'])
314314

315315
drafts = [draft for draft in drafts if draft['id'] != draft_id]
316316

317-
with open(DRAFTS_FILE, 'w') as file:
317+
with open(drafts_file, 'w') as file:
318318
json.dump(drafts, file, indent=4)
319319

320320
typer.echo(f"Draft with ID {draft_id} sent and removed from drafts.")

test_main.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

Comments
 (0)