mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-30 19:43:47 +00:00 
			
		
		
		
	Not all webhook payloads are json, so send_json_payload was a bit misleading. In passing I also remove "bytes" from the Union type for "payload" parameter.
		
			
				
	
	
		
			114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from zerver.lib.test_classes import WebhookTestCase
 | |
| 
 | |
| 
 | |
| class WordPressHookTests(WebhookTestCase):
 | |
|     STREAM_NAME = 'wordpress'
 | |
|     URL_TEMPLATE = "/api/v1/external/wordpress?api_key={api_key}&stream={stream}"
 | |
|     FIXTURE_DIR_NAME = 'wordpress'
 | |
| 
 | |
|     def test_publish_post(self) -> None:
 | |
| 
 | |
|         expected_topic = "WordPress Post"
 | |
|         expected_message = "New post published:\n* [New Blog Post](http://example.com\n)"
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "publish_post",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_publish_post_type_not_provided(self) -> None:
 | |
| 
 | |
|         expected_topic = "WordPress Post"
 | |
|         expected_message = "New post published:\n* [New Blog Post](http://example.com\n)"
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "publish_post_type_not_provided",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_publish_post_no_data_provided(self) -> None:
 | |
| 
 | |
|         # Note: the fixture includes 'hook=publish_post' because it's always added by HookPress
 | |
|         expected_topic = "WordPress Notification"
 | |
|         expected_message = "New post published:\n* [New WordPress Post](WordPress Post URL)"
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "publish_post_no_data_provided",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_publish_page(self) -> None:
 | |
| 
 | |
|         expected_topic = "WordPress Page"
 | |
|         expected_message = "New page published:\n* [New Blog Page](http://example.com\n)"
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "publish_page",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_user_register(self) -> None:
 | |
| 
 | |
|         expected_topic = "New Blog Users"
 | |
|         expected_message = "New blog user registered:\n* **Name**: test_user\n* **Email**: test_user@example.com"
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "user_register",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_wp_login(self) -> None:
 | |
| 
 | |
|         expected_topic = "New Login"
 | |
|         expected_message = "User testuser logged in."
 | |
| 
 | |
|         self.check_webhook(
 | |
|             "wp_login",
 | |
|             expected_topic,
 | |
|             expected_message,
 | |
|             content_type="application/x-www-form-urlencoded",
 | |
|         )
 | |
| 
 | |
|     def test_unknown_action_no_data(self) -> None:
 | |
| 
 | |
|         # Mimic check_webhook() to manually execute a negative test.
 | |
|         # Otherwise its call to send_webhook_payload() would assert on the non-success
 | |
|         # 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
 | |
|         self.subscribe(self.test_user, self.STREAM_NAME)
 | |
| 
 | |
|         # post to the webhook url
 | |
|         post_params = {'stream_name': self.STREAM_NAME,
 | |
|                        'content_type': 'application/x-www-form-urlencoded'}
 | |
|         result = self.client_post(self.url, 'unknown_action', **post_params)
 | |
| 
 | |
|         # check that we got the expected error message
 | |
|         self.assert_json_error(result, "Unknown WordPress webhook action: WordPress Action")
 | |
| 
 | |
|     def test_unknown_action_no_hook_provided(self) -> None:
 | |
| 
 | |
|         # 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.
 | |
| 
 | |
|         self.subscribe(self.test_user, self.STREAM_NAME)
 | |
|         post_params = {'stream_name': self.STREAM_NAME,
 | |
|                        'content_type': 'application/x-www-form-urlencoded'}
 | |
|         result = self.client_post(self.url, 'unknown_action', **post_params)
 | |
| 
 | |
|         self.assert_json_error(result, "Unknown WordPress webhook action: WordPress Action")
 | |
| 
 | |
|     def get_body(self, fixture_name: str) -> str:
 | |
|         return self.webhook_fixture_data("wordpress", fixture_name, file_type="txt")
 |