X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=tests%2Ftest_motion.py;h=f6992968ff128e05375539cc51ba1d4f19e9ff54;hb=11e82f491ae15d3b7d9f1f88db2ab79d1fe131bf;hp=0bee29420e123a31029dcc6922b3d1c9103a71d7;hpb=4af338e33108c609381f4c60b6cc12b50da7f107;p=motion.git diff --git a/tests/test_motion.py b/tests/test_motion.py index 0bee294..f699296 100644 --- a/tests/test_motion.py +++ b/tests/test_motion.py @@ -1,90 +1,7 @@ -import motion -import unittest +from datetime import datetime +from tests.test_basics import BasicTest import postgresql -from unittest import TestCase from motion import app -from datetime import datetime - -app.config.update( - DEBUGUSER = {}, - GROUP_PREFIX = {'127.0.0.1:5000': {'group1': 'g1', 'group2': 'g2'}}, - DURATION = {'127.0.0.1:5000':[3, 7, 14]}, - SERVER_NAME = '127.0.0.1:5000', - MAX_PROXY=2 -) - -app.config['TESTING'] = True -app.config['DEBUG'] = False - - -class BasicTest(TestCase): - - def init_test(self): - self.app = app.test_client() - self.assertEqual(app.debug, False) - - # reset database - self.db_clear() - - # functions to manipulate motions - def createVote(self, user, motion, vote, voter): - return self.app.post( - '/motion/' + motion + '/vote/' + str(voter), - environ_base={'USER_ROLES': user}, - data=dict(vote=vote) - ) - - - def createMotion(self, user, motiontitle, motioncontent, days, category): - return self.app.post( - '/motion', - environ_base={'USER_ROLES': user}, - data=dict(title=motiontitle, content=motioncontent, days=days, category=category) - ) - - def cancelMotion(self, user, motion, reason): - return self.app.post( - '/motion/' + motion +'/cancel', - environ_base={'USER_ROLES': user}, - data=dict(reason=reason) - ) - - def finishMotion(self, user, motion): - return self.app.post( - '/motion/' + motion +'/finish', - environ_base={'USER_ROLES': user} - ) - - def addProxy(self, user, voter, proxy): - return self.app.post( - '/proxy/add', - environ_base={'USER_ROLES': user}, - data=dict(voter=voter, proxy=proxy) - ) - - def revokeProxy(self, user, id): - return self.app.post( - '/proxy/revoke', - environ_base={'USER_ROLES': user}, - data=dict(id=id) - ) - - def buildResultText(self, motiontext, yes, no, abstain): - return '

'+motiontext+'

\n

\nYes '+str(yes)+'
'\ - + '\nNo '+str(no)+'
'\ - + '\nAbstain '+str(abstain)+'' - - # functions to clear database - def db_clear(self): - with postgresql.open(app.config.get("DATABASE"), user=app.config.get("USER"), password=app.config.get("PASSWORD")) as db: - with app.open_resource('sql/schema.sql', mode='r') as f: - db.execute(f.read()) - - def db_sampledata(self): - with postgresql.open(app.config.get("DATABASE"), user=app.config.get("USER"), password=app.config.get("PASSWORD")) as db: - with app.open_resource('sql/sample_data.sql', mode='r') as f: - db.execute(f.read()) - # no specific rights required class GeneralTests(BasicTest): @@ -107,41 +24,39 @@ class GeneralTests(BasicTest): def test_basic_results_data(self): result = self.app.get('/', environ_base={'USER_ROLES': user}, follow_redirects=True) testtext= '

\n
'\ - + '\n Motion C (Canceled)\n group1'\ + + '\n Motion C (Canceled)\n group1'\ + '\n
# g1.20200402.003'\ + '\n Result'\ - + '\n
'\ - + '\n
\n
Proposed: 2020-04-02 21:47:24 (UTC) by User A
'\ - + '\n
Canceled: 2020-04-03 21:48:24 (UTC) by User A
\n
'\ - + '\n
\n

A third motion

'\ - + '\n

\nYes 1
'\ - + '\nNo 0
'\ - + '\nAbstain 0
\n

'\ - + '\n

