X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=tests%2Ftest_motion.py;h=7ef5ceac11c309943e8fdb0e910d999c8e051bef;hb=068793bc0abe796473cb252ed7481b56b91f47bc;hp=fe853852d292ff3e1f7c9c0a60b297fd626f58aa;hpb=8cdf0f76acf9f0e22417cbe3ef80b784e2e975e6;p=motion.git diff --git a/tests/test_motion.py b/tests/test_motion.py index fe85385..7ef5cea 100644 --- a/tests/test_motion.py +++ b/tests/test_motion.py @@ -1,111 +1,64 @@ -import motion -import unittest -import postgresql -from unittest import TestCase -from motion import app from datetime import datetime - -class BasicTest(TestCase): - - # functions to manipulate motions - def createVote(self, user, motion, vote): - return self.app.post( - '/motion/' + motion +'/vote', - 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 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): - db = postgresql.open(app.config.get("DATABASE"), user=app.config.get("USER"), password=app.config.get("PASSWORD")) - with app.open_resource('sql/schema.sql', mode='r') as f: - db.execute(f.read()) - - def db_sampledata(self): - db = postgresql.open(app.config.get("DATABASE"), user=app.config.get("USER"), password=app.config.get("PASSWORD")) - with app.open_resource('sql/sample_data.sql', mode='r') as f: - db.execute(f.read()) - +from tests.test_basics import BasicTest +from motion import app # no specific rights required class GeneralTests(BasicTest): - + def setUp(self): - app.config['TESTING'] = True - app.config['DEBUG'] = False - app.config.update(SERVER_NAME="127.0.0.1:5000") + self.init_test() global user user = 'testuser/' - # reset database - self.db_clear() + global userid + userid = 4 self.db_sampledata() - self.app = app.test_client() - self.assertEqual(app.debug, False) - def tearDown(self): pass def test_main_page(self): response = self.app.get('/', environ_base={'USER_ROLES': user}, follow_redirects=True) self.assertEqual(response.status_code, 200) - + def test_basic_results_data(self): result = self.app.get('/', environ_base={'USER_ROLES': user}, follow_redirects=True) - - #self.assertIn(str.encode('User: testuser'), result.data) - testtext= '

\n
'\ - + '\n Motion C (Canceled)\n group1'\ - + '\n
# g1.20200402.003
'\ - + '\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 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
\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
# g1.20200402.002
'\ - + '\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
# g1.20200402.001
'\ - + '\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 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
\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
\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) # start with second motion result = self.app.get('/', environ_base={'USER_ROLES': user}, query_string=dict(start=2)) @@ -115,16 +68,16 @@ class GeneralTests(BasicTest): self.assertIn(str.encode(testtext), result.data) testtext= 'id=\"motion-1\">' self.assertIn(str.encode(testtext), result.data) - + 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) @@ -143,130 +96,152 @@ class GeneralTests(BasicTest): testtext= 'id=\"motion-3\">' self.assertIn(str.encode(testtext), result.data) + def test_basic_results_data_details_not_given(self): + motion='g1.30190402.001' + result = self.app.get('/motion/' + motion, environ_base={'USER_ROLES': user}, follow_redirects=True) + 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): - app.config['TESTING'] = True - app.config['DEBUG'] = False - app.config.update(SERVER_NAME="127.0.0.1:5000") + self.init_test() global user user='testuser/vote:*' - # reset database - self.db_clear() + global userid + userid = 4 self.db_sampledata() - self.app = app.test_client() - self.assertEqual(app.debug, False) - def tearDown(self): pass def test_main_page(self): response = self.app.get('/', environ_base={'USER_ROLES': user}, follow_redirects=True) self.assertEqual(response.status_code, 200) - + def test_home_data(self): result = self.app.get('/', environ_base={'USER_ROLES': user}) self.assertNotIn("\n '\ + + '\n \n '\ + + '\n '\ + + '\n '\ + + '\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 Z' + response = self.addProxy(user, voter, proxy) + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, proxy not found.'), 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.assertNotIn(str.encode(testtext), result.data) + + proxytest="proxytest" + with self.open_DB() as db: + db.prepare("INSERT INTO voter(\"email\", \"host\") VALUES($1, $2)")(proxytest, '127.0.0.1:5001') + result = self.app.get('proxy', environ_base={'USER_ROLES': user}, follow_redirects=True) + + response = self.addProxy(user, proxytest, 'testuser') + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, voter not found.'), response.data) + + response = self.addProxy(user, 'testuser', proxytest) + self.assertEqual(response.status_code, 400) + self.assertIn(str.encode('Error, proxy not found.'), response.data) + + def test_see_proxy_host_only(self): + proxytest="proxytest" + with self.open_DB() as db: + db.prepare("INSERT INTO voter(\"email\", \"host\") VALUES($1, $2)")(proxytest, '127.0.0.1:5001') + 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) + self.assertNotIn(str.encode(proxytest), 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()