Merge pull request #1082 from normanjaeckel/SetStateView
Add check for set state view, fix #1080.
This commit is contained in:
commit
3d19ae7db2
@ -25,7 +25,7 @@ from .forms import (BaseMotionForm, MotionCategoryMixin,
|
|||||||
MotionImportForm, MotionSubmitterMixin,
|
MotionImportForm, MotionSubmitterMixin,
|
||||||
MotionSupporterMixin, MotionWorkflowMixin)
|
MotionSupporterMixin, MotionWorkflowMixin)
|
||||||
from .models import (Category, Motion, MotionPoll, MotionSubmitter,
|
from .models import (Category, Motion, MotionPoll, MotionSubmitter,
|
||||||
MotionSupporter, MotionVersion, WorkflowError)
|
MotionSupporter, MotionVersion, State)
|
||||||
from .pdf import motion_poll_to_pdf, motion_to_pdf, motions_to_pdf
|
from .pdf import motion_poll_to_pdf, motion_to_pdf, motions_to_pdf
|
||||||
|
|
||||||
|
|
||||||
@ -647,17 +647,21 @@ class MotionSetStateView(SingleObjectMixin, RedirectView):
|
|||||||
Save the new state and write a log message.
|
Save the new state and write a log message.
|
||||||
"""
|
"""
|
||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
try:
|
success = False
|
||||||
if self.reset:
|
if self.reset:
|
||||||
self.object.reset_state()
|
self.object.reset_state()
|
||||||
|
success = True
|
||||||
|
elif self.object.state.id == int(kwargs['state']):
|
||||||
|
messages.error(request, _('You can not set the state of the motion. It is already done.'))
|
||||||
|
elif int(kwargs['state']) not in [state.id for state in self.object.state.next_states.all()]:
|
||||||
|
messages.error(request, _('You can not set the state of the motion to %s.') % _(State.objects.get(pk=int(kwargs['state'])).name))
|
||||||
else:
|
else:
|
||||||
self.object.set_state(int(kwargs['state']))
|
self.object.set_state(int(kwargs['state']))
|
||||||
except WorkflowError, e: # TODO: Is a WorkflowError still possible here?
|
success = True
|
||||||
messages.error(request, e)
|
if success:
|
||||||
else:
|
|
||||||
self.object.save(update_fields=['state', 'identifier'])
|
self.object.save(update_fields=['state', 'identifier'])
|
||||||
self.object.write_log(
|
self.object.write_log(
|
||||||
message_list=[ugettext_noop('State changed to'), ' %s' % self.object.state.name],
|
message_list=[ugettext_noop('State changed to'), ' %s' % self.object.state.name], # TODO: Change string to 'State set to ...'
|
||||||
person=self.request.user)
|
person=self.request.user)
|
||||||
messages.success(request,
|
messages.success(request,
|
||||||
_('The state of the motion was set to %s.')
|
_('The state of the motion was set to %s.')
|
||||||
|
@ -470,6 +470,21 @@ class TestVersionDeleteView(MotionViewTestCase):
|
|||||||
self.assertEqual(response.status_code, 404)
|
self.assertEqual(response.status_code, 404)
|
||||||
|
|
||||||
|
|
||||||
|
class MotionSetStatusView(MotionViewTestCase):
|
||||||
|
def test_set_status(self):
|
||||||
|
self.assertEqual(self.motion1.state, State.objects.get(name='submitted'))
|
||||||
|
self.check_url('/motion/1/set_state/4/', self.registered_client, 403)
|
||||||
|
response = self.staff_client.get('/motion/1/set_state/4/')
|
||||||
|
self.assertRedirects(response, '/motion/1/')
|
||||||
|
self.assertEqual(Motion.objects.get(pk=1).state, State.objects.get(name='not decided'))
|
||||||
|
response = self.staff_client.get('/motion/1/set_state/1/')
|
||||||
|
self.assertTrue('You can not set the state of the motion to submitted.' in response.cookies['messages'].value)
|
||||||
|
self.assertRedirects(response, '/motion/1/')
|
||||||
|
response = self.staff_client.get('/motion/1/set_state/4/')
|
||||||
|
self.assertTrue('You can not set the state of the motion. It is already done.' in response.cookies['messages'].value)
|
||||||
|
self.assertRedirects(response, '/motion/1/')
|
||||||
|
|
||||||
|
|
||||||
class CategoryViewsTest(TestCase):
|
class CategoryViewsTest(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.admin_client = Client()
|
self.admin_client = Client()
|
||||||
|
Loading…
Reference in New Issue
Block a user