Merge pull request #2017 from normanjaeckel/FixMotionPoll
Fixed error in motion poll serializer. Fixed #2014.
This commit is contained in:
commit
8d1de6923b
@ -118,6 +118,11 @@ class MotionPollSerializer(ModelSerializer):
|
||||
'has_votes')
|
||||
validators = (default_votes_validator,)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
# The following dictionary is just a cache for several votes.
|
||||
self._votes_dicts = {}
|
||||
return super().__init__(*args, **kwargs)
|
||||
|
||||
def get_yes(self, obj):
|
||||
try:
|
||||
result = self.get_votes_dict(obj)['Yes']
|
||||
@ -141,9 +146,9 @@ class MotionPollSerializer(ModelSerializer):
|
||||
|
||||
def get_votes_dict(self, obj):
|
||||
try:
|
||||
votes_dict = self._votes_dict
|
||||
except AttributeError:
|
||||
votes_dict = self._votes_dict = {}
|
||||
votes_dict = self._votes_dicts[obj.pk]
|
||||
except KeyError:
|
||||
votes_dict = self._votes_dicts[obj.pk] = {}
|
||||
for vote in obj.get_votes():
|
||||
votes_dict[vote.value] = vote.weight
|
||||
return votes_dict
|
||||
|
@ -380,6 +380,29 @@ class SetState(TestCase):
|
||||
self.assertEqual(Motion.objects.get(pk=self.motion.pk).state.name, 'submitted')
|
||||
|
||||
|
||||
class CreateMotionPoll(TestCase):
|
||||
"""
|
||||
Tests creating polls of motions.
|
||||
"""
|
||||
def setUp(self):
|
||||
self.client = APIClient()
|
||||
self.client.login(username='admin', password='admin')
|
||||
self.motion = Motion(
|
||||
title='test_title_Aiqueigh2dae9phabiqu',
|
||||
text='test_text_Neekoh3zou6li5rue8iL')
|
||||
self.motion.save()
|
||||
|
||||
def test_create_first_poll_with_values_then_second_poll_without(self):
|
||||
self.poll = self.motion.create_poll()
|
||||
self.poll.set_vote_objects_with_values(self.poll.get_options().get(), {'Yes': 42, 'No': 43, 'Abstain': 44})
|
||||
response = self.client.post(
|
||||
reverse('motion-create-poll', args=[self.motion.pk]))
|
||||
self.assertEqual(self.motion.polls.count(), 2)
|
||||
response = self.client.get(reverse('motion-detail', args=[self.motion.pk]))
|
||||
for key in ('yes', 'no', 'abstain'):
|
||||
self.assertTrue(response.data['polls'][1][key] is None, 'Vote value "{}" should be None.'.format(key))
|
||||
|
||||
|
||||
class UpdateMotionPoll(TestCase):
|
||||
"""
|
||||
Tests updating polls of motions.
|
||||
|
Loading…
Reference in New Issue
Block a user