aboutsummaryrefslogtreecommitdiff
path: root/budget/tests.py
diff options
context:
space:
mode:
authorAlexis Metaireau <alexis@notmyidea.org>2017-03-11 01:27:41 +0100
committerGitHub <noreply@github.com>2017-03-11 01:27:41 +0100
commit42854bd064404931eaccc3580ce505611162108b (patch)
treeb80cbf5ae0ddee631cb0c0aa31940f71d94d5855 /budget/tests.py
parent8c412b391f9402f3840728ad1e6b8043e4ed8b7b (diff)
parente35480d6b7adf76f5bc4d46153b621abd722c681 (diff)
downloadihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.zip
ihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.tar.gz
ihatemoney-mirror-42854bd064404931eaccc3580ce505611162108b.tar.bz2
Merge pull request #176 from 0livd/master
Add export feature
Diffstat (limited to 'budget/tests.py')
-rw-r--r--budget/tests.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/budget/tests.py b/budget/tests.py
index c650c80..3a3d850 100644
--- a/budget/tests.py
+++ b/budget/tests.py
@@ -624,6 +624,116 @@ class BudgetTestCase(TestCase):
self.assertNotEqual(0.0, rounded_amount,
msg='%f is equal to zero after rounding' % t['amount'])
+ def test_export(self):
+ self.post_project("raclette")
+
+ # add members
+ self.app.post("/raclette/members/add", data={'name': 'alexis', 'weight': 2})
+ 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': 'pépé'})
+
+ # create bills
+ self.app.post("/raclette/add", data={
+ 'date': '2016-12-31',
+ 'what': u'fromage à raclette',
+ 'payer': 1,
+ 'payed_for': [1, 2, 3, 4],
+ 'amount': '10.0',
+ })
+
+ self.app.post("/raclette/add", data={
+ 'date': '2016-12-31',
+ 'what': u'red wine',
+ 'payer': 2,
+ 'payed_for': [1, 3],
+ 'amount': '200',
+ })
+
+ self.app.post("/raclette/add", data={
+ 'date': '2017-01-01',
+ 'what': u'refund',
+ 'payer': 3,
+ 'payed_for': [2],
+ 'amount': '13.33',
+ })
+
+ # generate json export of bills
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'json',
+ 'export_type': 'bills'
+ })
+ expected = [{u'date': u'2017-01-01', u'what': u'refund',
+ u'amount': 13.33, u'payer_name': u'tata', u'payer_weight': 1.0, u'owers': [u'fred']},
+ {u'date': u'2016-12-31', u'what': u'red wine',
+ u'amount': 200.0, u'payer_name': u'fred', u'payer_weight': 1.0, u'owers': [u'alexis', u'tata']},
+ {u'date': u'2016-12-31', u'what': u'fromage \xe0 raclette',
+ u'amount': 10.0, u'payer_name': u'alexis', u'payer_weight': 2.0, u'owers': [u'alexis', u'fred', u'tata', u'p\xe9p\xe9']}]
+ self.assertEqual(json.loads(resp.data), expected)
+
+ # generate csv export of bills
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'csv',
+ 'export_type': 'bills'
+ })
+ expected = ["date,what,amount,payer_name,payer_weight,owers",
+ "2017-01-01,refund,13.33,tata,1.0,fred",
+ "2016-12-31,red wine,200.0,fred,1.0,\"alexis, tata\"",
+ "2016-12-31,fromage à raclette,10.0,alexis,2.0,\"alexis, fred, tata, pépé\""]
+ received_lines = resp.data.split("\n")
+
+ for i, line in enumerate(expected):
+ self.assertEqual(
+ set(line.split(",")),
+ set(received_lines[i].strip("\r").split(","))
+ )
+
+ # generate json export of transactions
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'json',
+ 'export_type': 'transactions'
+ })
+ expected = [{u"amount": 127.33, u"receiver": u"fred", u"ower": u"alexis"},
+ {u"amount": 55.34, u"receiver": u"fred", u"ower": u"tata"},
+ {u"amount": 2.00, u"receiver": u"fred", u"ower": u"p\xe9p\xe9"}]
+ self.assertEqual(json.loads(resp.data), expected)
+
+ # generate csv export of transactions
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'csv',
+ 'export_type': 'transactions'
+ })
+
+ expected = ["amount,receiver,ower",
+ "127.33,fred,alexis",
+ "55.34,fred,tata",
+ "2.0,fred,pépé"]
+ received_lines = resp.data.split("\n")
+
+ for i, line in enumerate(expected):
+ self.assertEqual(
+ set(line.split(",")),
+ set(received_lines[i].strip("\r").split(","))
+ )
+
+ # wrong export_format should return a 200 and export form
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'wrong_export_format',
+ 'export_type': 'transactions'
+ })
+
+ self.assertEqual(resp.status_code, 200)
+ self.assertIn('id="export_format" name="export_format"', resp.data)
+
+ # wrong export_type should return a 200 and export form
+ resp = self.app.post("/raclette/edit", data={
+ 'export_format': 'json',
+ 'export_type': 'wrong_export_type'
+ })
+
+ self.assertEqual(resp.status_code, 200)
+ self.assertIn('id="export_format" name="export_format"', resp.data)
+
class APITestCase(TestCase):
"""Tests the API"""