pep8ify the tests

This commit is contained in:
Alexis Métaireau 2017-06-28 22:00:35 +02:00
parent ff018bd0c8
commit e70bd029b4

View file

@ -58,7 +58,7 @@ class TestCase(unittest.TestCase):
"""Create a fake project""" """Create a fake project"""
# create the project # create the project
self.app.post("/create", data={ self.app.post("/create", data={
'name': name, 'name': name,
'id': name, 'id': name,
'password': name, 'password': name,
'contact_email': '%s@notmyidea.org' % name 'contact_email': '%s@notmyidea.org' % name
@ -66,7 +66,7 @@ class TestCase(unittest.TestCase):
def create_project(self, name): def create_project(self, name):
models.db.session.add(models.Project(id=name, name=six.text_type(name), models.db.session.add(models.Project(id=name, name=six.text_type(name),
password=name, contact_email="%s@notmyidea.org" % name)) password=name, contact_email="%s@notmyidea.org" % name))
models.db.session.commit() models.db.session.commit()
@ -127,12 +127,12 @@ class BudgetTestCase(TestCase):
# sending a message to multiple persons # sending a message to multiple persons
with run.mail.record_messages() as outbox: with run.mail.record_messages() as outbox:
self.app.post("/raclette/invite", self.app.post("/raclette/invite",
data={"emails": 'alexis@notmyidea.org, toto@notmyidea.org'}) data={"emails": 'alexis@notmyidea.org, toto@notmyidea.org'})
# only one message is sent to multiple persons # only one message is sent to multiple persons
self.assertEqual(len(outbox), 1) self.assertEqual(len(outbox), 1)
self.assertEqual(outbox[0].recipients, self.assertEqual(outbox[0].recipients,
["alexis@notmyidea.org", "toto@notmyidea.org"]) ["alexis@notmyidea.org", "toto@notmyidea.org"])
# mail address checking # mail address checking
with run.mail.record_messages() as outbox: with run.mail.record_messages() as outbox:
@ -144,7 +144,7 @@ class BudgetTestCase(TestCase):
# mixing good and wrong adresses shouldn't send any messages # mixing good and wrong adresses shouldn't send any messages
with run.mail.record_messages() as outbox: with run.mail.record_messages() as outbox:
self.app.post("/raclette/invite", self.app.post("/raclette/invite",
data={"emails": 'alexis@notmyidea.org, alexis'}) # not valid data={"emails": 'alexis@notmyidea.org, alexis'}) # not valid
# only one message is sent to multiple persons # only one message is sent to multiple persons
self.assertEqual(len(outbox), 0) self.assertEqual(len(outbox), 0)
@ -239,7 +239,7 @@ class BudgetTestCase(TestCase):
# remove fred # remove fred
self.app.post("/raclette/members/%s/delete" % self.app.post("/raclette/members/%s/delete" %
models.Project.query.get("raclette").members[-1].id) models.Project.query.get("raclette").members[-1].id)
# as fred is not bound to any bill, he is removed # as fred is not bound to any bill, he is removed
self.assertEqual(len(models.Project.query.get("raclette").members), 1) self.assertEqual(len(models.Project.query.get("raclette").members), 1)
@ -263,7 +263,7 @@ class BudgetTestCase(TestCase):
# he is still in the database, but is deactivated # he is still in the database, but is deactivated
self.assertEqual(len(models.Project.query.get("raclette").members), 2) self.assertEqual(len(models.Project.query.get("raclette").members), 2)
self.assertEqual( self.assertEqual(
len(models.Project.query.get("raclette").active_members), 1) len(models.Project.query.get("raclette").active_members), 1)
# as fred is now deactivated, check that he is not listed when adding # as fred is now deactivated, check that he is not listed when adding
# a bill or displaying the balance # a bill or displaying the balance
@ -276,7 +276,7 @@ class BudgetTestCase(TestCase):
# adding him again should reactivate him # adding him again should reactivate him
self.app.post("/raclette/members/add", data={'name': 'fred'}) self.app.post("/raclette/members/add", data={'name': 'fred'})
self.assertEqual( self.assertEqual(
len(models.Project.query.get("raclette").active_members), 2) len(models.Project.query.get("raclette").active_members), 2)
# adding an user with the same name as another user from a different # adding an user with the same name as another user from a different
# project should not cause any troubles # project should not cause any troubles
@ -284,7 +284,7 @@ class BudgetTestCase(TestCase):
self.login("randomid") self.login("randomid")
self.app.post("/randomid/members/add", data={'name': 'fred'}) self.app.post("/randomid/members/add", data={'name': 'fred'})
self.assertEqual( self.assertEqual(
len(models.Project.query.get("randomid").active_members), 1) len(models.Project.query.get("randomid").active_members), 1)
def test_person_model(self): def test_person_model(self):
self.post_project("raclette") self.post_project("raclette")
@ -321,11 +321,11 @@ class BudgetTestCase(TestCase):
response = self.app.get("/raclette/members/1/delete") response = self.app.get("/raclette/members/1/delete")
self.assertEqual(response.status_code, 405) self.assertEqual(response.status_code, 405)
#delete user using POST method # delete user using POST method
self.app.post("/raclette/members/1/delete") self.app.post("/raclette/members/1/delete")
self.assertEqual( self.assertEqual(
len(models.Project.query.get("raclette").active_members), 0) len(models.Project.query.get("raclette").active_members), 0)
#try to delete an user already deleted # try to delete an user already deleted
self.app.post("/raclette/members/1/delete") self.app.post("/raclette/members/1/delete")
def test_demo(self): def test_demo(self):
@ -358,7 +358,7 @@ class BudgetTestCase(TestCase):
# try to connect with wrong credentials should not work # try to connect with wrong credentials should not work
with run.app.test_client() as c: with run.app.test_client() as c:
resp = c.post("/authenticate", resp = c.post("/authenticate",
data={'id': 'raclette', 'password': 'nope'}) data={'id': 'raclette', 'password': 'nope'})
self.assertIn("Authentication", resp.data.decode('utf-8')) self.assertIn("Authentication", resp.data.decode('utf-8'))
self.assertNotIn('raclette', session) self.assertNotIn('raclette', session)
@ -366,7 +366,7 @@ class BudgetTestCase(TestCase):
# try to connect with the right credentials should work # try to connect with the right credentials should work
with run.app.test_client() as c: with run.app.test_client() as c:
resp = c.post("/authenticate", resp = c.post("/authenticate",
data={'id': 'raclette', 'password': 'raclette'}) data={'id': 'raclette', 'password': 'raclette'})
self.assertNotIn("Authentication", resp.data.decode('utf-8')) self.assertNotIn("Authentication", resp.data.decode('utf-8'))
self.assertIn('raclette', session) self.assertIn('raclette', session)
@ -461,7 +461,7 @@ class BudgetTestCase(TestCase):
balance = models.Project.query.get("raclette").balance balance = models.Project.query.get("raclette").balance
self.assertEqual(set(balance.values()), set([19.0, -19.0])) self.assertEqual(set(balance.values()), set([19.0, -19.0]))
#Bill with negative amount # Bill with negative amount
self.app.post("/raclette/add", data={ self.app.post("/raclette/add", data={
'date': '2011-08-12', 'date': '2011-08-12',
'what': 'fromage à raclette', 'what': 'fromage à raclette',
@ -472,7 +472,7 @@ class BudgetTestCase(TestCase):
bill = models.Bill.query.filter(models.Bill.date == '2011-08-12')[0] bill = models.Bill.query.filter(models.Bill.date == '2011-08-12')[0]
self.assertEqual(bill.amount, -25) self.assertEqual(bill.amount, -25)
#add a bill with a comma # add a bill with a comma
self.app.post("/raclette/add", data={ self.app.post("/raclette/add", data={
'date': '2011-08-01', 'date': '2011-08-01',
'what': 'fromage à raclette', 'what': 'fromage à raclette',
@ -520,15 +520,14 @@ class BudgetTestCase(TestCase):
self.app.post("/raclette/members/add", data={'name': 'alexis'}) self.app.post("/raclette/members/add", data={'name': 'alexis'})
self.app.post("/raclette/members/add", data={'name': 'tata', 'weight': 1}) self.app.post("/raclette/members/add", data={'name': 'tata', 'weight': 1})
resp = self.app.get("/raclette/") resp = self.app.get("/raclette/")
self.assertIn('extra-info', resp.data.decode('utf-8')) self.assertIn('extra-info', resp.data.decode('utf-8'))
self.app.post("/raclette/members/add", data={'name': 'freddy familly', 'weight': 4}) self.app.post("/raclette/members/add", data={'name': 'freddy familly', 'weight': 4})
resp = self.app.get("/raclette/") resp = self.app.get("/raclette/")
self.assertNotIn('extra-info', resp.data.decode('utf-8')) self.assertNotIn('extra-info', resp.data.decode('utf-8'))
def test_rounding(self): def test_rounding(self):
self.post_project("raclette") self.post_project("raclette")
@ -568,7 +567,8 @@ class BudgetTestCase(TestCase):
result[models.Project.query.get("raclette").members[1].id] = 0.0 result[models.Project.query.get("raclette").members[1].id] = 0.0
result[models.Project.query.get("raclette").members[2].id] = -8.12 result[models.Project.query.get("raclette").members[2].id] = -8.12
# Since we're using floating point to store currency, we can have some rounding issues that prevent test from working. # Since we're using floating point to store currency, we can have some rounding issues that prevent test from working.
# However, we should obtain the same values as the theorical ones if we round to 2 decimals, like in the UI. # However, we should obtain the same values as the theorical ones if we
# round to 2 decimals, like in the UI.
for key, value in six.iteritems(balance): for key, value in six.iteritems(balance):
self.assertEqual(round(value, 2), result[key]) self.assertEqual(round(value, 2), result[key])
@ -583,7 +583,7 @@ class BudgetTestCase(TestCase):
} }
resp = self.app.post("/raclette/edit", data=new_data, resp = self.app.post("/raclette/edit", data=new_data,
follow_redirects=True) follow_redirects=True)
self.assertEqual(resp.status_code, 200) self.assertEqual(resp.status_code, 200)
project = models.Project.query.get("raclette") project = models.Project.query.get("raclette")
@ -594,7 +594,7 @@ class BudgetTestCase(TestCase):
new_data['contact_email'] = 'wrong_email' new_data['contact_email'] = 'wrong_email'
resp = self.app.post("/raclette/edit", data=new_data, resp = self.app.post("/raclette/edit", data=new_data,
follow_redirects=True) follow_redirects=True)
self.assertIn("Invalid email address", resp.data.decode('utf-8')) self.assertIn("Invalid email address", resp.data.decode('utf-8'))
def test_dashboard(self): def test_dashboard(self):
@ -613,7 +613,7 @@ class BudgetTestCase(TestCase):
self.app.post("/raclette/members/add", data={'name': 'alexis'}) self.app.post("/raclette/members/add", data={'name': 'alexis'})
self.app.post("/raclette/members/add", data={'name': 'fred'}) self.app.post("/raclette/members/add", data={'name': 'fred'})
self.app.post("/raclette/members/add", data={'name': 'tata'}) self.app.post("/raclette/members/add", data={'name': 'tata'})
#Add a member with a balance=0 : # Add a member with a balance=0 :
self.app.post("/raclette/members/add", data={'name': 'toto'}) self.app.post("/raclette/members/add", data={'name': 'toto'})
# create bills # create bills
@ -640,13 +640,13 @@ class BudgetTestCase(TestCase):
'payed_for': [1, 2], 'payed_for': [1, 2],
'amount': '10', 'amount': '10',
}) })
project = models.Project.query.get('raclette') project = models.Project.query.get('raclette')
transactions = project.get_transactions_to_settle_bill() transactions = project.get_transactions_to_settle_bill()
members = defaultdict(int) members = defaultdict(int)
#We should have the same values between transactions and project balances # We should have the same values between transactions and project balances
for t in transactions: for t in transactions:
members[t['ower']]-=t['amount'] members[t['ower']] -= t['amount']
members[t['receiver']]+=t['amount'] members[t['receiver']] += t['amount']
balance = models.Project.query.get("raclette").balance balance = models.Project.query.get("raclette").balance
for m, a in members.items(): for m, a in members.items():
self.assertEqual(a, balance[m.id]) self.assertEqual(a, balance[m.id])
@ -684,7 +684,7 @@ class BudgetTestCase(TestCase):
'payed_for': [2], 'payed_for': [2],
'amount': '13.33', 'amount': '13.33',
}) })
project = models.Project.query.get('raclette') project = models.Project.query.get('raclette')
transactions = project.get_transactions_to_settle_bill() transactions = project.get_transactions_to_settle_bill()
members = defaultdict(int) members = defaultdict(int)
# There should not be any zero-amount transfer after rounding # There should not be any zero-amount transfer after rounding
@ -805,6 +805,7 @@ class BudgetTestCase(TestCase):
class APITestCase(TestCase): class APITestCase(TestCase):
"""Tests the API""" """Tests the API"""
def api_create(self, name, id=None, password=None, contact=None): def api_create(self, name, id=None, password=None, contact=None):
@ -833,7 +834,7 @@ class APITestCase(TestCase):
def assertStatus(self, expected, resp, url=""): def assertStatus(self, expected, resp, url=""):
return self.assertEqual(expected, resp.status_code, return self.assertEqual(expected, resp.status_code,
"%s expected %s, got %s" % (url, expected, resp.status_code)) "%s expected %s, got %s" % (url, expected, resp.status_code))
def test_basic_auth(self): def test_basic_auth(self):
# create a project # create a project
@ -850,15 +851,15 @@ class APITestCase(TestCase):
for resource in ("/raclette/members", "/raclette/bills"): for resource in ("/raclette/members", "/raclette/bills"):
url = "/api/projects" + resource url = "/api/projects" + resource
self.assertStatus(401, getattr(self.app, verb)(url), self.assertStatus(401, getattr(self.app, verb)(url),
verb + resource) verb + resource)
for verb in ('get', 'delete', 'put'): for verb in ('get', 'delete', 'put'):
for resource in ("/raclette", "/raclette/members/1", for resource in ("/raclette", "/raclette/members/1",
"/raclette/bills/1"): "/raclette/bills/1"):
url = "/api/projects" + resource url = "/api/projects" + resource
self.assertStatus(401, getattr(self.app, verb)(url), self.assertStatus(401, getattr(self.app, verb)(url),
verb + resource) verb + resource)
def test_project(self): def test_project(self):
# wrong email should return an error # wrong email should return an error
@ -885,7 +886,7 @@ class APITestCase(TestCase):
# get information about it # get information about it
resp = self.app.get("/api/projects/raclette", resp = self.app.get("/api/projects/raclette",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertTrue(200, resp.status_code) self.assertTrue(200, resp.status_code)
expected = { expected = {
@ -904,12 +905,12 @@ class APITestCase(TestCase):
"contact_email": "yeah@notmyidea.org", "contact_email": "yeah@notmyidea.org",
"password": "raclette", "password": "raclette",
"name": "The raclette party", "name": "The raclette party",
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
self.assertEqual(200, resp.status_code) self.assertEqual(200, resp.status_code)
resp = self.app.get("/api/projects/raclette", resp = self.app.get("/api/projects/raclette",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertEqual(200, resp.status_code) self.assertEqual(200, resp.status_code)
expected = { expected = {
@ -925,13 +926,13 @@ class APITestCase(TestCase):
# delete should work # delete should work
resp = self.app.delete("/api/projects/raclette", resp = self.app.delete("/api/projects/raclette",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertEqual(200, resp.status_code) self.assertEqual(200, resp.status_code)
# get should return a 401 on an unknown resource # get should return a 401 on an unknown resource
resp = self.app.get("/api/projects/raclette", resp = self.app.get("/api/projects/raclette",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertEqual(401, resp.status_code) self.assertEqual(401, resp.status_code)
def test_member(self): def test_member(self):
@ -940,15 +941,15 @@ class APITestCase(TestCase):
# get the list of members (should be empty) # get the list of members (should be empty)
req = self.app.get("/api/projects/raclette/members", req = self.app.get("/api/projects/raclette/members",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual('[]', req.data.decode('utf-8')) self.assertEqual('[]', req.data.decode('utf-8'))
# add a member # add a member
req = self.app.post("/api/projects/raclette/members", data={ req = self.app.post("/api/projects/raclette/members", data={
"name": "Alexis" "name": "Alexis"
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
# the id of the new member should be returned # the id of the new member should be returned
self.assertStatus(201, req) self.assertStatus(201, req)
@ -956,21 +957,21 @@ class APITestCase(TestCase):
# the list of members should contain one member # the list of members should contain one member
req = self.app.get("/api/projects/raclette/members", req = self.app.get("/api/projects/raclette/members",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual(len(json.loads(req.data.decode('utf-8'))), 1) self.assertEqual(len(json.loads(req.data.decode('utf-8'))), 1)
# edit this member # edit this member
req = self.app.put("/api/projects/raclette/members/1", data={ req = self.app.put("/api/projects/raclette/members/1", data={
"name": "Fred" "name": "Fred"
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
# get should return the new name # get should return the new name
req = self.app.get("/api/projects/raclette/members/1", req = self.app.get("/api/projects/raclette/members/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual("Fred", json.loads(req.data.decode('utf-8'))["name"]) self.assertEqual("Fred", json.loads(req.data.decode('utf-8'))["name"])
@ -978,14 +979,14 @@ class APITestCase(TestCase):
# delete a member # delete a member
req = self.app.delete("/api/projects/raclette/members/1", req = self.app.delete("/api/projects/raclette/members/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
# the list of members should be empty # the list of members should be empty
# get the list of members (should be empty) # get the list of members (should be empty)
req = self.app.get("/api/projects/raclette/members", req = self.app.get("/api/projects/raclette/members",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual('[]', req.data.decode('utf-8')) self.assertEqual('[]', req.data.decode('utf-8'))
@ -1001,7 +1002,7 @@ class APITestCase(TestCase):
# get the list of bills (should be empty) # get the list of bills (should be empty)
req = self.app.get("/api/projects/raclette/bills", req = self.app.get("/api/projects/raclette/bills",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual("[]", req.data.decode('utf-8')) self.assertEqual("[]", req.data.decode('utf-8'))
@ -1013,7 +1014,7 @@ class APITestCase(TestCase):
'payer': "1", 'payer': "1",
'payed_for': ["1", "2"], 'payed_for': ["1", "2"],
'amount': '25', 'amount': '25',
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
# should return the id # should return the id
self.assertStatus(201, req) self.assertStatus(201, req)
@ -1021,7 +1022,7 @@ class APITestCase(TestCase):
# get this bill details # get this bill details
req = self.app.get("/api/projects/raclette/bills/1", req = self.app.get("/api/projects/raclette/bills/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
# compare with the added info # compare with the added info
self.assertStatus(200, req) self.assertStatus(200, req)
@ -1039,7 +1040,7 @@ class APITestCase(TestCase):
# the list of bills should lenght 1 # the list of bills should lenght 1
req = self.app.get("/api/projects/raclette/bills", req = self.app.get("/api/projects/raclette/bills",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual(1, len(json.loads(req.data.decode('utf-8')))) self.assertEqual(1, len(json.loads(req.data.decode('utf-8'))))
@ -1050,7 +1051,7 @@ class APITestCase(TestCase):
'payer': "1", 'payer': "1",
'payed_for': ["1", "2"], 'payed_for': ["1", "2"],
'amount': '25', 'amount': '25',
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
self.assertStatus(400, req) self.assertStatus(400, req)
self.assertEqual('{"date": ["This field is required."]}', req.data.decode('utf-8')) self.assertEqual('{"date": ["This field is required."]}', req.data.decode('utf-8'))
@ -1062,11 +1063,11 @@ class APITestCase(TestCase):
'payer': "2", 'payer': "2",
'payed_for': ["1", "2"], 'payed_for': ["1", "2"],
'amount': '25', 'amount': '25',
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
# check its fields # check its fields
req = self.app.get("/api/projects/raclette/bills/1", req = self.app.get("/api/projects/raclette/bills/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
expected = { expected = {
"what": "beer", "what": "beer",
@ -1082,17 +1083,17 @@ class APITestCase(TestCase):
# delete a bill # delete a bill
req = self.app.delete("/api/projects/raclette/bills/1", req = self.app.delete("/api/projects/raclette/bills/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(200, req) self.assertStatus(200, req)
# getting it should return a 404 # getting it should return a 404
req = self.app.get("/api/projects/raclette/bills/1", req = self.app.get("/api/projects/raclette/bills/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
self.assertStatus(404, req) self.assertStatus(404, req)
def test_username_xss(self): def test_username_xss(self):
# create a project # create a project
#self.api_create("raclette") # self.api_create("raclette")
self.post_project("raclette") self.post_project("raclette")
self.login("raclette") self.login("raclette")
@ -1118,11 +1119,11 @@ class APITestCase(TestCase):
'payer': "1", 'payer': "1",
'payed_for': ["1", "2"], 'payed_for': ["1", "2"],
'amount': '25', 'amount': '25',
}, headers=self.get_auth("raclette")) }, headers=self.get_auth("raclette"))
# get this bill details # get this bill details
req = self.app.get("/api/projects/raclette/bills/1", req = self.app.get("/api/projects/raclette/bills/1",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
# compare with the added info # compare with the added info
self.assertStatus(200, req) self.assertStatus(200, req)
@ -1139,7 +1140,7 @@ class APITestCase(TestCase):
# getting it should return a 404 # getting it should return a 404
req = self.app.get("/api/projects/raclette", req = self.app.get("/api/projects/raclette",
headers=self.get_auth("raclette")) headers=self.get_auth("raclette"))
expected = { expected = {
"active_members": [ "active_members": [
@ -1162,7 +1163,9 @@ class APITestCase(TestCase):
self.assertStatus(200, req) self.assertStatus(200, req)
self.assertEqual(expected, json.loads(req.data.decode('utf-8'))) self.assertEqual(expected, json.loads(req.data.decode('utf-8')))
class ServerTestCase(APITestCase): class ServerTestCase(APITestCase):
def setUp(self): def setUp(self):
run.configure() run.configure()
super(ServerTestCase, self).setUp() super(ServerTestCase, self).setUp()