diff --git a/echo.py b/echo.py index 1c58b3a..14990ab 100644 --- a/echo.py +++ b/echo.py @@ -1,17 +1,40 @@ import sys import requests +import asyncio from rich.console import Console from rich.markdown import Markdown console = Console() -def main(): - args = sys.argv[-1] - resp = requests.get(args) - console.print(Markdown(resp.text)) + +async def fetch_content_async(url): + loop = asyncio.get_event_loop() + response = await loop.run_in_executor(None, requests.get, url) + return response + + +def fetch_content_sync(url): + response = requests.get(url) + return response + + +async def main(): + if len(sys.argv) < 2: + console.print("Error: URL is missing!") + return + + url = sys.argv[-1] + + # sync request + response_sync = fetch_content_sync(url) + console.print(Markdown(response_sync.text)) + + # async + response_async = await fetch_content_async(url) + console.print(Markdown(response_async.text)) if __name__ == "__main__": - main() + asyncio.run(main()) \ No newline at end of file diff --git a/test_echo.py b/test_echo.py new file mode 100644 index 0000000..4ac4a7f --- /dev/null +++ b/test_echo.py @@ -0,0 +1,36 @@ +import unittest +from unittest.mock import patch, MagicMock +import asyncio +from echo import fetch_content_sync, fetch_content_async + + +class TestMain(unittest.TestCase): + + @patch('requests.get') + def test_fetch_content_sync(self, mock_get): + mock_response = MagicMock() + mock_response.text = "# Mocked Markdown Response" + mock_get.return_value = mock_response + + url = "https://example.com" + response = fetch_content_sync(url) + + mock_get.assert_called_with(url) + self.assertEqual(response.text, "# Mocked Markdown Response") + + @patch('requests.get') + def test_fetch_content_async(self, mock_get): + mock_response = MagicMock() + mock_response.text = "# Mocked Async Markdown Response" + mock_get.return_value = mock_response + + url = "https://example.com" + + response = asyncio.run(fetch_content_async(url)) + + mock_get.assert_called_with(url) + self.assertEqual(response.text, "# Mocked Async Markdown Response") + + +if __name__ == '__main__': + unittest.main() \ No newline at end of file