diff --git a/requirements-dev.txt b/requirements-dev.txt index 86204fb..40f6a2a 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,4 +1,5 @@ prefect==1.2.2 requests==2.28.1 boto3==1.26.40 -pytest==7.2.0 \ No newline at end of file +pytest==7.2.0 +httpretty==1.1.4 \ No newline at end of file diff --git a/tests/test_slack.py b/tests/test_slack.py new file mode 100644 index 0000000..ac294fd --- /dev/null +++ b/tests/test_slack.py @@ -0,0 +1,65 @@ +import json + +import httpretty +import pytest + +from lolafect.slack import send_message_to_slack_channel, SendSlackMessageTask + + +@httpretty.activate(allow_net_connect=False, verbose=True) +def test_send_message_to_slack_channel_works_properly(): + mock_webhook_url = "http://the-webhook-url.com" + mock_message_to_channel = "Hi there!" + httpretty.register_uri(method=httpretty.POST, uri=mock_webhook_url, status=200) + + send_message_to_slack_channel( + webhook_url=mock_webhook_url, text_to_send=mock_message_to_channel + ) + + request_observed_by_server = httpretty.last_request() + + assert (request_observed_by_server.method == "POST") and ( + json.loads(request_observed_by_server.body.decode("UTF-8")) + == {"text": mock_message_to_channel} + ) + + +@httpretty.activate(allow_net_connect=False, verbose=True) +def test_send_message_to_slack_channel_response_400_raises_exception(): + mock_webhook_url = "http://the-webhook-url.com" + mock_message_to_channel = "Hi there!" + httpretty.register_uri(method=httpretty.POST, uri=mock_webhook_url, status=400) + + with pytest.raises(ValueError): + send_message_to_slack_channel( + webhook_url=mock_webhook_url, text_to_send=mock_message_to_channel + ) + + +@httpretty.activate(allow_net_connect=False, verbose=True) +def test_slack_task_reaches_server_successfully(): + mock_webhook_url = "http://the-webhook-url.com" + mock_message_to_channel = "Hi there!" + httpretty.register_uri(method=httpretty.POST, uri=mock_webhook_url, status=200) + + slack_task = SendSlackMessageTask() + slack_task.run(webhook_url=mock_webhook_url, text_to_send=mock_message_to_channel) + + request_observed_by_server = httpretty.last_request() + assert (request_observed_by_server.method == "POST") and ( + json.loads(request_observed_by_server.body.decode("UTF-8")) + == {"text": mock_message_to_channel} + ) + + +@httpretty.activate(allow_net_connect=False, verbose=True) +def test_slack_task_raises_value_error(): + mock_webhook_url = "http://the-webhook-url.com" + mock_message_to_channel = "Hi there!" + httpretty.register_uri(method=httpretty.POST, uri=mock_webhook_url, status=400) + + with pytest.raises(ValueError): + slack_task = SendSlackMessageTask() + slack_task.run( + webhook_url=mock_webhook_url, text_to_send=mock_message_to_channel + )