2018-12-18 00:29:08 +01:00
import json
2020-05-26 07:16:25 +02:00
from unittest . mock import MagicMock , patch
2018-06-19 01:54:57 +02:00
from zerver . lib . test_classes import WebhookTestCase
2020-01-14 22:06:24 +01:00
2018-06-19 01:54:57 +02:00
class ClubhouseWebhookTest ( WebhookTestCase ) :
STREAM_NAME = ' clubhouse '
URL_TEMPLATE = " /api/v1/external/clubhouse?stream= {stream} &api_key= {api_key} "
FIXTURE_DIR_NAME = ' clubhouse '
def test_story_create ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) of type **feature** was created. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message (
' story_create ' , " Add cool feature! " ,
python: Use trailing commas consistently.
Automatically generated by the following script, based on the output
of lint with flake8-comma:
import re
import sys
last_filename = None
last_row = None
lines = []
for msg in sys.stdin:
m = re.match(
r"\x1b\[35mflake8 \|\x1b\[0m \x1b\[1;31m(.+):(\d+):(\d+): (\w+)", msg
)
if m:
filename, row_str, col_str, err = m.groups()
row, col = int(row_str), int(col_str)
if filename == last_filename:
assert last_row != row
else:
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
with open(filename) as f:
lines = f.readlines()
last_filename = filename
last_row = row
line = lines[row - 1]
if err in ["C812", "C815"]:
lines[row - 1] = line[: col - 1] + "," + line[col - 1 :]
elif err in ["C819"]:
assert line[col - 2] == ","
lines[row - 1] = line[: col - 2] + line[col - 1 :].lstrip(" ")
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-10 05:23:40 +02:00
expected_message ,
2018-06-19 01:54:57 +02:00
)
2018-12-18 00:00:25 +01:00
def test_story_delete ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story **New random story** was deleted. "
2018-12-18 00:00:25 +01:00
self . send_and_test_stream_message ( " story_delete " , " New random story " ,
expected_message )
2018-06-19 01:54:57 +02:00
def test_epic_story_create ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New story [An epic story!](https://app.clubhouse.io/zulip/story/23) was created and added to the epic **New Cool Epic!**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message (
' epic_create_story ' , " An epic story! " ,
python: Use trailing commas consistently.
Automatically generated by the following script, based on the output
of lint with flake8-comma:
import re
import sys
last_filename = None
last_row = None
lines = []
for msg in sys.stdin:
m = re.match(
r"\x1b\[35mflake8 \|\x1b\[0m \x1b\[1;31m(.+):(\d+):(\d+): (\w+)", msg
)
if m:
filename, row_str, col_str, err = m.groups()
row, col = int(row_str), int(col_str)
if filename == last_filename:
assert last_row != row
else:
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
with open(filename) as f:
lines = f.readlines()
last_filename = filename
last_row = row
line = lines[row - 1]
if err in ["C812", "C815"]:
lines[row - 1] = line[: col - 1] + "," + line[col - 1 :]
elif err in ["C819"]:
assert line[col - 2] == ","
lines[row - 1] = line[: col - 2] + line[col - 1 :].lstrip(" ")
if last_filename is not None:
with open(last_filename, "w") as f:
f.writelines(lines)
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-10 05:23:40 +02:00
expected_message ,
2018-06-19 01:54:57 +02:00
)
2018-12-18 00:00:25 +01:00
def test_epic_delete ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The epic **Clubhouse Fork** was deleted. "
2018-12-18 00:00:25 +01:00
self . send_and_test_stream_message ( " epic_delete " , " Clubhouse Fork " ,
expected_message )
2018-06-19 01:54:57 +02:00
def test_story_archive ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story [Story 2](https://app.clubhouse.io/zulip/story/9) was archived. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_archive ' , " Story 2 " , expected_message )
2019-02-20 23:44:42 +01:00
def test_epic_archive ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The epic **Zulip is epic!** was archived. "
2019-02-20 23:44:42 +01:00
self . send_and_test_stream_message ( ' epic_archive ' , ' Zulip is epic! ' ,
expected_message )
2018-06-19 01:54:57 +02:00
def test_story_unarchive ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story [Story 2](https://app.clubhouse.io/zulip/story/9) was unarchived. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_unarchive ' , " Story 2 " , expected_message )
def test_epic_create ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New epic **New Epic!**(to do) was created. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_create ' , " New Epic! " , expected_message )
def test_epic_update_add_comment ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New comment added to the epic **New Cool Epic!**: \n ``` quote \n Added a comment on this Epic! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_add_comment ' ,
" New Cool Epic! " , expected_message )
def test_story_update_add_comment ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New comment added to the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11): \n ``` quote \n Just leaving a comment here! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_add_comment ' ,
" Add cool feature! " ,
expected_message )
def test_epic_update_add_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New description added to the epic **New Cool Epic!**: \n ``` quote \n Added a description! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_add_description ' ,
" New Cool Epic! " , expected_message )
def test_epic_update_remove_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Description for the epic **New Cool Epic!** was removed. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_remove_description ' ,
" New Cool Epic! " , expected_message )
def test_epic_update_change_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Description for the epic **New Cool Epic!** was changed from: \n ``` quote \n Added a description! \n ``` \n to \n ``` quote \n Changed a description! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_change_description ' ,
" New Cool Epic! " , expected_message )
def test_story_update_add_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New description added to the story [Story 2](https://app.clubhouse.io/zulip/story/9): \n ``` quote \n Added a description. \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_add_description ' ,
" Story 2 " , expected_message )
def test_story_update_remove_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Description for the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was removed. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_remove_description ' ,
" Add cool feature! " , expected_message )
def test_story_update_change_description ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Description for the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was changed from: \n ``` quote \n We should probably add this cool feature! \n ``` \n to \n ``` quote \n We should probably add this cool feature! Just edited this. :) \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_description ' ,
" Add cool feature! " , expected_message )
def test_epic_update_change_state ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " State of the epic **New Cool Epic!** was changed from **to do** to **in progress**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_change_state ' ,
" New Cool Epic! " , expected_message )
def test_story_update_change_state ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " State of the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was changed from **Unscheduled** to **Ready for Review**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_state ' ,
" Add cool feature! " , expected_message )
def test_epic_update_change_name ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The name of the epic **New Cool Epic!** was changed from: \n ``` quote \n New Epic! \n ``` \n to \n ``` quote \n New Cool Epic! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' epic_update_change_title ' , " New Cool Epic! " ,
expected_message )
def test_story_update_change_name ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The name of the story [Add super cool feature!](https://app.clubhouse.io/zulip/story/11) was changed from: \n ``` quote \n Add cool feature! \n ``` \n to \n ``` quote \n Add super cool feature! \n ``` "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_title ' , " Add super cool feature! " ,
expected_message )
2019-01-04 23:10:07 +01:00
def test_story_update_add_owner ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New owner added to the story [A new story by Shakespeare!](https://app.clubhouse.io/zulip/story/26). "
2019-01-04 23:10:07 +01:00
self . send_and_test_stream_message ( ' story_update_add_owner ' , ' A new story by Shakespeare! ' ,
expected_message )
2018-06-19 01:54:57 +02:00
def test_story_task_created ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Task **Added a new task** was added to the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11). "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_task_create ' , " Add cool feature! " ,
expected_message )
def test_story_task_deleted ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Task **Added a new task** was removed from the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11). "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_task_delete ' , " Add cool feature! " ,
expected_message )
def test_story_task_completed ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " Task **A new task for this story** ([Add cool feature!](https://app.clubhouse.io/zulip/story/11)) was completed. :tada: "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_task_complete ' , " Add cool feature! " ,
expected_message )
@patch ( ' zerver.lib.webhooks.common.check_send_webhook_message ' )
def test_story_task_incomplete_ignore (
self , check_send_webhook_message_mock : MagicMock ) - > None :
payload = self . get_body ( ' story_task_not_complete ' )
result = self . client_post ( self . url , payload , content_type = " application/json " )
self . assertFalse ( check_send_webhook_message_mock . called )
self . assert_json_success ( result )
def test_story_epic_changed ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = ( " The story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was moved from **Release 1.9** "
" to **Clubhouse Fork**. " )
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_epic ' , " Add cool feature! " ,
expected_message )
def test_story_epic_added ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was added to the epic **Release 1.9**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_add_epic ' , " Add cool feature! " ,
expected_message )
def test_story_epic_removed ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was removed from the epic **Release 1.9**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_remove_epic ' , " Add cool feature! " ,
expected_message )
def test_story_estimate_changed ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The estimate for the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was set to 4 points. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_estimate ' , " Add cool feature! " ,
expected_message )
def test_story_estimate_added ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The estimate for the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was set to 4 points. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_add_estimate ' , " Add cool feature! " ,
expected_message )
def test_story_estimate_removed ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The estimate for the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was set to *Unestimated*. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_remove_estimate ' , " Add cool feature! " ,
expected_message )
def test_story_file_attachment_added ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " A file attachment `zuliprc` was added to the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11). "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_add_attachment ' , " Add cool feature! " ,
expected_message )
@patch ( ' zerver.lib.webhooks.common.check_send_webhook_message ' )
def test_story_file_attachment_removed_ignore (
self , check_send_webhook_message_mock : MagicMock ) - > None :
payload = self . get_body ( ' story_update_remove_attachment ' )
result = self . client_post ( self . url , payload , content_type = " application/json " )
self . assertFalse ( check_send_webhook_message_mock . called )
self . assert_json_success ( result )
def test_story_label_added ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The label **mockup** was added to the story [An epic story!](https://app.clubhouse.io/zulip/story/23). "
2019-01-11 00:38:07 +01:00
self . send_and_test_stream_message ( ' story_update_add_label ' , " An epic story! " ,
2018-06-19 01:54:57 +02:00
expected_message )
2019-01-25 00:04:21 +01:00
def test_story_label_added_label_name_in_actions ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The label **sad** was added to the story [An emotional story!](https://app.clubhouse.io/zulip/story/28). "
2019-01-25 00:04:21 +01:00
self . send_and_test_stream_message ( ' story_update_add_label_name_in_action ' ,
' An emotional story! ' ,
expected_message )
2018-06-19 01:54:57 +02:00
@patch ( ' zerver.lib.webhooks.common.check_send_webhook_message ' )
def test_story_label_removed_ignore (
self , check_send_webhook_message_mock : MagicMock ) - > None :
payload = self . get_body ( ' story_update_remove_label ' )
result = self . client_post ( self . url , payload , content_type = " application/json " )
self . assertFalse ( check_send_webhook_message_mock . called )
self . assert_json_success ( result )
def test_story_update_project ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was moved from the **Backend** project to **Devops**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_project ' , " Add cool feature! " ,
expected_message )
def test_story_update_type ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " The type of the story [Add cool feature!](https://app.clubhouse.io/zulip/story/11) was changed from **feature** to **bug**. "
2018-06-19 01:54:57 +02:00
self . send_and_test_stream_message ( ' story_update_change_type ' , " Add cool feature! " ,
expected_message )
2018-12-18 00:29:08 +01:00
2019-01-24 04:28:54 +01:00
def test_story_update_add_github_pull_request ( self ) - > None :
2020-04-09 21:51:58 +02:00
expected_message = " New GitHub PR [#10](https://github.com/eeshangarg/Scheduler/pull/10) opened for story [Testing pull requests with Story](https://app.clubhouse.io/zulip/story/28) (Unscheduled -> Ready for Review). "
2019-01-24 04:28:54 +01:00
self . send_and_test_stream_message ( ' story_update_add_github_pull_request ' ,
' Testing pull requests with Story ' ,
expected_message )
def test_story_update_add_github_branch ( self ) - > None :
expected_message = " New GitHub branch [eeshangarg/ch27/testing-pull-requests-with-story](https://github.com/eeshangarg/scheduler/tree/eeshangarg/ch27/testing-pull-requests-with-story) associated with story [Testing pull requests with Story](https://app.clubhouse.io/zulip/story/27) (Unscheduled -> In Development). "
self . send_and_test_stream_message ( ' story_update_add_github_branch ' ,
' Testing pull requests with Story ' ,
expected_message )
2018-12-18 00:29:08 +01:00
@patch ( ' zerver.lib.webhooks.common.check_send_webhook_message ' )
def test_empty_post_request_body_ignore ( self , check_send_webhook_message_mock : MagicMock ) - > None :
payload = json . dumps ( None )
result = self . client_post ( self . url , payload , content_type = " application/json " )
self . assertFalse ( check_send_webhook_message_mock . called )
self . assert_json_success ( result )
2019-02-20 23:21:14 +01:00
@patch ( ' zerver.lib.webhooks.common.check_send_webhook_message ' )
def test_story_comment_updated_ignore ( self , check_send_webhook_message_mock : MagicMock ) - > None :
payload = self . get_body ( ' story_comment_updated ' )
result = self . client_post ( self . url , payload , content_type = " application/json " )
self . assertFalse ( check_send_webhook_message_mock . called )
self . assert_json_success ( result )