2016-09-20 22:51:11 +02:00
# -*- coding: utf-8 -*-
2016-12-04 18:38:56 +01:00
from typing import Text
2016-11-10 19:30:09 +01:00
from zerver . lib . test_classes import WebhookTestCase
2016-09-20 22:51:11 +02:00
class FreshdeskHookTests ( WebhookTestCase ) :
STREAM_NAME = ' freshdesk '
URL_TEMPLATE = u " /api/v1/external/freshdesk?stream= {stream} "
def test_ticket_creation ( self ) :
# type: () -> None
"""
Messages are generated on ticket creation through Freshdesk ' s
" Dispatch ' r " service .
"""
expected_subject = u " #11: Test ticket subject ☃ "
expected_message = u """ Requester ☃ Bob <requester-bob@example.com> created [ticket #11](http://test1234zzz.freshdesk.com/helpdesk/tickets/11):
~ ~ ~ quote
Test ticket description ☃ .
~ ~ ~
Type : * * Incident * *
Priority : * * High * *
Status : * * Pending * * """
self . send_and_test_stream_message ( ' ticket_created ' , expected_subject , expected_message , content_type = " application/x-www-form-urlencoded " , * * self . api_auth ( self . TEST_USER_EMAIL ) )
def test_status_change ( self ) :
# type: () -> None
"""
Messages are generated when a ticket ' s status changes through
Freshdesk ' s " Observer " service.
"""
expected_subject = u " #11: Test ticket subject ☃ "
expected_message = """ Requester Bob <requester-bob@example.com> updated [ticket #11](http://test1234zzz.freshdesk.com/helpdesk/tickets/11):
Status : * * Resolved * * = > * * Waiting on Customer * * """
self . send_and_test_stream_message ( ' status_changed ' , expected_subject , expected_message ,
content_type = " application/x-www-form-urlencoded " ,
* * self . api_auth ( self . TEST_USER_EMAIL ) )
def test_priority_change ( self ) :
# type: () -> None
"""
Messages are generated when a ticket ' s priority changes through
Freshdesk ' s " Observer " service.
"""
expected_subject = u " #11: Test ticket subject "
expected_message = """ Requester Bob <requester-bob@example.com> updated [ticket #11](http://test1234zzz.freshdesk.com/helpdesk/tickets/11):
Priority : * * High * * = > * * Low * * """
self . send_and_test_stream_message ( ' priority_changed ' , expected_subject , expected_message ,
content_type = " application/x-www-form-urlencoded " ,
* * self . api_auth ( self . TEST_USER_EMAIL ) )
def note_change ( self , fixture , note_type ) :
2016-12-04 18:38:56 +01:00
# type: (Text, Text) -> None
2016-09-20 22:51:11 +02:00
"""
Messages are generated when a note gets added to a ticket through
Freshdesk ' s " Observer " service.
"""
expected_subject = u " #11: Test ticket subject "
expected_message = """ Requester Bob <requester-bob@example.com> added a {} note to [ticket #11](http://test1234zzz.freshdesk.com/helpdesk/tickets/11). """ . format ( note_type )
self . send_and_test_stream_message ( fixture , expected_subject , expected_message ,
content_type = " application/x-www-form-urlencoded " ,
* * self . api_auth ( self . TEST_USER_EMAIL ) )
def test_private_note_change ( self ) :
# type: () -> None
self . note_change ( " private_note " , " private " )
def test_public_note_change ( self ) :
# type: () -> None
self . note_change ( " public_note " , " public " )
def test_inline_image ( self ) :
# type: () -> None
"""
Freshdesk sends us descriptions as HTML , so we have to make the
descriptions Zulip markdown - friendly while still doing our best to
preserve links and images .
"""
expected_subject = u " #12: Not enough ☃ guinea pigs "
expected_message = u " Requester \u2603 Bob <requester-bob@example.com> created [ticket #12](http://test1234zzz.freshdesk.com/helpdesk/tickets/12): \n \n ~~~ quote \n There are too many cat pictures on the internet \u2603 . We need more guinea pigs. Exhibit 1: \n \n \n \n \n [guinea_pig.png](http://cdn.freshdesk.com/data/helpdesk/attachments/production/12744808/original/guinea_pig.png) \n ~~~ \n \n Type: **Problem** \n Priority: **Urgent** \n Status: **Open** "
self . send_and_test_stream_message ( " inline_images " , expected_subject , expected_message ,
content_type = " application/x-www-form-urlencoded " ,
* * self . api_auth ( self . TEST_USER_EMAIL ) )
def build_webhook_url ( self ) :
2016-12-04 18:38:56 +01:00
# type: () -> Text
2016-09-20 22:51:11 +02:00
return self . URL_TEMPLATE . format ( stream = self . STREAM_NAME )
def get_body ( self , fixture_name ) :
2016-12-04 18:38:56 +01:00
# type: (Text) -> Text
2016-09-20 22:51:11 +02:00
return self . fixture_data ( " freshdesk " , fixture_name , file_type = " json " )