95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
from .context import mango
|
|
|
|
import typing
|
|
|
|
|
|
class MockNotificationTarget(mango.NotificationTarget):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.send_notification_called = False
|
|
|
|
def send_notification(self, item: typing.Any) -> None:
|
|
self.send_notification_called = True
|
|
|
|
|
|
def test_notification_target_constructor() -> None:
|
|
succeeded = False
|
|
try:
|
|
mango.AccountLiquidator() # type: ignore[abstract]
|
|
except TypeError:
|
|
# Can't instantiate the abstract base class.
|
|
succeeded = True
|
|
assert succeeded
|
|
|
|
|
|
def test_telegram_notification_target_constructor() -> None:
|
|
address = "chat@bot"
|
|
actual = mango.TelegramNotificationTarget(address)
|
|
assert actual is not None
|
|
assert actual.chat_id == "chat"
|
|
assert actual.bot_id == "bot"
|
|
|
|
|
|
def test_discord_notification_target_constructor() -> None:
|
|
address = "discord-address"
|
|
actual = mango.DiscordNotificationTarget(address)
|
|
assert actual is not None
|
|
assert actual.address == address
|
|
|
|
|
|
def test_mailjet_notification_target_constructor() -> None:
|
|
encoded_parameters = "user:secret:subject:from%20name:from@address:to%20name%20with%20colon%3A:to@address"
|
|
actual = mango.MailjetNotificationTarget(encoded_parameters)
|
|
assert actual is not None
|
|
assert actual.api_key == "user"
|
|
assert actual.api_secret == "secret"
|
|
assert actual.subject == "subject"
|
|
assert actual.from_name == "from name"
|
|
assert actual.from_address == "from@address"
|
|
assert actual.to_name == "to name with colon:"
|
|
assert actual.to_address == "to@address"
|
|
|
|
|
|
def test_csvfile_notification_target_constructor() -> None:
|
|
filename = "test-filename"
|
|
actual = mango.CsvFileNotificationTarget(filename)
|
|
assert actual is not None
|
|
assert actual.filename == filename
|
|
|
|
|
|
def test_filtering_notification_target_constructor() -> None:
|
|
mock = MockNotificationTarget()
|
|
|
|
def func(_: typing.Any) -> bool:
|
|
return True
|
|
actual = mango.FilteringNotificationTarget(mock, func)
|
|
assert actual is not None
|
|
assert actual.inner_notifier == mock
|
|
assert actual.filter_func == func
|
|
|
|
|
|
def test_filtering_notification_target() -> None:
|
|
mock = MockNotificationTarget()
|
|
filtering = mango.FilteringNotificationTarget(mock, lambda x: bool(x == "yes"))
|
|
filtering.send("no")
|
|
assert(not mock.send_notification_called)
|
|
filtering.send("yes")
|
|
assert(mock.send_notification_called)
|
|
|
|
|
|
def test_parse_notification_target() -> None:
|
|
telegram_target = mango.parse_notification_target(
|
|
"telegram:012345678@9876543210:ABCDEFGHijklmnop-qrstuvwxyzABCDEFGH")
|
|
assert telegram_target is not None
|
|
|
|
discord_target = mango.parse_notification_target(
|
|
"discord:https://discord.com/api/webhooks/012345678901234567/ABCDE_fghij-KLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN")
|
|
assert discord_target is not None
|
|
|
|
mailjet_target = mango.parse_notification_target(
|
|
"mailjet:user:secret:subject:from%20name:from@address:to%20name%20with%20colon%3A:to@address")
|
|
assert mailjet_target is not None
|
|
|
|
csvfile_target = mango.parse_notification_target("csvfile:filename.csv")
|
|
assert csvfile_target is not None
|