1+ from typing import Any
2+
13from openslides_backend .models .models import Poll
24from openslides_backend .permissions .permissions import Permissions
5+ from openslides_backend .services .database .interface import PartialModel
36
47from .base_poll_test import BasePollTestCase
58
@@ -8,113 +11,110 @@ class PollAnonymize(BasePollTestCase):
811 def setUp (self ) -> None :
912 super ().setUp ()
1013 self .create_meeting ()
11- self .set_models (
12- {
13- "poll/1" : {
14- "option_ids" : [1 ],
15- "global_option_id" : 2 ,
16- "meeting_id" : 1 ,
17- "state" : Poll .STATE_FINISHED ,
18- "type" : Poll .TYPE_NAMED ,
19- "content_object_id" : "topic/1" ,
20- },
21- "topic/1" : {"meeting_id" : 1 },
22- "option/1" : {"vote_ids" : [1 ], "meeting_id" : 1 },
23- "option/2" : {"vote_ids" : [2 ], "meeting_id" : 1 },
24- "vote/1" : {
25- "user_id" : 1 ,
26- "meeting_id" : 1 ,
27- "delegated_user_id" : 1 ,
28- },
29- "vote/2" : {
30- "user_id" : 1 ,
31- "meeting_id" : 1 ,
32- "delegated_user_id" : 1 ,
33- },
34- "user/1" : {
35- "meeting_user_ids" : [11 ],
36- "delegated_vote_ids" : [1 , 2 ],
37- "vote_ids" : [1 , 2 ],
38- },
39- "meeting_user/11" : {
40- "meeting_id" : 1 ,
41- "user_id" : 1 ,
42- },
43- }
44- )
14+ self .create_topic (1 , 1 )
15+ self .set_user_groups (1 , [1 ])
16+ self .test_data : dict [str , dict [str , Any ]] = {
17+ "poll/1" : {
18+ "title" : "Poll 1" ,
19+ "global_option_id" : 2 ,
20+ "meeting_id" : 1 ,
21+ "state" : Poll .STATE_FINISHED ,
22+ "type" : Poll .TYPE_NAMED ,
23+ "content_object_id" : "topic/1" ,
24+ "pollmethod" : "Y" ,
25+ "onehundred_percent_base" : Poll .ONEHUNDRED_PERCENT_BASE_Y ,
26+ },
27+ "option/1" : {"meeting_id" : 1 , "poll_id" : 1 },
28+ "option/2" : {"meeting_id" : 1 , "poll_id" : 1 },
29+ "vote/1" : {
30+ "user_id" : 1 ,
31+ "meeting_id" : 1 ,
32+ "delegated_user_id" : 1 ,
33+ "user_token" : "abc" ,
34+ "option_id" : 1 ,
35+ },
36+ "vote/2" : {
37+ "user_id" : 1 ,
38+ "meeting_id" : 1 ,
39+ "delegated_user_id" : 1 ,
40+ "user_token" : "edf" ,
41+ "option_id" : 2 ,
42+ },
43+ }
44+
45+ def set_test_data (self , poll_data : PartialModel = {}) -> None :
46+ if poll_data :
47+ self .test_data ["poll/1" ].update (poll_data )
48+ self .set_models (self .test_data )
4549
4650 def assert_anonymize (self ) -> None :
47- poll = self .get_model ("poll/1" )
48- assert poll .get ("is_pseudoanonymized" ) is True
51+ self .assert_model_exists ("poll/1" , {"is_pseudoanonymized" : True })
4952 for fqid in ("vote/1" , "vote/2" ):
50- vote = self .get_model (fqid )
51- assert vote . get ( "user_id" ) is None
52- assert vote . get ( "delegated_user_id" ) is None
53- self . assert_model_exists ( "user/1" , { "vote_ids" : [], "delegated_vote_ids" : []} )
53+ self .assert_model_exists (fqid , { "user_id" : None , "delegated_user_id" : None } )
54+ self . assert_model_exists (
55+ "user/1" , { "vote_ids" : None , "delegated_vote_ids" : None }
56+ )
5457
5558 def test_anonymize (self ) -> None :
59+ self .set_test_data ()
5660 response = self .request ("poll.anonymize" , {"id" : 1 })
5761 self .assert_status_code (response , 200 )
5862 self .assert_anonymize ()
5963 self .assert_history_information ("topic/1" , ["Voting anonymized" ])
6064
6165 def test_anonymize_assignment_poll (self ) -> None :
62- self .set_models (
63- {
64- "assignment/1" : {
65- "meeting_id" : 1 ,
66- },
67- "poll/1" : {
68- "content_object_id" : "assignment/1" ,
69- },
70- }
71- )
66+ self .create_assignment (1 , 1 )
67+ self .set_test_data ({"content_object_id" : "assignment/1" })
7268 response = self .request ("poll.anonymize" , {"id" : 1 })
7369 self .assert_status_code (response , 200 )
7470 self .assert_history_information ("assignment/1" , ["Ballot anonymized" ])
7571
7672 def test_anonymize_publish_state (self ) -> None :
77- self .update_model ( "poll/1" , {"state" : Poll .STATE_PUBLISHED })
73+ self .set_test_data ( {"state" : Poll .STATE_PUBLISHED })
7874 response = self .request ("poll.anonymize" , {"id" : 1 })
7975 self .assert_status_code (response , 200 )
8076 self .assert_anonymize ()
8177
8278 def test_anonymize_wrong_state (self ) -> None :
83- self .update_model ( "poll/1" , {"state" : Poll .STATE_CREATED })
79+ self .set_test_data ( {"state" : Poll .STATE_CREATED })
8480 response = self .request ("poll.anonymize" , {"id" : 1 })
8581 self .assert_status_code (response , 400 )
8682 for vote_fqid in ("vote/1" , "vote/2" ):
87- vote = self .get_model (vote_fqid )
88- assert vote .get ("user_id" ) == 1
89- assert vote .get ("delegated_user_id" ) == 1
83+ self .assert_model_exists (vote_fqid , {"user_id" : 1 , "delegated_user_id" : 1 })
84+ self .assertEqual (
85+ "Anonymizing can only be done after finishing a poll." ,
86+ response .json ["message" ],
87+ )
9088
9189 def test_anonymize_wrong_type (self ) -> None :
92- self .update_model ( "poll/1" , {"type" : Poll .TYPE_ANALOG })
90+ self .set_test_data ( {"type" : Poll .TYPE_ANALOG })
9391 response = self .request ("poll.anonymize" , {"id" : 1 })
9492 self .assert_status_code (response , 400 )
9593 for vote_fqid in ("vote/1" , "vote/2" ):
96- vote = self .get_model (vote_fqid )
97- assert vote .get ("user_id" ) == 1
98- assert vote .get ("delegated_user_id" ) == 1
94+ self .assert_model_exists (vote_fqid , {"user_id" : 1 , "delegated_user_id" : 1 })
95+ self .assertEqual (
96+ "You can only anonymize named polls." ,
97+ response .json ["message" ],
98+ )
9999
100100 def test_anonymize_no_permissions (self ) -> None :
101101 self .base_permission_test (
102- {} ,
102+ self . test_data ,
103103 "poll.anonymize" ,
104104 {"id" : 1 },
105105 )
106106
107107 def test_anonymize_permissions (self ) -> None :
108108 self .base_permission_test (
109- {} ,
109+ self . test_data ,
110110 "poll.anonymize" ,
111111 {"id" : 1 },
112112 Permissions .Poll .CAN_MANAGE ,
113113 )
114114
115115 def test_anonymize_permissions_locked_meeting (self ) -> None :
116116 self .base_locked_out_superadmin_permission_test (
117- {} ,
117+ self . test_data ,
118118 "poll.anonymize" ,
119119 {"id" : 1 },
120120 )
0 commit comments