Merge pull request #182 from ziperlee/codex/bluesky-refresh-token
fix: refresh expired bluesky sessions
This commit is contained in:
@@ -194,6 +194,22 @@ class TestSearchBlueskyAuth(unittest.TestCase):
|
||||
search_call = mock_request.call_args_list[1]
|
||||
self.assertEqual(search_call.kwargs.get("headers", {}), {"Authorization": "Bearer tok123"})
|
||||
|
||||
@patch("lib.bluesky.http.request")
|
||||
def test_401_search_refreshes_session_once(self, mock_request):
|
||||
from lib.http import HTTPError
|
||||
|
||||
mock_request.side_effect = [
|
||||
{"accessJwt": "tok-old", "refreshJwt": "ref-old"},
|
||||
HTTPError("HTTP 401: Unauthorized", 401, ""),
|
||||
{"accessJwt": "tok-new", "refreshJwt": "ref-new"},
|
||||
{"posts": [{"uri": "at://did/app.bsky.feed.post/abc", "author": {"handle": "u1"}, "record": {"text": "hi"}}]},
|
||||
]
|
||||
config = {"BSKY_HANDLE": "user.bsky.social", "BSKY_APP_PASSWORD": "pw"}
|
||||
result = bluesky.search_bluesky("test", "2026-01-01", "2026-03-09", config=config)
|
||||
self.assertEqual(len(result["posts"]), 1)
|
||||
self.assertEqual(mock_request.call_count, 4)
|
||||
self.assertEqual(mock_request.call_args_list[3].kwargs.get("headers", {}), {"Authorization": "Bearer tok-new"})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -2,6 +2,7 @@ import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest import mock
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
|
||||
|
||||
@@ -30,6 +31,27 @@ class BriefingV3Tests(unittest.TestCase):
|
||||
store._db_override = old_db_override
|
||||
briefing.BRIEFS_DIR = old_briefs_dir
|
||||
|
||||
def test_save_briefing_uses_utf8_encoding(self):
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
old_briefs_dir = briefing.BRIEFS_DIR
|
||||
try:
|
||||
briefing.BRIEFS_DIR = Path(tmpdir) / "briefs"
|
||||
payload = {"status": "ok", "message": "emoji 💬 and accents café"}
|
||||
with mock.patch("briefing.open", create=True) as mock_open:
|
||||
handle = mock.Mock()
|
||||
handle.__enter__ = mock.Mock(return_value=handle)
|
||||
handle.__exit__ = mock.Mock(return_value=False)
|
||||
mock_open.return_value = handle
|
||||
|
||||
briefing._save_briefing(payload)
|
||||
|
||||
mock_open.assert_called_once()
|
||||
_, kwargs = mock_open.call_args
|
||||
self.assertEqual("w", kwargs["mode"] if "mode" in kwargs else mock_open.call_args.args[1])
|
||||
self.assertEqual("utf-8", kwargs["encoding"])
|
||||
finally:
|
||||
briefing.BRIEFS_DIR = old_briefs_dir
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user