Cancelation reason: Entered with wrong text

\n
\n
' + + '\n \n
'\ + + '\n
Proposed: 2020-04-02 21:47:24 (UTC) by User A
'\ + + '\n
Canceled: 2020-04-03 21:48:24 (UTC) by User A
\n
\n '\ + + '\n
\n

A third motion

'\ + + '\n

\nYes 1
'\ + + '\nNo 0
'\ + + '\nAbstain 0
\n

'\ + + '\n

Cancelation reason: Entered with wrong text

\n
\n\n' self.assertIn(str.encode(testtext), result.data) testtext= '
\n
'\ - + '\n Motion B (Finished)\n group1'\ + + '\n Motion B (Finished)\n group1'\ + '\n
# g1.20200402.002'\ + '\n Result'\ - + '\n
'\ - + '\n
\n
Proposed: 2020-04-02 21:41:26 (UTC) by User A
'\ - + '\n
Votes until: 2020-04-04 21:41:26 (UTC)
\n
'\ - + '\n
\n

A second motion

'\ - + '\n

\nYes 1
'\ - + '\nNo 2
'\ - + '\nAbstain 0
\n

\n
\n
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= '
\n
'\ - + '\n Motion A (Finished)\n group1'\ + + '\n
\n
\n
Proposed: 2020-04-02 21:41:26 (UTC) by User A
'\ + + '\n
Votes until: 2020-04-04 21:41:26 (UTC)
\n
\n
'\ + + '\n
\n

A second motion

\n

'\ + + '\nYes 1
'\ + + '\nNo 2
'\ + + '\nAbstain 0
\n

\n
\n\n' + self.assertIn(str.encode(testtext), result.data) + testtext= '
\n
'\ + + '\n Motion A (Finished)\n group1'\ + '\n
# g1.20200402.001'\ + '\n Result'\ - + '\n
'\ - + '\n
\n
Proposed: 2020-04-02 21:40:33 (UTC) by User A
'\ - + '\n
Votes until: 2020-04-02 21:40:33 (UTC)
\n
'\ - + '\n
\n

My special motion

'\ - + '\n

\nYes 2
'\ - + '\nNo 1
'\ - + '\nAbstain 0
\n

\n
\n
\n' + + '\n \n
\n
Proposed: 2020-04-02 21:40:33 (UTC) by User A
'\ + + '\n
Votes until: 2020-04-02 21:40:33 (UTC)
\n
\n '\ + + '\n
\n

My special motion

\n

'\ + + '\nYes 2
'\ + + '\nNo 1
'\ + + '\nAbstain 0
\n

\n
\n\n' self.assertIn(str.encode(testtext), result.data) testtext= 'Proxy management' self.assertNotIn(str.encode(testtext), result.data) @@ -236,11 +151,11 @@ class VoterTests(BasicTest): result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 1, 0, 0) result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= 'class=\"btn btn-success\" name=\"vote\" value="yes" id="vote-yes">yes' + testtext= 'class=\"btn btn-success\" name=\"vote\" value="yes" id="vote-yes">Yes' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"no\" id=\"vote-no\">no' + testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"no\" id=\"vote-no\">No' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">abstain' + testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">Abstain' self.assertIn(str.encode(testtext), result.data) def test_vote_no(self): @@ -251,11 +166,11 @@ class VoterTests(BasicTest): resulttext=self.buildResultText('A fourth motion', 0, 1, 0) self.assertIn(str.encode(resulttext), result.data) result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= 'class="btn btn-primary" name="vote\" value=\"yes\" id=\"vote-yes\">yes' + testtext= 'class="btn btn-primary" name="vote\" value=\"yes\" id=\"vote-yes\">Yes' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-success\" name=\"vote\" value=\"no\" id=\"vote-no\">no' + testtext= 'class=\"btn btn-success\" name=\"vote\" value=\"no\" id=\"vote-no\">No' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">abstain' + testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">Abstain' self.assertIn(str.encode(testtext), result.data) def test_vote_abstain(self): @@ -266,11 +181,11 @@ class VoterTests(BasicTest): resulttext=self.buildResultText('A fourth motion', 0, 0, 1) self.assertIn(str.encode(resulttext), result.data) result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"yes\" id=\"vote-yes\">yes' + testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"yes\" id=\"vote-yes\">Yes' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"no\" id=\"vote-no\">no' + testtext= 'class=\"btn btn-primary\" name=\"vote\" value=\"no\" id=\"vote-no\">No' self.assertIn(str.encode(testtext), result.data) - testtext= 'class=\"btn btn-success\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">abstain' + testtext= 'class=\"btn btn-success\" name=\"vote\" value=\"abstain\" id=\"vote-abstain\">Abstain' self.assertIn(str.encode(testtext), result.data) def test_vote_change(self): @@ -347,8 +262,8 @@ class VoterTests(BasicTest): def test_see_old_vote(self): motion='g1.20200402.002' result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '
Proposed: 2020-04-02 21:41:26 (UTC) by User A
\n
Votes until: 2020-04-04 21:41:26 (UTC)
'\ - + '\n \n
\n

