X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=tests%2Ftest_motion.py;h=0bee29420e123a31029dcc6922b3d1c9103a71d7;hb=4af338e33108c609381f4c60b6cc12b50da7f107;hp=c1f996c3312966439f5bb4a5572cd5637372d350;hpb=a53a0a3e8ad96f0805c05a45a06e15352dd45f72;p=motion.git diff --git a/tests/test_motion.py b/tests/test_motion.py index c1f996c..0bee294 100644 --- a/tests/test_motion.py +++ b/tests/test_motion.py @@ -9,7 +9,8 @@ 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' + SERVER_NAME = '127.0.0.1:5000', + MAX_PROXY=2 ) app.config['TESTING'] = True @@ -26,9 +27,9 @@ class BasicTest(TestCase): self.db_clear() # functions to manipulate motions - def createVote(self, user, motion, vote): + def createVote(self, user, motion, vote, voter): return self.app.post( - '/motion/' + motion +'/vote', + '/motion/' + motion + '/vote/' + str(voter), environ_base={'USER_ROLES': user}, data=dict(vote=vote) ) @@ -48,6 +49,26 @@ class BasicTest(TestCase): 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)+'
'\ @@ -72,6 +93,8 @@ class GeneralTests(BasicTest): self.init_test() global user user = 'testuser/' + global userid + userid = 4 self.db_sampledata() def tearDown(self): @@ -120,6 +143,8 @@ class GeneralTests(BasicTest): + '\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) # start with second motion result = self.app.get('/', environ_base={'USER_ROLES': user}, query_string=dict(start=2)) @@ -133,12 +158,12 @@ class GeneralTests(BasicTest): def test_basic_results_data_details(self): motion='g1.20200402.002' result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) - testtext= '

A second motion

\n \n\nBack\n' + testtext= '

A second motion

