def test_voting_status(self): data = { "voting": 5001, "voter": 1, "question_id": 1, "vote": [{ "a": '30', "b": '55' }] } census = Census(voting_id=5001, voter_id=1) census.save() # not opened self.voting.start_date = timezone.now() + datetime.timedelta(days=1) self.voting.save() user = self.get_or_create_user(1) self.login(user=user.username) response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 401) # not closed self.voting.start_date = timezone.now() - datetime.timedelta(days=1) self.voting.save() self.voting.end_date = timezone.now() + datetime.timedelta(days=1) self.voting.save() response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) # closed self.voting.end_date = timezone.now() - datetime.timedelta(days=1) self.voting.save() response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 401)
def test_store_vote(self): VOTING_PK = 345 CTE_A = 96 CTE_B = 184 census = Census(voting_id=VOTING_PK, voter_id=1) census.save() self.gen_voting(VOTING_PK) data = { "voting": VOTING_PK, "voter": 1, "vote": { "a": CTE_A, "b": CTE_B } } user = self.get_or_create_user(1) self.login(user=user.username) response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(Vote.objects.count(), 1) self.assertEqual(Vote.objects.first().voting_id, VOTING_PK) self.assertEqual(Vote.objects.first().voter_id, 1) self.assertEqual(Vote.objects.first().a, CTE_A) self.assertEqual(Vote.objects.first().b, CTE_B)
def test_get_voting_per_user(self): for i in range(2): q = Question(desc='test question') q.save() for j in range(5): opt = QuestionOption(question=q, option='option {}'.format(j + 1)) opt.save() v = Voting(name='test voting', question=q, tipe='testType') v.save() a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={ 'me': True, 'name': 'test auth' }) a.save() v.auths.add(a) u, _ = User.objects.get_or_create(username='******') u.is_active = True u.save() for v in Voting.objects.all(): c = Census(voter_id=u.id, voting_id=v.id) c.save() response = self.client.get('/voting/user/?id={}'.format(u.id)) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 2)
def test_store_vote(self): VOTING_PK = 5001 self.voting.start_date = timezone.now() - datetime.timedelta(days=1) self.voting.save() census = Census(voting_id=VOTING_PK, voter_id=1) census.save() data = { "voting": VOTING_PK, "voter": 1, "question_id": 1, "vote": [{ "a": '96', "b": '184' }] } user = self.get_or_create_user(1) self.login(user=user.username) response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(Vote.objects.count(), 1) self.assertEqual(Vote.objects.first().voting_id, VOTING_PK) self.assertEqual(Vote.objects.first().voter_id, 1) self.assertEqual(Vote.objects.first().a, '96') self.assertEqual(Vote.objects.first().b, '184')
def gen_votes(self): cryptogen = SystemRandom() votings = [cryptogen.randint(1, 5000) for i in range(10)] users = [cryptogen.randint(3, 5002) for i in range(50)] for v in votings: a1 = str(cryptogen.randint(2, 500)) b1 = str(cryptogen.randint(2, 500)) a2 = str(cryptogen.randint(2, 500)) b2 = str(cryptogen.randint(2, 500)) votacion = self.gen_voting(v) random_user = cryptogen.choice(users) user = self.get_or_create_user(random_user) self.login(user=user.username) census = Census(voting_id=v, voter_id=random_user) census.save() question = votacion.question.all() data = { "voting": v, "voter": random_user, "question_id": question[0].id, "vote": [{ "a": a1, "b": b1 }, { "a": a2, "b": b2 }] } response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) self.logout() return votings, users, question[0].id
def gen_votes(self): votings = [random.randint(1, 5000) for i in range(10)] users = [random.randint(3, 5002) for i in range(50)] for v in votings: a = random.randint(2, 500) b = random.randint(2, 500) self.gen_voting(v) random_user = random.choice(users) user = self.get_or_create_user(random_user) self.login(user=user.username) census = Census(voting_id=v, voter_id=random_user) census.save() data = { "voting": v, "voter": random_user, "vote": { "a": a, "b": b } } response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) self.logout() return votings, users
def create_voters(self, v): for i in range(100): u, _ = User.objects.get_or_create(username='******'.format(i)) u.is_active = True u.save() c = Census(voter_id=u.id, voting_id=v.id) c.save()
def setUp(self): self.client = APIClient() mods.mock_query(self.client) voter1 = User(username='******', id="2") voter1.set_password('voter') voter1.save() admin = User(username='******', is_staff=True) admin.set_password('admin') admin.is_superuser = True admin.save() q = Question(desc='Preferences question', preferences=True) q.save() for i in range(3): optPref = QuestionOption(question=q, option='option {}'.format(i+1)) optPref.save() q1 = Question(desc='Simple question') q1.save() for i in range(3): optPref = QuestionOption(question=q1, option='option {}'.format(i+1)) optPref.save() q2 = Question(desc='yes/no question', si_no=True) q2.save() v = Voting(name='test voting', id="2") v.save() v2= Voting(name='test voting yes no', id="3") v2.save() a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={'me': True, 'name': 'test auth'}) a.save() v.auths.add(a) v.question.add(q) v2.auths.add(a) v2.question.add(q2) v.save() v2.save() census = Census(voting_id=2, voter_id=2) census.save() census2 = Census(voting_id=3, voter_id=2) census2.save() options = webdriver.ChromeOptions() options.add_argument('--no-sandbox') options.headless = True self.driver = webdriver.Chrome(options=options) super().setUp()
def create(self, request, *args, **kwargs): voting_id = request.data.get('voting_id') voters = request.data.get('voters') try: for voter in voters: census = Census(voting_id=voting_id, voter_id=voter) census.save() except IntegrityError: return Response('Error try to create census', status=ST_409) return Response('Census created', status=ST_201)
def test_wrong_question_id_parameter(self): data = {"voting": 5001, "voter": 2, "vote": [{"a": '96', "b": '184'}]} self.voting.start_date = timezone.now() - datetime.timedelta(days=1) self.voting.save() census = Census(voting_id=5001, voter_id=2) census.save() user = self.get_or_create_user(2) self.login(user=user.username) response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 400)
def createUsers(v): users = [] for i in range(4): u, _ = User.objects.get_or_create(username='******'.format(i + 1)) u.is_active = True u.set_password('usuario {}'.format(i + 1)) u.save() users.append(u) c = Census(voter_id=u.id, voting_id=v.id) c.save() return users
def setUp(self): # Create user self.client = APIClient() mods.mock_query(self.client) u = UserProfile(id=1, username='******', sex='M') u.set_password('123') u.save() token= mods.post('authentication', entry_point='/login/', json={'username':'******', 'password': '******'}) # Add session token session = self.client.session session['user_token'] = token session.save() #Create voting #Create question 1 q1 = Question(id=1,desc='Unique option question', option_types=1) q1.save() for i in range(3): opt = QuestionOption(question=q1, option='option {}'.format(i+1)) opt.save() #Create question 2 q2 = Question(id=2,desc='Multiple option question', option_types=2) q2.save() for i in range(4): opt = QuestionOption(question=q2, option='option {}'.format(i+1)) opt.save() #Create question 3 q3 = Question(id=3,desc='Rank order scale question', option_types=3) q3.save() for i in range(5): opt = QuestionOption(question=q3, option='option {}'.format(i+1)) opt.save() v = Voting(id=1, name='Single question voting',desc='Single question voting...', points=1, start_date=timezone.now()) v.save() v.question.add(q1), v.question.add(q2), v.question.add(q3) a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={'me': True, 'name': 'base'}) a.save() v.auths.add(a) Voting.create_pubkey(v) #Add user to census census = Census(voting_id=v.id, voter_id=u.id) census.save()
def test_store_vote(self): VOTING_PK = 345 CTE = [{'a': 96, 'b': 184}, {'a': 33, 'b': 45}] census = Census(voting_id=VOTING_PK, voter_id=1) census.save() self.gen_voting(VOTING_PK) data = {"voting": VOTING_PK, "voter": 1, "votes": CTE} user = self.get_or_create_user(1) self.login(user=user.username) response = self.client.post('/store/', data, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(Vote.objects.count(), 1) self.assertEqual(Vote.objects.first().voting_id, VOTING_PK) self.assertEqual(Vote.objects.first().voter_id, 1) self.assertEqual(Vote.objects.first().ciphers.first().a, CTE[0]['a']) self.assertEqual(Vote.objects.first().ciphers.first().b, CTE[0]['b']) self.assertEqual(Vote.objects.first().ciphers.last().a, CTE[1]['a']) self.assertEqual(Vote.objects.first().ciphers.last().b, CTE[1]['b'])
def test_get_votings_success(self): VOTING_PK = 1994 USER_PK = 46 # Generate user user = self.get_or_create_user(46) #Generate voting voting = self.gen_voting(VOTING_PK) #Add user to census census = Census(voting_id=VOTING_PK, voter_id=46) census.save() #Generate vote a1 = random.randint(2, 500) b1 = random.randint(2, 500) vote = Vote(voting_id=VOTING_PK, voter_id=46, a=a1, b=b1) vote.save() response = self.client.get('/store/voting/voter/{}/'.format(46)) # assert response self.assertEqual(response.status_code, 200)
def test(self): #Create and save question q = Question(desc='Question1') q.save() #Create and save question options for i in range(2): opt = QuestionOption(question=q, option='option {}'.format(i+1)) opt.save() #Create and save votation with question v = Voting(name='Votation1') v.save() v.questions.add(q) #Add auth to votation and save it a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={'me': True, 'name': 'test auth'}) a.save() v.auths.add(a) #Create and save multiple voters for votation for i in range(2): u, _ = User.objects.get_or_create(username='******'.format(i+1)) u.is_active = True u.save() c = Census(voter_id=u.id, voting_id=v.id) c.save() #... #Votation created #... #Start votation v.create_pubkey() v.start_date = timezone.now() v.save() #... #Votation started #... #Method copy from voting/test.py #Create and add votes voters = list(Census.objects.filter(voting_id=v.id)) voter = voters.pop() clear = {} for opt in v.questions.first().options.all(): clear[opt.number] = 0 for i in range(2): a, b = self.encrypt_msg(opt.number, v) data = { 'voting': v.id, 'voter': voter.voter_id, 'vote': { 'a': a, 'b': b }, } clear[opt.number] += 1 user = self.get_or_create_user(voter.voter_id) self.login(user=user.username) #voter = voters.pop() mods.post('store', json=data) #Login with admin self.login() #Tally Done v.tally_votes() #... #Votation ended #... #Method for test views's method response = self.client.get('/visualizer/{}/'.format(v.pk)) self.assertEqual(response.status_code, 200) #Check 1 self.assertEqual(response.context['voting_id'], v.pk) #Check 2 self.assertEqual('Votation1' in response.context['voting'].values() , True) #Check 3 varTemp = response.context['voting'] self.assertEqual('Question1' in varTemp['questions'][0].values() , True)
class VisualizerVotesTestCase(BaseTestCase): def setUp(self): q = Question(desc="Aquí tiene su pregunta: ") q.save() self.vo1 = Votacion(id=1, titulo="¿Te gusta EGC?", fecha_inicio=datetime.datetime(2020, 7, 6)) self.vo2 = Votacion(id=2, titulo="¿Te gusta PGPI?") self.vo3 = Votacion(id=3, titulo="¿Te gusta AII?", fecha_inicio=datetime.datetime(2020, 10, 6), fecha_fin=datetime.datetime(2021, 7, 6)) self.vp1 = VotacionPreferencia(id=1, titulo="¿Te gusta EGC?", fecha_inicio=datetime.datetime( 2020, 7, 6)) self.vp2 = VotacionPreferencia(id=2, titulo="¿Te gusta PGPI?") self.vp3 = VotacionPreferencia(id=3, titulo="¿Te gusta AII?", fecha_inicio=datetime.datetime( 2020, 10, 6), fecha_fin=datetime.datetime(2021, 7, 6)) self.vm1 = VotacionMultiple(id=1, titulo="¿Te gusta EGC?", fecha_inicio=datetime.datetime(2020, 7, 6)) self.vm2 = VotacionMultiple(id=2, titulo="¿Te gusta PGPI?") self.vm3 = VotacionMultiple(id=3, titulo="¿Te gusta AII?", fecha_inicio=datetime.datetime( 2020, 10, 6), fecha_fin=datetime.datetime(2021, 7, 6)) self.vb1 = VotacionBinaria(id=1, titulo="¿Te gusta EGC?", fecha_inicio=datetime.datetime(2020, 7, 6)) self.vb2 = VotacionBinaria(id=2, titulo="¿Te gusta PGPI?") self.vb3 = VotacionBinaria(id=3, titulo="¿Te gusta AII?", fecha_inicio=datetime.datetime(2020, 10, 6), fecha_fin=datetime.datetime(2021, 7, 6)) self.v1 = Voting(id=1, name="¿Te gusta EGC?", start_date=datetime.datetime(2020, 7, 6), question=q) self.v2 = Voting(id=2, name="¿Te gusta PGPI?", question=q) self.v3 = Voting(id=3, name="¿Te gusta AII?", start_date=datetime.datetime(2020, 10, 6), end_date=datetime.datetime(2021, 7, 6), question=q) self.vo1.save() self.vo2.save() self.vo3.save() self.vp1.save() self.vp2.save() self.vp3.save() self.vm1.save() self.vm2.save() self.vm3.save() self.vb1.save() self.vb2.save() self.vb3.save() self.v1.save() self.v2.save() self.v3.save() self.c = Census(id=1, voting_id=1, voter_id=1) self.c.save() super().setUp() def tearDown(self): super().tearDown() self.c = None self.user = None self.vo1 = None self.vo2 = None self.vo3 = None self.vp1 = None self.vp2 = None self.vp3 = None self.vm1 = None self.vm2 = None self.vm3 = None self.vb1 = None self.vb2 = None self.vb3 = None self.v1 = None self.v2 = None self.v3 = None def test_visualizer_index_page(self): self.login() response = self.client.get('/visualizer/', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/index.html') def test_visualizer_default(self): self.login() response = self.client.get('/visualizer/default', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/listdefault.html') response = self.client.get('/visualizer/{}'.format(self.v1.id), follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/visualizer.html') v1 = Voting.objects.get(name="¿Te gusta EGC?") self.assertEqual(v1.name, "¿Te gusta EGC?") def test_visualizer_normal(self): self.login() response = self.client.get('/visualizer/normal', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/list.html') response = self.client.get('/visualizer/normal/{}'.format(self.vo1.id), follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/resultnormal.html') vo1 = Votacion.objects.get(titulo="¿Te gusta EGC?") self.assertEqual(vo1.titulo, "¿Te gusta EGC?") def test_visualizer_preferencia(self): self.login() response = self.client.get('/visualizer/preferencia', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/list.html') response = self.client.get('/visualizer/preferencia/{}'.format( self.vp2.id), follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/resultpref.html') vp2 = Votacion.objects.get(titulo="¿Te gusta PGPI?") self.assertEqual(vp2.titulo, "¿Te gusta PGPI?") def test_visualizer_multiple(self): self.login() response = self.client.get('/visualizer/multiple', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/list.html') response = self.client.get('/visualizer/multiple/{}'.format( self.vm3.id), follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/resultmul.html') vm3 = Votacion.objects.get(titulo="¿Te gusta AII?") self.assertEqual(vm3.titulo, "¿Te gusta AII?") def test_visualizer_binaria(self): self.login() response = self.client.get('/visualizer/binaria', follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/list.html') response = self.client.get('/visualizer/binaria/{}'.format( self.vb2.id), follow=True) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('visualizer/resultbin.html') vb2 = VotacionBinaria.objects.get(titulo="¿Te gusta PGPI?") self.assertEqual(vb2.titulo, "¿Te gusta PGPI?")
def setUp(self): self.booth = BoothTests() self.booth.setUp() options = webdriver.ChromeOptions() options.headless = True self.driver = webdriver.Chrome(options=options) u = UserProfile(id=1, username='******', sex='M') u.set_password('123') u.save() token = mods.post('authentication', entry_point='/login/', json={ 'username': '******', 'password': '******' }) # Add session token session = self.client.session session['user_token'] = token session.save() q2 = Question(id=2, desc='Multiple option question', option_types=2) q2.save() for i in range(4): opt = QuestionOption(question=q2, option='option {}'.format(i + 1)) opt.save() q3 = Question(id=3, desc='Rank order scale question', option_types=3) q3.save() for i in range(5): opt = QuestionOption(question=q3, option='option {}'.format(i + 1)) opt.save() a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={ 'me': True, 'name': 'base' }) a.save() v2 = Voting(id=2, name='Rank question voting', desc='Rank question voting...', points=1, start_date=timezone.now()) v2.save() v2.question.add(q3) v3 = Voting(id=3, name='Multiple question voting', desc='Multiple question voting...', points=1, start_date=timezone.now()) v3.save() v3.question.add(q2) v2.auths.add(a) Voting.create_pubkey(v2) #Add user to census census = Census(voting_id=v2.id, voter_id=u.id) census.save() v3.auths.add(a) Voting.create_pubkey(v3) #Add user to census census = Census(voting_id=v3.id, voter_id=u.id) census.save() super().setUp()
def setUp(self): #Create user 1 self.client = APIClient() mods.mock_query(self.client) u1 = UserProfile(id=1, username='******', sex='M') u1.set_password('123') u1.save() token1 = mods.post('authentication', entry_point='/login/', json={'username':'******', 'password': '******'}) #Add session token 1 session = self.client.session session['user_token'] = token1 session['voter_id'] = u1.id session.save() #Create voting 1 #Create question 1 q1 = Question(id=1,desc='Unique option question', option_types=1) q1.save() for i in range(3): opt = QuestionOption(question=q1, option='option {}'.format(i+1)) opt.save() #Create question 2 q2 = Question(id=2,desc='Multiple option question', option_types=2) q2.save() for i in range(4): opt = QuestionOption(question=q2, option='option {}'.format(i+1)) opt.save() #Create question 3 q3 = Question(id=3,desc='Rank order scale question', option_types=3) q3.save() for i in range(5): opt = QuestionOption(question=q3, option='option {}'.format(i+1)) opt.save() v1 = Voting(id=1, name='Single question voting',desc='Single question voting...', points=1, start_date=timezone.now()) v1.save() v1.question.add(q1), v1.question.add(q2), v1.question.add(q3) a, _ = Auth.objects.get_or_create(url=settings.BASEURL, defaults={'me': True, 'name': 'base'}) a.save() v1.auths.add(a) Voting.create_pubkey(v1) #Create voting 2 #Create question 4 q4 = Question(id=4, desc='Unique option question 2', option_types=1) q4.save() for i in range(3): opt = QuestionOption(question=q4, option='option {}'.format(i+1)) opt.save() #Create question 5 q5 = Question(id=5, desc='Multiple option question 2', option_types=2) q5.save() for i in range(4): opt = QuestionOption(question=q5, option='option {}'.format(i+1)) opt.save() #Create question 6 q6 = Question(id=6, desc='Rank order scale question 2', option_types=3) q6.save() for i in range(5): opt = QuestionOption(question=q6, option='option {}'.format(i+1)) opt.save() v2 = Voting(id=2, name='Single question voting 2',desc='Single question voting...', points=1, start_date=M_DATE, end_date=E_DATE) v2.save() v2.question.add(q4), v2.question.add(q5), v2.question.add(q6) v2.auths.add(a) Voting.create_pubkey(v2) #Add user to census census1 = Census(voting_id=v1.id, voter_id=u1.id) census1.save() census2 = Census(voting_id=v2.id, voter_id=u1.id) census2.save() #Create suggestion 1 s1 = SuggestingForm(id=1, user_id=u1.id, title="Suggesting title", suggesting_date=S_DATE, content="Suggesting content...", send_date=NOW_DATE, is_approved=True) s1.save()