2016-11-29 22:48:22 +01:00
|
|
|
from zerver.lib.test_classes import WebhookTestCase
|
|
|
|
|
2020-01-14 22:06:24 +01:00
|
|
|
|
2016-11-29 22:48:22 +01:00
|
|
|
class WordPressHookTests(WebhookTestCase):
|
2021-02-12 08:20:45 +01:00
|
|
|
STREAM_NAME = "wordpress"
|
2018-03-16 22:53:50 +01:00
|
|
|
URL_TEMPLATE = "/api/v1/external/wordpress?api_key={api_key}&stream={stream}"
|
2021-02-12 08:20:45 +01:00
|
|
|
FIXTURE_DIR_NAME = "wordpress"
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_publish_post(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-04-09 21:51:58 +02:00
|
|
|
expected_topic = "WordPress Post"
|
|
|
|
expected_message = "New post published:\n* [New Blog Post](http://example.com\n)"
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"publish_post",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_publish_post_type_not_provided(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-04-09 21:51:58 +02:00
|
|
|
expected_topic = "WordPress Post"
|
|
|
|
expected_message = "New post published:\n* [New Blog Post](http://example.com\n)"
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"publish_post_type_not_provided",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_publish_post_no_data_provided(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
|
|
|
# Note: the fixture includes 'hook=publish_post' because it's always added by HookPress
|
2021-05-10 07:02:14 +02:00
|
|
|
expected_topic = "WordPress notification"
|
|
|
|
expected_message = "New post published:\n* [New WordPress post](WordPress post URL)"
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"publish_post_no_data_provided",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_publish_page(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-04-09 21:51:58 +02:00
|
|
|
expected_topic = "WordPress Page"
|
|
|
|
expected_message = "New page published:\n* [New Blog Page](http://example.com\n)"
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"publish_page",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_user_register(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-04-09 21:51:58 +02:00
|
|
|
expected_topic = "New Blog Users"
|
2021-02-12 08:19:30 +01:00
|
|
|
expected_message = (
|
|
|
|
"New blog user registered:\n* **Name**: test_user\n* **Email**: test_user@example.com"
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"user_register",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_wp_login(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-04-09 21:51:58 +02:00
|
|
|
expected_topic = "New Login"
|
|
|
|
expected_message = "User testuser logged in."
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
self.check_webhook(
|
|
|
|
"wp_login",
|
|
|
|
expected_topic,
|
|
|
|
expected_message,
|
|
|
|
content_type="application/x-www-form-urlencoded",
|
|
|
|
)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_unknown_action_no_data(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2020-08-23 15:49:24 +02:00
|
|
|
# Mimic check_webhook() to manually execute a negative test.
|
2020-08-23 19:09:27 +02:00
|
|
|
# Otherwise its call to send_webhook_payload() would assert on the non-success
|
2016-11-29 22:48:22 +01:00
|
|
|
# we are testing. The value of result is the error message the webhook should
|
|
|
|
# return if no params are sent. The fixture for this test is an empty file.
|
|
|
|
|
|
|
|
# subscribe to the target stream
|
2017-08-25 06:37:47 +02:00
|
|
|
self.subscribe(self.test_user, self.STREAM_NAME)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
|
|
|
# post to the webhook url
|
2021-02-12 08:19:30 +01:00
|
|
|
post_params = {
|
2021-02-12 08:20:45 +01:00
|
|
|
"stream_name": self.STREAM_NAME,
|
|
|
|
"content_type": "application/x-www-form-urlencoded",
|
2021-02-12 08:19:30 +01:00
|
|
|
}
|
2021-02-12 08:20:45 +01:00
|
|
|
result = self.client_post(self.url, "unknown_action", **post_params)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
|
|
|
# check that we got the expected error message
|
2021-05-10 07:02:14 +02:00
|
|
|
self.assert_json_error(result, "Unknown WordPress webhook action: WordPress action")
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-04 07:47:46 +01:00
|
|
|
def test_unknown_action_no_hook_provided(self) -> None:
|
2016-11-29 22:48:22 +01:00
|
|
|
|
|
|
|
# Similar to unknown_action_no_data, except the fixture contains valid blog post
|
|
|
|
# params but without the hook parameter. This should also return an error.
|
|
|
|
|
2017-08-25 06:37:47 +02:00
|
|
|
self.subscribe(self.test_user, self.STREAM_NAME)
|
2021-02-12 08:19:30 +01:00
|
|
|
post_params = {
|
2021-02-12 08:20:45 +01:00
|
|
|
"stream_name": self.STREAM_NAME,
|
|
|
|
"content_type": "application/x-www-form-urlencoded",
|
2021-02-12 08:19:30 +01:00
|
|
|
}
|
2021-02-12 08:20:45 +01:00
|
|
|
result = self.client_post(self.url, "unknown_action", **post_params)
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2021-05-10 07:02:14 +02:00
|
|
|
self.assert_json_error(result, "Unknown WordPress webhook action: WordPress action")
|
2016-11-29 22:48:22 +01:00
|
|
|
|
2017-11-09 08:59:34 +01:00
|
|
|
def get_body(self, fixture_name: str) -> str:
|
2018-04-20 03:57:21 +02:00
|
|
|
return self.webhook_fixture_data("wordpress", fixture_name, file_type="txt")
|