From 90b04366b528272a3676a02db6166132c8de9266 Mon Sep 17 00:00:00 2001 From: jsangmeister Date: Tue, 12 Nov 2019 09:20:10 +0100 Subject: [PATCH] added option to number poll cadidates --- .../shared/models/assignments/assignment.ts | 1 + .../assignment-detail.component.html | 7 +++++++ .../assignment-detail.component.ts | 3 ++- .../assignments/migrations/0008_voting_1.py | 5 +++++ openslides/assignments/models.py | 5 +++++ openslides/assignments/serializers.py | 1 + tests/integration/assignments/test_viewset.py | 18 ++++++++++++++---- 7 files changed, 35 insertions(+), 5 deletions(-) diff --git a/client/src/app/shared/models/assignments/assignment.ts b/client/src/app/shared/models/assignments/assignment.ts index 620126972..f58e01a38 100644 --- a/client/src/app/shared/models/assignments/assignment.ts +++ b/client/src/app/shared/models/assignments/assignment.ts @@ -10,6 +10,7 @@ export interface AssignmentWithoutNestedModels extends BaseModelWithAgendaItemAn default_poll_description: string; tags_id: number[]; attachments_id: number[]; + number_poll_candidates: boolean; } /** diff --git a/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.html b/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.html index 563566f66..cd177e365 100644 --- a/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.html +++ b/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.html @@ -301,6 +301,13 @@ }} + + +
+ + Number poll candidates + +
diff --git a/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.ts b/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.ts index bf795e250..a76a7eec1 100644 --- a/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.ts +++ b/client/src/app/site/assignments/components/assignment-detail/assignment-detail.component.ts @@ -193,7 +193,8 @@ export class AssignmentDetailComponent extends BaseViewComponent implements OnIn open_posts: [1, [Validators.required, Validators.min(1)]], agenda_create: [''], agenda_parent_id: [], - agenda_type: [''] + agenda_type: [''], + number_poll_candidates: [false] }); this.candidatesForm = formBuilder.group({ userId: null diff --git a/openslides/assignments/migrations/0008_voting_1.py b/openslides/assignments/migrations/0008_voting_1.py index e220a4748..1e80fb5be 100644 --- a/openslides/assignments/migrations/0008_voting_1.py +++ b/openslides/assignments/migrations/0008_voting_1.py @@ -129,6 +129,11 @@ class Migration(migrations.Migration): ), preserve_default=False, ), + migrations.AddField( + model_name="assignment", + name="number_poll_candidates", + field=models.BooleanField(default=False), + ), migrations.AlterField( model_name="assignment", name="poll_description_default", diff --git a/openslides/assignments/models.py b/openslides/assignments/models.py index a268c69e0..b040052df 100644 --- a/openslides/assignments/models.py +++ b/openslides/assignments/models.py @@ -153,6 +153,11 @@ class Assignment(RESTModelMixin, AgendaItemWithListOfSpeakersMixin, models.Model Mediafiles as attachments for this assignment. """ + number_poll_candidates = models.BooleanField(default=False) + """ + Controls whether the candidates in polls for this assignment should be numbered or listed with bullet points. + """ + class Meta: default_permissions = () permissions = ( diff --git a/openslides/assignments/serializers.py b/openslides/assignments/serializers.py index 13ed729d8..ec9755cf5 100644 --- a/openslides/assignments/serializers.py +++ b/openslides/assignments/serializers.py @@ -169,6 +169,7 @@ class AssignmentSerializer(ModelSerializer): "agenda_parent_id", "tags", "attachments", + "number_poll_candidates", ) validators = (posts_validator,) diff --git a/tests/integration/assignments/test_viewset.py b/tests/integration/assignments/test_viewset.py index 2ebbba7ee..db874641e 100644 --- a/tests/integration/assignments/test_viewset.py +++ b/tests/integration/assignments/test_viewset.py @@ -42,10 +42,6 @@ class CreateAssignment(TestCase): Tests basic creation of assignments. """ - def setUp(self): - self.client = APIClient() - self.client.login(username="admin", password="admin") - def test_simple(self): response = self.client.post( reverse("assignment-list"), @@ -54,6 +50,7 @@ class CreateAssignment(TestCase): self.assertEqual(response.status_code, status.HTTP_201_CREATED) assignment = Assignment.objects.get() self.assertEqual(assignment.title, "test_title_ef3jpF)M329f30m)f82") + self.assertEqual(assignment.number_poll_candidates, False) def test_with_tags_and_mediafiles(self): Tag.objects.create(name="test_tag") @@ -75,6 +72,19 @@ class CreateAssignment(TestCase): self.assertTrue(assignment.tags.exists()) self.assertTrue(assignment.attachments.exists()) + def test_number_poll_candidates(self): + response = self.client.post( + reverse("assignment-list"), + { + "title": "test_title_EFBhGQkQciwZtjSc7BVy", + "open_posts": 1, + "number_poll_candidates": True, + }, + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + assignment = Assignment.objects.get() + self.assertEqual(assignment.number_poll_candidates, True) + class CandidatureSelf(TestCase): """