A second motion

\n
\n'\ + testtext= '
Proposed: 2020-04-02 21:41:26 (UTC) by User A
\n
Votes until: 2020-04-04 21:41:26 (UTC)
'\ + + '\n \n \n
\n

A second motion

\n
\n'\ + '\nBack' self.assertIn(str.encode(testtext), result.data) @@ -487,6 +402,19 @@ class CreateMotionTests(BasicTest): self.assertEqual(response.status_code, 403) self.assertIn(str.encode('Forbidden'), response.data) + def test_SeeCancelMotion(self): + self.db_sampledata() + + motion='g1.20200402.004' + result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) + testtext= '' + self.assertIn(str.encode(testtext), result.data) + + motion='g1.20200402.004' + result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': 'testuser/vote:*'}, follow_redirects=True) + testtext= '' + self.assertNotIn(str.encode(testtext), result.data) + def test_cancelMotion(self): self.db_sampledata() @@ -519,6 +447,19 @@ class CreateMotionTests(BasicTest): self.assertEqual(response.status_code, 403) self.assertIn(str.encode('Error, motion was canceled'), response.data) + def test_SeeFinishMotion(self): + self.db_sampledata() + + motion='g1.20200402.004' + result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) + testtext= '' + self.assertIn(str.encode(testtext), result.data) + + motion='g1.20200402.004' + result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': 'testuser/vote:*'}, follow_redirects=True) + testtext= '' + self.assertNotIn(str.encode(testtext), result.data) + def test_finishMotion(self): self.db_sampledata() @@ -557,313 +498,6 @@ class AuditMotionTests(BasicTest): + '\n
User C: no
\n \n\nBack' self.assertIn(str.encode(testtext), result.data) -class ProxyManagementTests(BasicTest): - - def setUp(self): - self.init_test() - global user - user='testuser/proxyadmin:*' - self.db_sampledata() - - def tearDown(self): - pass - - def test_see_proxy(self): - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= 'div class="container">\n
' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to:' - self.assertNotIn(str.encode(testtext), result.data) - testtext= 'holds proxy of:' - self.assertNotIn(str.encode(testtext), result.data) - testtext= '\n' - self.assertIn(str.encode(testtext), result.data) - testtext= '\n' - self.assertIn(str.encode(testtext), result.data) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '
VoterProxy
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'Proxy management' - self.assertIn(str.encode(testtext), result.data) - - def test_add_proxy(self): - voter='' - proxy='' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, voter equals proxy.'), response.data) - - voter='User A' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, proxy not found.'), response.data) - - voter='User Z' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, voter not found.'), response.data) - - voter='' - proxy='User B' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, voter not found.'), response.data) - - voter='User B' - proxy='User B' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, voter equals proxy.'), response.data) - - voter='User A' - proxy='User B' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '' - self.assertIn(str.encode(testtext), result.data) - testtext= '\n '\ - + '\n '\ - + '\n '\ - + '\n \n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
User AUser B
\n' - self.assertIn(str.encode(testtext), result.data) - - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, proxy allready given.'), response.data) - - voter='User A' - proxy='User C' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, proxy allready given.'), response.data) - - voter='User C' - proxy='User B' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n '\ - + '\n \n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
User AUser B
User CUser B
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to:' - self.assertNotIn(str.encode(testtext), result.data) - testtext= 'holds proxy of:' - self.assertNotIn(str.encode(testtext), result.data) - - voter='testuser' - proxy='User B' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, Max proxy for \'User B\' reached.'), response.data) - - voter='testuser' - proxy='User A' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
testuserUser A
User AUser B
User CUser B
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to: User A\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'holds proxy of:' - self.assertNotIn(str.encode(testtext), result.data) - - voter='User B' - proxy='testuser' - response = self.addProxy(user, voter, proxy) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
testuserUser A
User AUser B
User Btestuser
User CUser B
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to: User A\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'holds proxy of: User B\n' - self.assertIn(str.encode(testtext), result.data) - - response = self.revokeProxy(user, userid) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
testuserUser A
User AUser B
User CUser B
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to: User A\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'holds proxy of:' - self.assertNotIn(str.encode(testtext), result.data) - - response = self.revokeProxy(user, 3) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '\n \n \n '\ - + '\n \n '\ - + '\n \n \n '\ - + '\n '\ - + '\n
VoterProxy
User AUser B
User CUser B
\n' - self.assertIn(str.encode(testtext), result.data) - testtext= 'proxy granted to:' - self.assertNotIn(str.encode(testtext), result.data) - testtext= 'holds proxy of:' - self.assertNotIn(str.encode(testtext), result.data) - - result = self.app.post('proxy/revokeall', environ_base={'USER_ROLES': user}, follow_redirects=True) - self.assertEqual(response.status_code, 302) - result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '\n '\ - + '\n '\ - + '\n \n \n \n '\ - + '
VoterProxy
\n' - self.assertIn(str.encode(testtext), result.data) - -class ProxyVoteTests(BasicTest): - - def setUp(self): - self.init_test() - global user - user='testuser/vote:* proxyadmin:*' - self.db_sampledata() - - def tearDown(self): - pass - - def test_proxy_vote(self): - voter='testuser' - proxy='User B' - proxyid=2 - proxyuser='User B/vote:*' - - response = self.addProxy(user, proxy, voter) - self.assertEqual(response.status_code, 302) - - motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes', proxyid) - self.assertEqual(response.status_code, 302) - - # testuser view - result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - # own vote without change - testtext= '\n'\ - + '\n'\ - + '\n'\ - + '\n
' - self.assertIn(str.encode(testtext), result.data) - # proxy vote with change - testtext= '
\n'\ - + '\n'\ - + '\n'\ - + '\n
\n' - self.assertIn(str.encode(testtext), result.data) - - # User B view - result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': proxyuser}, follow_redirects=True) - # own vote without change - testtext= '

