diff --git a/pyproject.toml b/pyproject.toml index f83e6963..ed139d0c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,6 +41,7 @@ enable_error_code = [ "truthy-iterable", "ignore-without-code", "unused-awaitable", + "explicit-override", ] # Other options. diff --git a/zulip/integrations/bridge_with_matrix/test_matrix.py b/zulip/integrations/bridge_with_matrix/test_matrix.py index 0881fbe3..ca1488ae 100644 --- a/zulip/integrations/bridge_with_matrix/test_matrix.py +++ b/zulip/integrations/bridge_with_matrix/test_matrix.py @@ -9,6 +9,7 @@ from typing import Any, Awaitable, Callable, Iterator, List from unittest import TestCase, mock import nio +from typing_extensions import override from .matrix_bridge import MatrixToZulip, ZulipToMatrix, read_configuration @@ -183,6 +184,7 @@ class MatrixBridgeMatrixToZulipTests(TestCase): room = mock.MagicMock() room.user_name = lambda _: "John Smith" + @override def setUp(self) -> None: self.matrix_to_zulip = mock.MagicMock() self.matrix_to_zulip.get_message_content_from_event = ( @@ -229,6 +231,7 @@ class MatrixBridgeZulipToMatrixTests(TestCase): subject=valid_zulip_config["topic"], ) + @override def setUp(self) -> None: self.zulip_to_matrix = mock.MagicMock() self.zulip_to_matrix.zulip_config = self.valid_zulip_config diff --git a/zulip/integrations/rss/rss-bot b/zulip/integrations/rss/rss-bot index 1cef95c0..4a592f1d 100755 --- a/zulip/integrations/rss/rss-bot +++ b/zulip/integrations/rss/rss-bot @@ -17,6 +17,7 @@ from html.parser import HTMLParser from typing import Any, Dict, List, Optional, Tuple import feedparser +from typing_extensions import override import zulip @@ -138,6 +139,7 @@ class MLStripper(HTMLParser): self.reset() self.fed: List[str] = [] + @override def handle_data(self, data: str) -> None: self.fed.append(data) diff --git a/zulip/integrations/zephyr/zephyr_ctypes.py b/zulip/integrations/zephyr/zephyr_ctypes.py index 5817498b..d1fb9b4f 100644 --- a/zulip/integrations/zephyr/zephyr_ctypes.py +++ b/zulip/integrations/zephyr/zephyr_ctypes.py @@ -16,6 +16,8 @@ from ctypes import ( c_void_p, ) +from typing_extensions import override + libc = CDLL("libc.so.6") com_err = CDLL("libcom_err.so.2") libzephyr = CDLL("libzephyr.so.4") @@ -198,6 +200,7 @@ class ZephyrError(Exception): def __init__(self, code: int) -> None: self.code = code + @override def __str__(self) -> str: return error_message(self.code).decode() diff --git a/zulip/setup.py b/zulip/setup.py index 9138338a..853908d2 100755 --- a/zulip/setup.py +++ b/zulip/setup.py @@ -67,7 +67,7 @@ setup( "requests[security]>=0.12.1", "distro", "click", - "typing_extensions>=3.7", + "typing_extensions>=4.5.0", ], packages=find_packages(exclude=["tests"]), ) diff --git a/zulip/zulip/__init__.py b/zulip/zulip/__init__.py index 72508d12..c8074774 100644 --- a/zulip/zulip/__init__.py +++ b/zulip/zulip/__init__.py @@ -27,7 +27,7 @@ from typing import ( import distro import requests -from typing_extensions import Literal +from typing_extensions import Literal, override __version__ = "0.8.2" @@ -125,6 +125,7 @@ class CountingBackoff: class RandomExponentialBackoff(CountingBackoff): + @override def fail(self) -> None: super().fail() # Exponential growth with ratio sqrt(2); compute random delay @@ -1802,6 +1803,7 @@ if LEGACY_CLIENT_INTERFACE_FROM_SERVER_DOCS_VERSION == "3": # This block is support for testing Zulip 3.x, which documents old # interfaces for the following functions: class LegacyInterfaceClient(Client): + @override def update_user_group_members(self, group_data: Dict[str, Any]) -> Dict[str, Any]: # type: ignore[override] # Intentional override; see comments above. modern_group_data = group_data.copy() group_id = group_data["group_id"] diff --git a/zulip_bots/setup.py b/zulip_bots/setup.py index 3fe124a9..5a9cf984 100644 --- a/zulip_bots/setup.py +++ b/zulip_bots/setup.py @@ -57,7 +57,7 @@ setup( "html2text", "lxml", "BeautifulSoup4", - "typing_extensions", + "typing_extensions>=4.5.0", 'importlib-metadata >= 3.6; python_version < "3.10"', ], packages=find_packages(), diff --git a/zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py b/zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py index 6aeb6e22..792a6fa9 100644 --- a/zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py +++ b/zulip_bots/zulip_bots/bots/baremetrics/test_baremetrics.py @@ -1,5 +1,7 @@ from unittest.mock import patch +from typing_extensions import override + from zulip_bots.bots.baremetrics.baremetrics import BaremetricsHandler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -7,6 +9,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler class TestBaremetricsBot(BotTestCase, DefaultTests): bot_name = "baremetrics" + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info({"api_key": "TEST"}), patch("requests.get"): self.verify_reply("", "No Command Specified") diff --git a/zulip_bots/zulip_bots/bots/chessbot/test_chessbot.py b/zulip_bots/zulip_bots/bots/chessbot/test_chessbot.py index 03ff0578..336ee6e1 100644 --- a/zulip_bots/zulip_bots/bots/chessbot/test_chessbot.py +++ b/zulip_bots/zulip_bots/bots/chessbot/test_chessbot.py @@ -1,3 +1,5 @@ +from typing_extensions import override + from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -107,6 +109,7 @@ To make your next move, respond to Chess Bot with h g f e d c b a ```""" + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info({"stockfish_location": "/foo/bar"}): response = self.get_response(dict(content="")) diff --git a/zulip_bots/zulip_bots/bots/connect_four/test_connect_four.py b/zulip_bots/zulip_bots/bots/connect_four/test_connect_four.py index 16491ccb..491b260c 100644 --- a/zulip_bots/zulip_bots/bots/connect_four/test_connect_four.py +++ b/zulip_bots/zulip_bots/bots/connect_four/test_connect_four.py @@ -1,5 +1,7 @@ from typing import Dict, List +from typing_extensions import override + from zulip_bots.bots.connect_four.controller import ConnectFourModel from zulip_bots.game_handler import BadMoveException from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -8,6 +10,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests class TestConnectFourBot(BotTestCase, DefaultTests): bot_name = "connect_four" + @override def make_request_message( self, content: str, user: str = "foo@example.com", user_name: str = "foo" ) -> Dict[str, str]: diff --git a/zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py b/zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py index 2a4246e4..4de7e6b7 100644 --- a/zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py +++ b/zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py @@ -3,6 +3,8 @@ from contextlib import contextmanager from typing import ByteString, Iterator from unittest.mock import patch +from typing_extensions import override + from zulip_bots.test_file_utils import read_bot_fixture_data from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -71,6 +73,7 @@ class TestDialogFlowBot(BotTestCase, DefaultTests): def test_alternate_response(self) -> None: self._test("test_alternate_result", "hello", "alternate result") + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info({"key": "abcdefg", "bot_info": "bot info foo bar"}): pass diff --git a/zulip_bots/zulip_bots/bots/followup/test_followup.py b/zulip_bots/zulip_bots/bots/followup/test_followup.py index 41d29cef..60767fc4 100755 --- a/zulip_bots/zulip_bots/bots/followup/test_followup.py +++ b/zulip_bots/zulip_bots/bots/followup/test_followup.py @@ -1,3 +1,5 @@ +from typing_extensions import override + from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -30,6 +32,7 @@ class TestFollowUpBot(BotTestCase, DefaultTests): self.assertEqual(response["content"], "from foo@example.com: feed the cat") self.assertEqual(response["to"], "issue") + @override def test_bot_responds_to_empty_message(self) -> None: bot_response = ( "Please specify the message you want to send to followup stream after @mention-bot" diff --git a/zulip_bots/zulip_bots/bots/front/test_front.py b/zulip_bots/zulip_bots/bots/front/test_front.py index 6c0e9ef3..f7a5c7af 100644 --- a/zulip_bots/zulip_bots/bots/front/test_front.py +++ b/zulip_bots/zulip_bots/bots/front/test_front.py @@ -1,11 +1,14 @@ from typing import Any, Dict, Optional +from typing_extensions import override + from zulip_bots.test_lib import BotTestCase, DefaultTests class TestFrontBot(BotTestCase, DefaultTests): bot_name = "front" + @override def make_request_message(self, content: str) -> Dict[str, Any]: message = super().make_request_message(content) message["subject"] = "cnv_kqatm2" @@ -18,6 +21,7 @@ class TestFrontBot(BotTestCase, DefaultTests): with self.assertRaises(KeyError): bot, bot_handler = self._get_handlers() + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info({"api_key": "TEST"}): self.verify_reply("", "Unknown command. Use `help` for instructions.") @@ -87,11 +91,13 @@ class TestFrontBot(BotTestCase, DefaultTests): class TestFrontBotWrongTopic(BotTestCase, DefaultTests): bot_name = "front" + @override def make_request_message(self, content: str) -> Dict[str, Any]: message = super().make_request_message(content) message["subject"] = "kqatm2" return message + @override def test_bot_responds_to_empty_message(self) -> None: pass diff --git a/zulip_bots/zulip_bots/bots/game_handler_bot/test_game_handler_bot.py b/zulip_bots/zulip_bots/bots/game_handler_bot/test_game_handler_bot.py index a437c654..de90052f 100644 --- a/zulip_bots/zulip_bots/bots/game_handler_bot/test_game_handler_bot.py +++ b/zulip_bots/zulip_bots/bots/game_handler_bot/test_game_handler_bot.py @@ -1,6 +1,8 @@ from typing import Any, Dict, List from unittest.mock import patch +from typing_extensions import override + from zulip_bots.game_handler import GameInstance from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -8,6 +10,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests class TestGameHandlerBot(BotTestCase, DefaultTests): bot_name = "game_handler_bot" + @override def make_request_message( self, content: str, diff --git a/zulip_bots/zulip_bots/bots/giphy/test_giphy.py b/zulip_bots/zulip_bots/bots/giphy/test_giphy.py index 7afa33df..173a2900 100755 --- a/zulip_bots/zulip_bots/bots/giphy/test_giphy.py +++ b/zulip_bots/zulip_bots/bots/giphy/test_giphy.py @@ -1,6 +1,7 @@ from unittest.mock import patch from requests.exceptions import ConnectionError +from typing_extensions import override from zulip_bots.test_file_utils import get_bot_message_handler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -10,6 +11,7 @@ class TestGiphyBot(BotTestCase, DefaultTests): bot_name = "giphy" # Test for bot response to empty message + @override def test_bot_responds_to_empty_message(self) -> None: bot_response = ( "[Click to enlarge]" diff --git a/zulip_bots/zulip_bots/bots/github_detail/test_github_detail.py b/zulip_bots/zulip_bots/bots/github_detail/test_github_detail.py index d9a5331e..87778102 100755 --- a/zulip_bots/zulip_bots/bots/github_detail/test_github_detail.py +++ b/zulip_bots/zulip_bots/bots/github_detail/test_github_detail.py @@ -1,3 +1,5 @@ +from typing_extensions import override + from zulip_bots.test_file_utils import get_bot_message_handler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -8,6 +10,7 @@ class TestGithubDetailBot(BotTestCase, DefaultTests): empty_config = {"owner": "", "repo": ""} # Overrides default test_bot_usage(). + @override def test_bot_usage(self) -> None: bot = get_bot_message_handler(self.bot_name) bot_handler = StubBotHandler() @@ -18,6 +21,7 @@ class TestGithubDetailBot(BotTestCase, DefaultTests): self.assertIn("displays details on github issues", bot.usage()) # Override default function in BotTestCase + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info(self.mock_config): self.verify_reply("", "Failed to find any issue or PR.") diff --git a/zulip_bots/zulip_bots/bots/idonethis/test_idonethis.py b/zulip_bots/zulip_bots/bots/idonethis/test_idonethis.py index 9cdbc108..d714ab88 100644 --- a/zulip_bots/zulip_bots/bots/idonethis/test_idonethis.py +++ b/zulip_bots/zulip_bots/bots/idonethis/test_idonethis.py @@ -1,5 +1,7 @@ from unittest.mock import patch +from typing_extensions import override + from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -112,6 +114,7 @@ class TestIDoneThisBot(BotTestCase, DefaultTests): " * ID: 72c8241d2218464433268c5abd6625ac104e3d8f", ) + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info( {"api_key": "12345678", "bot_info": "team"} diff --git a/zulip_bots/zulip_bots/bots/link_shortener/test_link_shortener.py b/zulip_bots/zulip_bots/bots/link_shortener/test_link_shortener.py index 01a6fd51..ea72bf05 100644 --- a/zulip_bots/zulip_bots/bots/link_shortener/test_link_shortener.py +++ b/zulip_bots/zulip_bots/bots/link_shortener/test_link_shortener.py @@ -1,5 +1,7 @@ from unittest.mock import patch +from typing_extensions import override + from zulip_bots.bots.link_shortener.link_shortener import LinkShortenerHandler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -11,6 +13,7 @@ class TestLinkShortenerBot(BotTestCase, DefaultTests): with self.mock_config_info({"key": "qwertyuiop"}): self.verify_reply(message, response) + @override def test_bot_responds_to_empty_message(self) -> None: with patch("requests.get"): self._test( diff --git a/zulip_bots/zulip_bots/bots/mention/test_mention.py b/zulip_bots/zulip_bots/bots/mention/test_mention.py index 5a9b5a42..16c799b8 100644 --- a/zulip_bots/zulip_bots/bots/mention/test_mention.py +++ b/zulip_bots/zulip_bots/bots/mention/test_mention.py @@ -1,5 +1,7 @@ from unittest.mock import patch +from typing_extensions import override + from zulip_bots.bots.mention.mention import MentionHandler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -7,6 +9,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler class TestMentionBot(BotTestCase, DefaultTests): bot_name = "mention" + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info({"access_token": "12345"}), patch("requests.get"): self.verify_reply("", "Empty Mention Query") diff --git a/zulip_bots/zulip_bots/bots/salesforce/test_salesforce.py b/zulip_bots/zulip_bots/bots/salesforce/test_salesforce.py index 3dc33287..9e3b30be 100644 --- a/zulip_bots/zulip_bots/bots/salesforce/test_salesforce.py +++ b/zulip_bots/zulip_bots/bots/salesforce/test_salesforce.py @@ -3,6 +3,7 @@ from typing import Any, Dict, Iterator from unittest.mock import patch from simple_salesforce.exceptions import SalesforceAuthenticationFailed +from typing_extensions import override from zulip_bots.test_file_utils import read_bot_fixture_data from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -111,6 +112,7 @@ class TestSalesforceBot(BotTestCase, DefaultTests): ), mock_salesforce_commands_types(): bot, bot_handler = self._get_handlers() + @override def test_bot_responds_to_empty_message(self) -> None: self._test("test_one_result", "", help_text) diff --git a/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py b/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py index 32289642..b9e80744 100644 --- a/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py +++ b/zulip_bots/zulip_bots/bots/tictactoe/tictactoe.py @@ -2,6 +2,8 @@ import copy import random from typing import Any, List, Tuple +from typing_extensions import override + from zulip_bots.game_handler import BadMoveException, GameAdapter # ------------------------------------- @@ -267,6 +269,7 @@ class ticTacToeHandler(GameAdapter): "description": "Lets you play Tic-tac-toe against a computer.", } + @override def usage(self) -> str: return """ You can play tic-tac-toe now! Make sure your diff --git a/zulip_bots/zulip_bots/bots/trello/test_trello.py b/zulip_bots/zulip_bots/bots/trello/test_trello.py index e2ea302f..9559a343 100644 --- a/zulip_bots/zulip_bots/bots/trello/test_trello.py +++ b/zulip_bots/zulip_bots/bots/trello/test_trello.py @@ -1,5 +1,7 @@ from unittest.mock import patch +from typing_extensions import override + from zulip_bots.bots.trello.trello import TrelloHandler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -9,10 +11,12 @@ mock_config = {"api_key": "TEST", "access_token": "TEST", "user_name": "TEST"} class TestTrelloBot(BotTestCase, DefaultTests): bot_name: str = "trello" + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info(mock_config), patch("requests.get"): self.verify_reply("", "Empty Query") + @override def test_bot_usage(self) -> None: with self.mock_config_info(mock_config), patch("requests.get"): self.verify_reply( diff --git a/zulip_bots/zulip_bots/bots/trivia_quiz/test_trivia_quiz.py b/zulip_bots/zulip_bots/bots/trivia_quiz/test_trivia_quiz.py index e50c0363..9df9839d 100644 --- a/zulip_bots/zulip_bots/bots/trivia_quiz/test_trivia_quiz.py +++ b/zulip_bots/zulip_bots/bots/trivia_quiz/test_trivia_quiz.py @@ -3,6 +3,8 @@ import json from typing import Any, Dict, Optional, Tuple from unittest.mock import patch +from typing_extensions import override + from zulip_bots.bots.trivia_quiz.trivia_quiz import ( fix_quotes, get_quiz_from_id, @@ -41,6 +43,7 @@ class TestTriviaQuizBot(BotTestCase, DefaultTests): else: self.verify_reply(message, response) + @override def test_bot_responds_to_empty_message(self) -> None: self._test("", 'type "new" for a new question') diff --git a/zulip_bots/zulip_bots/bots/weather/test_weather.py b/zulip_bots/zulip_bots/bots/weather/test_weather.py index bd9d142f..ac23d141 100644 --- a/zulip_bots/zulip_bots/bots/weather/test_weather.py +++ b/zulip_bots/zulip_bots/bots/weather/test_weather.py @@ -1,6 +1,8 @@ from typing import Optional from unittest.mock import patch +from typing_extensions import override + from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -26,6 +28,7 @@ class TestWeatherBot(BotTestCase, DefaultTests): self.verify_reply(message, response) # Override default function in BotTestCase + @override def test_bot_responds_to_empty_message(self) -> None: with patch("requests.get"): self._test("", self.help_content) diff --git a/zulip_bots/zulip_bots/bots/witai/test_witai.py b/zulip_bots/zulip_bots/bots/witai/test_witai.py index 6ec202e0..a5c7a60e 100644 --- a/zulip_bots/zulip_bots/bots/witai/test_witai.py +++ b/zulip_bots/zulip_bots/bots/witai/test_witai.py @@ -1,6 +1,8 @@ from typing import Any, Dict, Optional from unittest.mock import patch +from typing_extensions import override + from zulip_bots.test_file_utils import get_bot_message_handler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -28,6 +30,7 @@ class TestWitaiBot(BotTestCase, DefaultTests): self.verify_reply("What is your favorite food?", "pizza") # This overrides the default one in `BotTestCase`. + @override def test_bot_responds_to_empty_message(self) -> None: with patch("zulip_bots.bots.witai.witai.get_handle", return_value=mock_handle): with self.mock_config_info(self.MOCK_CONFIG_INFO): diff --git a/zulip_bots/zulip_bots/bots/yoda/test_yoda.py b/zulip_bots/zulip_bots/bots/yoda/test_yoda.py index b37696df..052291f7 100644 --- a/zulip_bots/zulip_bots/bots/yoda/test_yoda.py +++ b/zulip_bots/zulip_bots/bots/yoda/test_yoda.py @@ -1,5 +1,7 @@ from typing import Optional +from typing_extensions import override + from zulip_bots.bots.yoda.yoda import ServiceUnavailableError from zulip_bots.test_lib import BotTestCase, DefaultTests @@ -30,6 +32,7 @@ class TestYodaBot(BotTestCase, DefaultTests): self.verify_reply(message, response) # Override default function in BotTestCase + @override def test_bot_responds_to_empty_message(self) -> None: self._test("", self.help_text) diff --git a/zulip_bots/zulip_bots/bots/youtube/test_youtube.py b/zulip_bots/zulip_bots/bots/youtube/test_youtube.py index 5373d7d1..d003d545 100644 --- a/zulip_bots/zulip_bots/bots/youtube/test_youtube.py +++ b/zulip_bots/zulip_bots/bots/youtube/test_youtube.py @@ -2,6 +2,7 @@ from typing import Dict from unittest.mock import patch from requests.exceptions import ConnectionError, HTTPError +from typing_extensions import override from zulip_bots.test_file_utils import get_bot_message_handler from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler @@ -27,6 +28,7 @@ class TestYoutubeBot(BotTestCase, DefaultTests): ) # Override default function in BotTestCase + @override def test_bot_responds_to_empty_message(self) -> None: with self.mock_config_info(self.normal_config), self.mock_http_conversation("test_keyok"): self.verify_reply("", self.help_content) diff --git a/zulip_bots/zulip_bots/game_handler.py b/zulip_bots/zulip_bots/game_handler.py index dc4a92d7..a3cacf5a 100644 --- a/zulip_bots/zulip_bots/game_handler.py +++ b/zulip_bots/zulip_bots/game_handler.py @@ -5,6 +5,8 @@ import re from copy import deepcopy from typing import Any, Dict, List, Tuple +from typing_extensions import override + from zulip_bots.lib import BotHandler @@ -12,6 +14,7 @@ class BadMoveException(Exception): def __init__(self, message: str) -> None: self.message = message + @override def __str__(self) -> str: return self.message @@ -20,6 +23,7 @@ class SamePlayerMove(Exception): def __init__(self, message: str) -> None: self.message = message + @override def __str__(self) -> str: return self.message diff --git a/zulip_botserver/setup.py b/zulip_botserver/setup.py index d606aaa2..49e27b42 100644 --- a/zulip_botserver/setup.py +++ b/zulip_botserver/setup.py @@ -44,6 +44,7 @@ setup( "zulip", "zulip_bots", "flask>=0.12.2", + "typing_extensions>=4.5.0", ], packages=find_packages(exclude=["tests"]), ) diff --git a/zulip_botserver/tests/server_test_lib.py b/zulip_botserver/tests/server_test_lib.py index 8a1cb500..827b1c8e 100644 --- a/zulip_botserver/tests/server_test_lib.py +++ b/zulip_botserver/tests/server_test_lib.py @@ -3,10 +3,13 @@ import json from typing import Any, Dict, List, Optional from unittest import TestCase, mock +from typing_extensions import override + from zulip_botserver import server class BotServerTestCase(TestCase): + @override def setUp(self) -> None: server.app.testing = True self.app = server.app.test_client() diff --git a/zulip_botserver/tests/test_server.py b/zulip_botserver/tests/test_server.py index e6f25570..d01b2050 100644 --- a/zulip_botserver/tests/test_server.py +++ b/zulip_botserver/tests/test_server.py @@ -9,6 +9,7 @@ from typing import Any, Dict from unittest import mock import importlib_metadata as metadata +from typing_extensions import override from zulip_bots.lib import BotHandler from zulip_botserver import server @@ -26,6 +27,7 @@ class BotServerTests(BotServerTestCase): def handler_class(self) -> Any: return BotServerTests.MockMessageHandler() + @override def setUp(self) -> None: # Since initializing Client invokes `get_server_settings` that fails in the test # environment, we need to mock it to pretend that there exists a backend.