Skip to content

Commit

Permalink
Merge pull request #24 from dmranck/return-statements
Browse files Browse the repository at this point in the history
UPDATE ticketutil methods with improved return statements
  • Loading branch information
dmranck committed Jun 29, 2017
2 parents 0e8a0e3 + 77e133f commit dbd7587
Show file tree
Hide file tree
Showing 8 changed files with 834 additions and 525 deletions.
4 changes: 4 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ Simplify all of your ticketing operations with ticketutil:
t = ticket.add_comment('Test Comment')
t = ticket.change_status('Done')
# Check status of previous ticketing operation and print URL of ticket.
print(t.status)
print(t.url)
# Close Requests session.
ticket.close_requests_session()
Expand Down
118 changes: 67 additions & 51 deletions tests/test_servicenow.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import logging
import os
import sys
import logging
import requests

from collections import namedtuple
from unittest import main, TestCase
from unittest.mock import patch

import requests

sys.path.append(os.path.join(os.path.dirname(__file__), '../ticketutil/'))

import servicenow
Expand Down Expand Up @@ -34,15 +35,19 @@
ITEM = 'item'

MOCK_RESULT = {'number': TICKET_ID,
'state': MOCK_STATE['new'],
'state': MOCK_STATE['pending'],
'watch_list': 'pzubaty@redhat.com',
'comments': '',
'comments': 'New comment',
'sys_id': '#34346',
'description': DESCRIPTION,
'short_description': SHORT_DESCRIPTION,
'u_category': CATEGORY,
'u_item': ITEM}

RETURN_RESULT = namedtuple('Result', ['status', 'error_message', 'url', 'ticket_content'])
MOCK_RETURN_SUCCESS = RETURN_RESULT('Success', None, None, MOCK_RESULT)
MOCK_RETURN_FAILURE = RETURN_RESULT('Failure', 'Generic error message', None, None)