My vote

\nGiven by testuser\n'\ - + '
\n'\ - + '\n'\ - + '\n'\ - + '\n
' - self.assertIn(str.encode(testtext), result.data) - - # change vote - response = self.createVote(user, motion, 'no', proxyid) - self.assertEqual(response.status_code, 302) - - result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '
\n'\ - + '\n'\ - + '\n'\ - + '\n
\n' - self.assertIn(str.encode(testtext), result.data) - - def test_proxy_vote_no_proxy(self): - voter='testuser' - proxy='User B' - # wrong proxy id - proxyid=3 - - response = self.addProxy(user, proxy, voter) - self.assertEqual(response.status_code, 302) - - motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes', proxyid) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, proxy not found'), response.data) - - # non existing id - proxyid=10000 - - motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes', proxyid) - self.assertEqual(response.status_code, 400) - self.assertIn(str.encode('Error, proxy not found'), response.data) - - def test_proxy_vote_no_voter(self): - voter='User A' - proxy='User B' - proxyid=2 - - response = self.addProxy(user, proxy, voter) - self.assertEqual(response.status_code, 302) - - user1='testuser1/' - motion='g1.20200402.004' - response = self.createVote(user1, motion, 'yes', proxyid) - self.assertEqual(response.status_code, 403) - self.assertIn(str.encode('Forbidden'), response.data) - - if __name__ == "__main__": unittest.main()