Skip to content

Commit

Permalink
add use of django.contrib.message at OpenTicketView and relative tests
Browse files Browse the repository at this point in the history
  • Loading branch information
simodalla committed May 29, 2014
1 parent dc2cd8e commit fd2a09d
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 12 deletions.
14 changes: 10 additions & 4 deletions helpdesk/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from django.contrib import messages
from django.contrib.admin.templatetags.admin_urls import admin_urlname
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.views.generic import RedirectView

from braces.views import GroupRequiredMixin
Expand All @@ -24,15 +25,20 @@ def get_redirect_url(self, *args, **kwargs):
ticket_pk = kwargs.get('pk')
ticket_changelist_url = reverse(admin_urlname(Ticket._meta,
'changelist'))
error_msg_prefix = _('An error occurs.')
try:
ticket = Ticket.objects.get(pk=ticket_pk)
ticket.open(self.request.user)
messages.success(self.request, 'Profile details updated.')
msg = _('Ticket n.%(pk)s is opened and assigned.') % {
'pk': ticket_pk}
messages.success(self.request, msg)
except Ticket.DoesNotExist:
# TODO: messaggio di errore per ticket non trovato
msg = _('Ticket n.%(pk)s does not exist.') % {'pk': ticket_pk}
messages.error(self.request, '{} {}'.format(error_msg_prefix, msg))
return ticket_changelist_url
except ValueError:
# TODO: messaggio di errore per open che ha lanciato un'eccezione
except ValueError as ve:
messages.error(self.request, '{} {}'.format(error_msg_prefix,
str(ve)))
return ticket_changelist_url
return reverse(admin_urlname(Ticket._meta, 'change'),
args=(ticket_pk,))
Expand Down
79 changes: 71 additions & 8 deletions tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,86 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import

from django.test import TestCase
try:
from unittest.mock import patch, Mock
except ImportError:
from mock import patch, Mock

from django.test import TestCase
from helpdesk.models import Ticket
from helpdesk.views import OpenTicketView

from .factories import UserFactory
from .helpers import TestViewHelper


class OpenTicketViewTest(TestViewHelper, TestCase):

view_class = OpenTicketView

def test_for_debug(self):
def setUp(self):
super(OpenTicketViewTest, self).setUp()
self.mock_user = Mock(name='request.user')

def tearDown(self):
self.mock_user.reset_mock()

@patch('helpdesk.views.messages', autospec=True)
@patch('helpdesk.views.Ticket.objects.get',
side_effect=Ticket.DoesNotExist)
def test_get_redirect_url_raise_doesnotexist_excpetion(self, mock_get,
mock_messages):
"""
Test that get_get_redirect return admin ticket changelist url
and messages.error is called with proper message.
"""
fake_ticket_pk = 1
request = self.build_request(user=self.mock_user)
# request = self.build_request(user=UserFactory())
view = self.build_view(request)
url = view.get_redirect_url(pk=fake_ticket_pk)
self.assertEqual(url, '/admin/helpdesk/ticket/')
mock_messages.error.assert_called_once_with(
request, 'An error occurs. Ticket n.{} does not exist.'.format(
fake_ticket_pk))

@patch('helpdesk.views.messages', autospec=True)
@patch('helpdesk.views.Ticket.objects.get')
def test_open_in_get_redirect_url_raise_excpetion(self, mock_get,
mock_messages):
"""
Test that get_get_redirect return admin ticket changelist url
and messages.error is called with proper message.
"""
fake_ticket_pk = 1
fake_open_error = 'Open Error'
request = self.build_request(user=self.mock_user)
mock_ticket = Mock(spec_set=Ticket)
mock_ticket.open.side_effect = ValueError(fake_open_error)
mock_get.return_value = mock_ticket
view = self.build_view(request)
url = view.get_redirect_url(pk=fake_ticket_pk)
self.assertEqual(url, '/admin/helpdesk/ticket/')
mock_ticket.open.assert_called_once_with(self.mock_user)
mock_messages.error.assert_called_once_with(
request, 'An error occurs. {}'.format(fake_open_error))

request = self.build_request(user=UserFactory())
print(request.user)
# import ipdb
# ipdb.set_trace()
@patch('helpdesk.views.messages', autospec=True)
@patch('helpdesk.views.Ticket.objects.get')
def test_get_redirect_url_return_correct_url(self, mock_get,
mock_messages):
"""
Test that get_get_redirect return admin ticket changelist url
and messages.error is called with proper message.
"""
fake_ticket_pk = 1
request = self.build_request(user=self.mock_user)
mock_ticket = Mock(spec_set=Ticket)
mock_get.return_value = mock_ticket
view = self.build_view(request)
print(view.get_redirect_url())
url = view.get_redirect_url(pk=fake_ticket_pk)
self.assertEqual(url,
'/admin/helpdesk/ticket/{}/'.format(fake_ticket_pk))
mock_ticket.open.assert_called_once_with(self.mock_user)
mock_messages.success.assert_called_once_with(
request,
'Ticket n.{} is opened and assigned.'.format(fake_ticket_pk))

0 comments on commit fd2a09d

Please sign in to comment.