\n \n\nBack' self.assertIn(str.encode(testtext), result.data) def test_vote(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes') + response = self.createVote(user, motion, 'yes', userid) self.assertEqual(response.status_code, 403) self.assertIn(str.encode('Forbidden'), response.data) @@ -163,13 +188,34 @@ class GeneralTests(BasicTest): self.assertEqual(result.status_code, 404) self.assertIn(str.encode('Error, Not found'), result.data) + def test_no_proxy(self): + result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) + self.assertEqual(result.status_code, 403) + self.assertIn(str.encode('Forbidden'), result.data) + + def test_no_proxy_add(self): + result = self.app.post('proxy/add', environ_base={'USER_ROLES': user}, follow_redirects=True) + self.assertEqual(result.status_code, 403) + self.assertIn(str.encode('Forbidden'), result.data) + def test_no_proxy_revoke(self): + result = self.app.post('proxy/revoke', environ_base={'USER_ROLES': user}, follow_redirects=True) + self.assertEqual(result.status_code, 403) + self.assertIn(str.encode('Forbidden'), result.data) + + def test_no_proxy_revokeAll(self): + result = self.app.post('proxy/revokeall', environ_base={'USER_ROLES': user}, follow_redirects=True) + self.assertEqual(result.status_code, 403) + self.assertIn(str.encode('Forbidden'), result.data) + class VoterTests(BasicTest): def setUp(self): self.init_test() global user user='testuser/vote:*' + global userid + userid = 4 self.db_sampledata() def tearDown(self): @@ -185,7 +231,7 @@ class VoterTests(BasicTest): def test_vote_yes(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes') + response = self.createVote(user, motion, 'yes', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 1, 0, 0) @@ -199,7 +245,7 @@ class VoterTests(BasicTest): def test_vote_no(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'no') + response = self.createVote(user, motion, 'no', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 0, 1, 0) @@ -214,7 +260,7 @@ class VoterTests(BasicTest): def test_vote_abstain(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'abstain') + response = self.createVote(user, motion, 'abstain', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 0, 0, 1) @@ -229,17 +275,17 @@ class VoterTests(BasicTest): def test_vote_change(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes') + response = self.createVote(user, motion, 'yes', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 1, 0, 0) self.assertIn(str.encode(resulttext), result.data) - response = self.createVote(user, motion, 'no') + response = self.createVote(user, motion, 'no', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 0, 1, 0) self.assertIn(str.encode(resulttext), result.data) - response = self.createVote(user, motion, 'abstain') + response = self.createVote(user, motion, 'abstain', userid) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) resulttext=self.buildResultText('A fourth motion', 0, 0, 1) @@ -247,41 +293,41 @@ class VoterTests(BasicTest): def test_vote_group(self): motion='g1.20200402.004' - response = self.createVote(user, motion, 'yes') + response = self.createVote(user, motion, 'yes', userid) self.assertEqual(response.status_code, 302) motion='g1.20200402.004' user1='testuser/vote:group1' - response = self.createVote(user1, motion, 'yes') + response = self.createVote(user1, motion, 'yes', userid) self.assertEqual(response.status_code, 302) motion='g1.20200402.004' user1='testuser/vote:group1 vote:group2' - response = self.createVote(user1, motion, 'yes') + response = self.createVote(user1, motion, 'yes', userid) self.assertEqual(response.status_code, 302) def test_vote_wrong_group(self): motion='g1.20200402.004' user1='testuser/vote:group2' - response = self.createVote(user1, motion, 'yes') + response = self.createVote(user1, motion, 'yes', userid) self.assertEqual(response.status_code, 403) self.assertIn(str.encode('Forbidden'), response.data) def test_vote_closed(self): motion='g1.20200402.002' - response = self.createVote(user, motion, 'abstain') - self.assertEqual(response.status_code, 500) - self.assertIn(str.encode('Error, motion deadline has passed'), response.data) + response = self.createVote(user, motion, 'abstain', userid) + self.assertEqual(response.status_code, 403) + self.assertIn(str.encode('Error, out of time'), response.data) def test_vote_canceled(self): motion='g1.20200402.003' - response = self.createVote(user, motion, 'abstain') - self.assertEqual(response.status_code, 500) - self.assertIn(str.encode('Error, motion deadline has passed'), response.data) + response = self.createVote(user, motion, 'abstain', userid) + self.assertEqual(response.status_code, 403) + self.assertIn(str.encode('Error, motion was canceled'), response.data) def test_vote_not_given(self): motion='g1.30190402.001' - response = self.createVote(user, motion, 'abstain') + response = self.createVote(user, motion, 'abstain', userid) self.assertEqual(response.status_code, 404) self.assertIn(str.encode('Error, Not found'), response.data) @@ -292,6 +338,12 @@ class VoterTests(BasicTest): self.assertEqual(response.status_code, 403) self.assertIn(str.encode('Forbidden'), response.data) + def test_finishMotion(self): + motion='g1.20200402.004' + response = self.finishMotion(user, motion) + self.assertEqual(response.status_code, 403) + self.assertIn(str.encode('Forbidden'), response.data) + def test_see_old_vote(self): motion='g1.20200402.002' result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) @@ -313,7 +365,7 @@ class CreateMotionTests(BasicTest): def setUp(self): self.init_test() global user - user='testuser/vote:* create:* cancel:*' + user='testuser/vote:* create:* cancel:* finish:*' self.db_clear() def tearDown(self): @@ -404,9 +456,25 @@ class CreateMotionTests(BasicTest): title='My Motion' content='My body' response = self.createMotion(user, title, content, '21', 'group1') - self.assertEqual(response.status_code, 500) + self.assertEqual(response.status_code, 400) self.assertIn(str.encode('Error, invalid length'), response.data) + def test_createMotionMissingData(self): + title='' + content='' + response = self.createMotion(user, title, content, '3', 'group1') + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, missing title'), response.data) + title='New Motion' + response = self.createMotion(user, title, content, '3', 'group1') + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, missing content'), response.data) + title='' + content='New Content' + response = self.createMotion(user, title, content, '3', 'group1') + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, missing title'), response.data) + def test_createMotionWrongGroup(self): title='My Motion' content='My body' @@ -428,18 +496,47 @@ class CreateMotionTests(BasicTest): self.assertEqual(response.status_code, 500) self.assertIn(str.encode('Error, form requires reason'), response.data) - reason='cancel test' + reason='cancel-test' response = self.cancelMotion(user, motion, reason) self.assertEqual(response.status_code, 302) result = self.app.get('/', environ_base={'USER_ROLES': user}) self.assertIn(b'Cancelation reason: ' + str.encode(reason), result.data) - motion='g1.30190402.001' + motion='g1.20190402.001' reason="none" response = self.cancelMotion(user, motion, reason) self.assertEqual(response.status_code, 404) self.assertIn(str.encode('Error, Not found'), response.data) + motion='g1.30200402.001' + reason="cancel-test" + response = self.cancelMotion(user, motion, reason) + self.assertEqual(response.status_code, 404) + self.assertIn(str.encode('Error, Not found'), response.data) + + motion='g1.20200402.004' + response = self.cancelMotion(user, motion, reason) + self.assertEqual(response.status_code, 403) + self.assertIn(str.encode('Error, motion was canceled'), response.data) + + def test_finishMotion(self): + self.db_sampledata() + + motion='g1.20200402.004' + response = self.finishMotion(user, motion) + self.assertEqual(response.status_code, 302) + result = self.app.get('/', environ_base={'USER_ROLES': user}) + self.assertIn(b'Motion D (Finished)', result.data) + + motion='g1.30190402.001' + response = self.finishMotion(user, motion) + self.assertEqual(response.status_code, 404) + self.assertIn(str.encode('Error, Not found'), response.data) + + motion='g1.20200402.001' + response = self.finishMotion(user, motion) + self.assertEqual(response.status_code, 403) + self.assertIn(str.encode('Error, out of time'), response.data) class AuditMotionTests(BasicTest): @@ -460,6 +557,313 @@ 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()