class FakeResponse(object):
"""Mock response coming from server via Requests
Expand Down Expand Up @@ -109,8 +114,8 @@ def put(self, url, data):
return FakeResponse(status_code=self.status_code)


def mock_get_ticket_content(self, ticket_id):
return MOCK_RESULT
def mock_get_ticket_content(self, ticket_id=None):
return MOCK_RETURN_SUCCESS


def mock_verify_project(self, project):
Expand All @@ -130,31 +135,31 @@ class TestServiceNowTicket(TestCase):
def test_get_ticket_content(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE)
result = ticket.get_ticket_content(ticket_id=TICKET_ID)
self.assertEqual(result, MOCK_RESULT)
t = ticket.get_ticket_content(ticket_id=TICKET_ID)
self.assertDictEqual(t.ticket_content, MOCK_RESULT)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
def test_get_ticket_content_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE)
result = ticket.get_ticket_content(ticket_id=TICKET_ID)
self.assertEqual(result, False)
t = ticket.get_ticket_content(ticket_id=TICKET_ID)
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
def test_create(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE)
ticket.create(DESCRIPTION, SHORT_DESCRIPTION, CATEGORY, ITEM)
self.assertEqual(ticket.ticket_content, MOCK_RESULT)
t = ticket.create(DESCRIPTION, SHORT_DESCRIPTION, CATEGORY, ITEM)
self.assertDictEqual(t.ticket_content, MOCK_RESULT)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
def test_create_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE)
ticket.create(DESCRIPTION, SHORT_DESCRIPTION, CATEGORY, ITEM)
self.assertEqual(ticket.ticket_content, None)
t = ticket.create(DESCRIPTION, SHORT_DESCRIPTION, CATEGORY, ITEM)
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket.get_ticket_content',
Expand All @@ -163,10 +168,20 @@ def test_change_status(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.change_status('Pending')
expected_result = MOCK_RESULT
expected_result.update({'state': MOCK_STATE['pending']})
self.assertEqual(ticket.ticket_content, expected_result)
t = ticket.change_status('Pending')
expected_result = MOCK_RESULT.copy()
expected_result['state'] = MOCK_STATE['pending']
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket.get_ticket_content',
mock_get_ticket_content)
def test_change_status_invalid_state(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
t = ticket.change_status('Fake')
self.assertEqual(t.error_message, "Invalid state 'fake'")

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -177,8 +192,8 @@ def test_change_status_unexpected_response(self, mock_session):
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
servicenow.ServiceNowTicket.available_states = MOCK_STATE
result = ticket.change_status('Pending')
self.assertEqual(result, False)
t = ticket.change_status('Pending')
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket.get_ticket_content',
Expand All @@ -187,10 +202,11 @@ def test_edit(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.edit(priority='2', impact='2')
expected_result = MOCK_RESULT
t = ticket.edit(priority='2', impact='2')
expected_result = MOCK_RESULT.copy()
expected_result.update({'priority': '2', 'impact': '2'})
self.assertEqual(ticket.ticket_content, expected_result)
MOCK_RESULT.update({'priority': '2', 'impact': '2'})
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -200,8 +216,8 @@ def test_edit_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
result = ticket.edit(priority='2', impact='2')
self.assertEqual(result, False)
t = ticket.edit(priority='2', impact='2')
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -211,10 +227,10 @@ def test_add_comment(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.add_comment('New comment')
expected_result = MOCK_RESULT
expected_result.update({'comments': 'New comment'})
self.assertEqual(ticket.ticket_content, expected_result)
t = ticket.add_comment('New comment')
expected_result = MOCK_RESULT.copy()
expected_result['comments'] = 'New comment'
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -224,8 +240,8 @@ def test_add_comment_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
result = ticket.add_comment('New comment')
self.assertEqual(result, False)
t = ticket.add_comment('New comment')
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -235,10 +251,10 @@ def test_add_cc(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.add_cc('pzubaty@redhat.com')
expected_result = MOCK_RESULT
expected_result.update({'watch_list': 'pzubaty@redhat.com'})
self.assertEqual(ticket.ticket_content, expected_result)
t = ticket.add_cc('pzubaty@redhat.com')
expected_result = MOCK_RESULT.copy()
expected_result['watch_list'] = 'pzubaty@redhat.com'
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -248,8 +264,8 @@ def test_add_cc_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
result = ticket.add_cc('pzubaty@redhat.com')
self.assertEqual(result, False)
t = ticket.add_cc('pzubaty@redhat.com')
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -259,11 +275,11 @@ def test_rewrite_cc(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.rewrite_cc(['pzubaty@redhat.com', 'dranck@redhat.com'])
expected_result = MOCK_RESULT
expected_result.update({'watch_list':
'pzubaty@redhat.com, dranck@redhat.com'})
self.assertEqual(ticket.ticket_content, expected_result)
t = ticket.rewrite_cc(['pzubaty@redhat.com', 'dranck@redhat.com'])
expected_result = MOCK_RESULT.copy()
expected_result['watch_list'] = 'pzubaty@redhat.com, dranck@redhat.com'
MOCK_RESULT['watch_list'] = 'pzubaty@redhat.com, dranck@redhat.com'
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -273,8 +289,8 @@ def test_rewrite_cc_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
result = ticket.rewrite_cc(['pzubaty@redhat.com', 'dranck@redhat.com'])
self.assertEqual(result, False)
t = ticket.rewrite_cc(['pzubaty@redhat.com', 'dranck@redhat.com'])
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -284,10 +300,10 @@ def test_remove_cc(self, mock_session):
mock_session.return_value = FakeSession()
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
ticket.remove_cc(['dranck@redhat.com', 'mail@redhat.com'])
expected_result = MOCK_RESULT
expected_result.update({'watch_list': 'pzubaty@redhat.com'})
self.assertEqual(ticket.ticket_content, expected_result)
t = ticket.remove_cc(['dranck@redhat.com', 'mail@redhat.com'])
expected_result = MOCK_RESULT.copy()
expected_result['watch_list'] = 'pzubaty@redhat.com'
self.assertDictEqual(t.ticket_content, expected_result)

@patch.object(servicenow.ServiceNowTicket, '_create_requests_session')
@patch('servicenow.ServiceNowTicket._verify_project', mock_verify_project)
Expand All @@ -297,8 +313,8 @@ def test_remove_cc_unexpected_response(self, mock_session):
mock_session.return_value = FakeSession(status_code=404)
ticket = servicenow.ServiceNowTicket(TEST_URL, TABLE,
ticket_id=TICKET_ID)
result = ticket.remove_cc(['dranck@redhat.com', 'mail@redhat.com'])
self.assertEqual(result, False)
t = ticket.remove_cc(['dranck@redhat.com', 'mail@redhat.com'])
self.assertEqual(t.status, MOCK_RETURN_FAILURE.status)

if __name__ == '__main__':
main()

0 comments on commit dbd7587

Please sign in to comment.