aboutsummaryrefslogtreecommitdiff
path: root/budget
diff options
context:
space:
mode:
authorA.Avenel <avenel.alexandre@gmail.com>2012-11-03 20:53:51 +0100
committerA.Avenel <avenel.alexandre@gmail.com>2012-11-03 20:53:51 +0100
commit79bd22c25cab0c7b869ae35a72def30a5c2a6dba (patch)
tree2883257e955c2e50ad6e5c03dd7d42ee3304658b /budget
parent2b51131aa4ce216a4a6235bf6d27652aee9eefd1 (diff)
downloadihatemoney-mirror-79bd22c25cab0c7b869ae35a72def30a5c2a6dba.zip
ihatemoney-mirror-79bd22c25cab0c7b869ae35a72def30a5c2a6dba.tar.gz
ihatemoney-mirror-79bd22c25cab0c7b869ae35a72def30a5c2a6dba.tar.bz2
Add unit tests for settle_bill
Diffstat (limited to 'budget')
-rw-r--r--budget/templates/settle_bill.html31
-rw-r--r--budget/tests.py59
2 files changed, 79 insertions, 11 deletions
diff --git a/budget/templates/settle_bill.html b/budget/templates/settle_bill.html
index c91b03d..d04ff63 100644
--- a/budget/templates/settle_bill.html
+++ b/budget/templates/settle_bill.html
@@ -1,25 +1,36 @@
{% extends "layout.html" %}
-{% block head %}
- <script src="{{ url_for("static", filename="js/jquery-ui.js") }}"></script>
- {% if g.lang != "en" %}
- <script src="{{ url_for("static", filename="js/i18n/jquery.ui.datepicker-%s.js" % g.lang ) }}"></script>
- {% endif %}
-{% endblock %}
{% block js %}
$('#cancel-form').click(function(){location.href={{ url_for(".list_bills") }};});
- $.datepicker.setDefaults({'dateFormat': 'yy-mm-dd'});
- $(".datepicker").datepicker($.datepicker.regional['{{ g.lang }}']);
-
{% endblock %}
{% block navbar %}
<li><a href="{{ url_for(".list_bills") }}">{{ _("Bills") }}</a></li>
<li class="active"><a href="{{ url_for(".settle_bill") }}">{{ _("Settle") }}</a></li>
{% endblock %}
+{% block sidebar %}
+<div id="sidebar" class="sidebar">
+
+ <div id="table_overflow">
+ <table class="balance table">
+ {% set balance = g.project.balance %}
+ {% for member in g.project.members | sort(attribute='name') if member.activated or balance[member] != 0 %}
+ <tr id="bal-member-{{ member }}" action={% if member.activated %}delete{% else %}reactivate{% endif %}>
+ <td class="balance-name">{{ member.name }}</td>
+ <td class="balance-value {% if balance[member] > 0 %}positive{% elif balance[member] < 0 %}negative{% endif %}">
+ {% if balance[member] > 0 %}+{% endif %}{{ balance[member] }}
+ </td>
+ </tr>
+ {% endfor %}
+ </table>
+ </div>
+
+</div>
+{% endblock %}
+
{% block content %}
- <table id="bill_table" class="split_bills common-table zebra-striped">
+ <table id="bill_table" class="split_bills table table-striped">
<thead><tr><th>{{ _("Who pays?") }}</th><th>{{ _("To whom?") }}</th><th>{{ _("How much?") }}</th></tr></thead>
<tbody>
{% for bill in bills %}
diff --git a/budget/tests.py b/budget/tests.py
index d127b06..7790bb4 100644
--- a/budget/tests.py
+++ b/budget/tests.py
@@ -6,6 +6,7 @@ except ImportError:
import base64
import json
+from collections import defaultdict
from flask import session
@@ -432,7 +433,11 @@ class BudgetTestCase(TestCase):
})
balance = models.Project.query.get("raclette").balance
- self.assertDictEqual(balance, {3: -8.12, 1: 8.12, 2: 0.0})
+ result = {}
+ result[models.Project.query.get("raclette").members[0]] = 8.12
+ result[models.Project.query.get("raclette").members[1]] = 0.0
+ result[models.Project.query.get("raclette").members[2]] = -8.12
+ self.assertDictEqual(balance, result)
def test_edit_project(self):
# A project should be editable
@@ -463,6 +468,58 @@ class BudgetTestCase(TestCase):
response = self.app.get("/dashboard")
self.assertEqual(response.status_code, 200)
+ def test_settle_page(self):
+ self.post_project("raclette")
+ response = self.app.get("/raclette/settle_bill")
+ self.assertEqual(response.status_code, 200)
+
+ def test_settle(self):
+ self.post_project("raclette")
+
+ # add members
+ 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': 'tata'})
+ #Add a member with a balance=0 :
+ self.app.post("/raclette/members/add", data={'name': 'toto'})
+
+ # create bills
+ self.app.post("/raclette/add", data={
+ 'date': '2011-08-10',
+ 'what': u'fromage à raclette',
+ 'payer': 1,
+ 'payed_for': [1, 2, 3],
+ 'amount': '10.0',
+ })
+
+ self.app.post("/raclette/add", data={
+ 'date': '2011-08-10',
+ 'what': u'red wine',
+ 'payer': 2,
+ 'payed_for': [1],
+ 'amount': '20',
+ })
+
+ self.app.post("/raclette/add", data={
+ 'date': '2011-08-10',
+ 'what': u'delicatessen',
+ 'payer': 1,
+ 'payed_for': [1, 2],
+ 'amount': '10',
+ })
+ project = models.Project.query.get('raclette')
+ transactions = project.settle_bill()
+ members = defaultdict(int)
+ #We should have the same values between transactions and project balances
+ for t in transactions:
+ members[t['ower']]-=t['amount']
+ members[t['payer']]+=t['amount']
+ balance = models.Project.query.get("raclette").balance
+ for m, a in members.items():
+ self.assertEqual(a, balance[m])
+ return
+
+
class APITestCase(TestCase):
"""Tests the API"""