From 48d50f7249412382df54efa05b7c874892c8a5d0 Mon Sep 17 00:00:00 2001 From: Ruitao Li Date: Sat, 10 Dec 2022 22:14:46 -0500 Subject: [PATCH] Bill types added in Bill and Project Model, Implemented in BillForm --- ihatemoney/default_settings.py | 5 +- ihatemoney/forms.py | 15 +++++- ...8f198b0_add_bill_type_into_bill_version.py | 26 ++++++++++ ...b38559992_new_bill_type_attribute_added.py | 23 +++++++++ ihatemoney/models.py | 6 ++- ihatemoney/templates/forms.html | 1 + ihatemoney/tests/api_test.py | 18 +++++++ ihatemoney/tests/budget_test.py | 48 +++++++++++++++++-- ihatemoney/tests/history_test.py | 10 ++++ ihatemoney/tests/main_test.py | 6 +++ 10 files changed, 150 insertions(+), 8 deletions(-) create mode 100644 ihatemoney/migrations/versions/3263a8f198b0_add_bill_type_into_bill_version.py create mode 100644 ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py diff --git a/ihatemoney/default_settings.py b/ihatemoney/default_settings.py index 6c23c9fb..d8c17210 100644 --- a/ihatemoney/default_settings.py +++ b/ihatemoney/default_settings.py @@ -1,5 +1,5 @@ # Verbose and documented settings are in conf-templates/ihatemoney.cfg.j2 -DEBUG = SQLACHEMY_ECHO = False +DEBUG = SQLACHEMY_ECHO = True SQLALCHEMY_DATABASE_URI = "sqlite:////tmp/ihatemoney.db" SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = "tralala" @@ -9,7 +9,8 @@ ACTIVATE_DEMO_PROJECT = True ADMIN_PASSWORD = "" ALLOW_PUBLIC_PROJECT_CREATION = True ACTIVATE_ADMIN_DASHBOARD = False -SESSION_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = False +TEMPLATES_AUTO_RELOAD=True SUPPORTED_LANGUAGES = [ "de", "el", diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index e9973fdd..aab5cc40 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -76,7 +76,8 @@ def get_billform_for(project, set_default=True, **kwargs): ] active_members = [(m.id, m.name) for m in project.active_members] - + + form.bill_type.choices = project.bill_types form.payed_for.choices = form.payer.choices = active_members form.payed_for.default = [m.id for m in project.active_members] @@ -336,7 +337,10 @@ class BillForm(FlaskForm): description=_("A link to an external document, related to this bill"), ) payed_for = SelectMultipleField( - _("For whom?"), validators=[DataRequired()], coerce=int + _("For Who?"), validators=[DataRequired()], coerce=int + ) + bill_type = SelectField( + _("Bill Type"), validators=[DataRequired()], coerce=str ) submit = SubmitField(_("Submit")) submit2 = SubmitField(_("Submit and add a new one")) @@ -351,12 +355,14 @@ class BillForm(FlaskForm): payer_id=self.payer.data, project_default_currency=project.default_currency, what=self.what.data, + bill_type=self.bill_type.data ) def save(self, bill, project): bill.payer_id = self.payer.data bill.amount = self.amount.data bill.what = self.what.data + bill.bill_type = self.bill_type.data bill.external_link = self.external_link.data bill.date = self.date.data bill.owers = Person.query.get_by_ids(self.payed_for.data, project) @@ -370,6 +376,7 @@ class BillForm(FlaskForm): self.payer.data = bill.payer_id self.amount.data = bill.amount self.what.data = bill.what + self.bill_type.data = bill.bill_type self.external_link.data = bill.external_link self.original_currency.data = bill.original_currency self.date.data = bill.date @@ -393,6 +400,10 @@ class BillForm(FlaskForm): # See https://github.com/python-babel/babel/issues/821 raise ValidationError(f"Result is too high: {field.data}") + def validate_bill_type(self, field): + if (field.data, field.data) not in Project.bill_types: + raise ValidationError(_("Invalid Bill Type")) + class MemberForm(FlaskForm): name = StringField(_("Name"), validators=[DataRequired()], filters=[strip_filter]) diff --git a/ihatemoney/migrations/versions/3263a8f198b0_add_bill_type_into_bill_version.py b/ihatemoney/migrations/versions/3263a8f198b0_add_bill_type_into_bill_version.py new file mode 100644 index 00000000..2aef2bed --- /dev/null +++ b/ihatemoney/migrations/versions/3263a8f198b0_add_bill_type_into_bill_version.py @@ -0,0 +1,26 @@ +"""add bill type into bill_version + +Revision ID: 3263a8f198b0 +Revises: 7a9b38559992 +Create Date: 2022-12-10 20:00:48.611280 + +""" + +# revision identifiers, used by Alembic. +revision = '3263a8f198b0' +down_revision = '7a9b38559992' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('bill_version', sa.Column('bill_type', sa.UnicodeText(), autoincrement=False, nullable=True)) + + # ### end Alembic commands ### + + +def downgrade(): + pass + # ### end Alembic commands ### diff --git a/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py b/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py new file mode 100644 index 00000000..d82ba05a --- /dev/null +++ b/ihatemoney/migrations/versions/7a9b38559992_new_bill_type_attribute_added.py @@ -0,0 +1,23 @@ +"""new bill type attribute added + +Revision ID: 7a9b38559992 +Revises: 927ed575acbd +Create Date: 2022-12-10 17:25:38.387643 + +""" + +# revision identifiers, used by Alembic. +revision = '7a9b38559992' +down_revision = '927ed575acbd' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.add_column("bill", sa.Column("bill_type", sa.UnicodeText())) + op.add_column("bill_version", sa.Column("bill_type", sa.UnicodeText())) + + +def downgrade(): + pass diff --git a/ihatemoney/models.py b/ihatemoney/models.py index 10615d42..1d8a6ed0 100644 --- a/ihatemoney/models.py +++ b/ihatemoney/models.py @@ -74,7 +74,7 @@ class Project(db.Model): query_class = ProjectQuery default_currency = db.Column(db.String(3)) - + bill_types = [("Expense","Expense"), ("Reimbursment","Reimbursment"), ("Refund","Refund"), ("Transfer","Transfer"), ("Payment","Payment")] @property def _to_serialize(self): obj = { @@ -673,6 +673,7 @@ class Bill(db.Model): date = db.Column(db.Date, default=datetime.datetime.now) creation_date = db.Column(db.Date, default=datetime.datetime.now) what = db.Column(db.UnicodeText) + bill_type = db.Column(db.UnicodeText) external_link = db.Column(db.UnicodeText) original_currency = db.Column(db.String(3)) @@ -692,6 +693,7 @@ class Bill(db.Model): payer_id: int = None, project_default_currency: str = "", what: str = "", + bill_type: str = "", ): super().__init__() self.amount = amount @@ -701,6 +703,7 @@ class Bill(db.Model): self.owers = owers self.payer_id = payer_id self.what = what + self.bill_type = bill_type self.converted_amount = self.currency_helper.exchange_currency( self.amount, self.original_currency, project_default_currency ) @@ -715,6 +718,7 @@ class Bill(db.Model): "date": self.date, "creation_date": self.creation_date, "what": self.what, + "bill_type": self.bill_type, "external_link": self.external_link, "original_currency": self.original_currency, "converted_amount": self.converted_amount, diff --git a/ihatemoney/templates/forms.html b/ihatemoney/templates/forms.html index 48c3df2b..3cea96aa 100644 --- a/ihatemoney/templates/forms.html +++ b/ihatemoney/templates/forms.html @@ -164,6 +164,7 @@ {% include "display_errors.html" %} {{ form.hidden_tag() }} {{ input(form.date, inline=True) }} + {{ input(form.bill_type, inline=True) }} {{ input(form.what, inline=True) }} {{ input(form.payer, inline=True, class="form-control custom-select") }}
diff --git a/ihatemoney/tests/api_test.py b/ihatemoney/tests/api_test.py index 69c6ab85..74e580e9 100644 --- a/ihatemoney/tests/api_test.py +++ b/ihatemoney/tests/api_test.py @@ -363,6 +363,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", "external_link": "https://raclette.fr", }, @@ -387,6 +388,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, {"activated": True, "id": 2, "name": "fred", "weight": 1}, ], + "bill_type": "Expense", "amount": 25.0, "date": "2011-08-10", "id": 1, @@ -418,6 +420,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", "external_link": "https://raclette.fr", }, @@ -437,6 +440,7 @@ class APITestCase(IhatemoneyTestCase): "what": "beer", "payer": "2", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", "external_link": "https://raclette.fr", }, @@ -458,6 +462,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, {"activated": True, "id": 2, "name": "fred", "weight": 1}, ], + "bill_type": "Expense", "amount": 25.0, "date": "2011-09-10", "external_link": "https://raclette.fr", @@ -512,6 +517,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": input_amount, }, headers=self.get_auth("raclette"), @@ -536,6 +542,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, {"activated": True, "id": 2, "name": "fred", "weight": 1}, ], + "bill_type": "Expense", "amount": expected_amount, "date": "2011-08-10", "id": id, @@ -569,6 +576,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": amount, }, headers=self.get_auth("raclette"), @@ -615,6 +623,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", "external_link": "https://raclette.fr", }, @@ -639,6 +648,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, {"activated": True, "id": 2, "name": "fred", "weight": 1}, ], + "bill_type": "Expense", "amount": 25.0, "date": "2011-08-10", "id": 1, @@ -663,6 +673,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "30", "external_link": "https://raclette.fr", "original_currency": "CAD", @@ -684,6 +695,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1.0}, {"activated": True, "id": 2, "name": "fred", "weight": 1.0}, ], + "bill_type": "Expense", "amount": 30.0, "date": "2011-08-10", "id": 1, @@ -704,6 +716,7 @@ class APITestCase(IhatemoneyTestCase): "what": "Pierogi", "payer": "1", "payed_for": ["2", "3"], + "bill_type": "Expense", "amount": "80", "original_currency": "PLN", }, @@ -747,6 +760,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", }, headers=self.get_auth("raclette"), @@ -814,6 +828,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1", "2"], + "bill_type": "Expense", "amount": "25", }, headers=self.get_auth("raclette"), @@ -836,6 +851,7 @@ class APITestCase(IhatemoneyTestCase): {"activated": True, "id": 1, "name": "zorglub", "weight": 1}, {"activated": True, "id": 2, "name": "freddy familly", "weight": 4}, ], + "bill_type": "Expense", "amount": 25.0, "date": "2011-08-10", "id": 1, @@ -923,6 +939,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1"], + "bill_type": "Expense", "amount": "0", }, headers=self.get_auth("raclette"), @@ -951,6 +968,7 @@ class APITestCase(IhatemoneyTestCase): "what": "fromage", "payer": "1", "payed_for": ["1"], + "bill_type": "Expense", "amount": "9347242149381274732472348728748723473278472843.12", }, headers=self.get_auth("raclette"), diff --git a/ihatemoney/tests/budget_test.py b/ihatemoney/tests/budget_test.py index fb434fbb..6236fc38 100644 --- a/ihatemoney/tests/budget_test.py +++ b/ihatemoney/tests/budget_test.py @@ -411,6 +411,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": fred_id, "payed_for": [fred_id], + "bill_type": "Expense", "amount": "25", }, ) @@ -462,6 +463,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": zorglub.id, "payed_for": [zorglub.id], + "bill_type": "Expense", "amount": "25", }, ) @@ -635,6 +637,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "25", }, ) @@ -650,6 +653,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "10", }, ) @@ -673,6 +677,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "19", }, ) @@ -684,6 +689,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[1], "payed_for": members_ids[0], + "bill_type": "Expense", "amount": "20", }, ) @@ -695,6 +701,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[1], "payed_for": members_ids, + "bill_type": "Expense", "amount": "17", }, ) @@ -710,6 +717,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "-25", }, ) @@ -724,6 +732,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "25,02", }, ) @@ -738,6 +747,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "42", "external_link": "https://example.com/fromage", }, @@ -753,6 +763,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "mauvais fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "42000", "external_link": "javascript:alert('Tu bluffes, Martoni.')", }, @@ -778,6 +789,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": members_ids[0], "payed_for": members_ids, + "bill_type": "Expense", "amount": "10", }, ) @@ -789,6 +801,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "pommes de terre", "payer": members_ids[1], "payed_for": members_ids, + "bill_type": "Expense", "amount": "10", }, ) @@ -853,6 +866,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "24.36", }, ) @@ -864,6 +878,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1], + "bill_type": "Expense", "amount": "19.12", }, ) @@ -875,6 +890,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "delicatessen", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "22", }, ) @@ -977,6 +993,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -988,6 +1005,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1], + "bill_type": "Expense", "amount": "20", }, ) @@ -999,6 +1017,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "delicatessen", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, ) @@ -1047,6 +1066,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 2, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "30", }, ) @@ -1072,6 +1092,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "ice cream", "payer": 2, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, ) @@ -1087,6 +1108,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "champomy", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, ) @@ -1102,6 +1124,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "smoothie", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "20", }, ) @@ -1118,6 +1141,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "more champomy", "payer": 2, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "30", }, ) @@ -1150,6 +1174,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -1161,6 +1186,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1], + "bill_type": "Expense", "amount": "20", }, ) @@ -1172,6 +1198,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "delicatessen", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, ) @@ -1180,8 +1207,8 @@ class BudgetTestCase(IhatemoneyTestCase): 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["receiver"]] += t["amount"] + members[t["ower"]] -= t["bill_type":"Expense", "amount"] + members[t["receiver"]] += t["bill_type":"Expense", "amount"] balance = self.get_project("raclette").balance for m, a in members.items(): assert abs(a - balance[m.id]) < 0.01 @@ -1203,6 +1230,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -1214,6 +1242,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1, 3], + "bill_type": "Expense", "amount": "20", }, ) @@ -1225,6 +1254,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "refund", "payer": 3, "payed_for": [2], + "bill_type": "Expense", "amount": "13.33", }, ) @@ -1233,7 +1263,7 @@ class BudgetTestCase(IhatemoneyTestCase): # There should not be any zero-amount transfer after rounding for t in transactions: - rounded_amount = round(t["amount"], 2) + rounded_amount = round(t["bill_type":"Expense", "amount"], 2) self.assertNotEqual( 0.0, rounded_amount, @@ -1259,6 +1289,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3, 4], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -1277,6 +1308,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "roblochon", "payer": 2, "payed_for": [1, 3, 4], + "bill_type": "Expense", "amount": "100.0", } # Try to access bill of another project @@ -1382,6 +1414,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -1393,6 +1426,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1, 3], + "bill_type": "Expense", "amount": "20", }, ) @@ -1404,6 +1438,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "refund", "payer": 3, "payed_for": [2], + "bill_type": "Expense", "amount": "13.33", }, ) @@ -1429,6 +1464,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "refund from EUR", "payer": 3, "payed_for": [2], + "bill_type": "Expense", "amount": "20", "original_currency": "EUR", }, @@ -1452,6 +1488,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "Poutine", "payer": 3, "payed_for": [2], + "bill_type": "Expense", "amount": "18", "original_currency": "CAD", }, @@ -1508,6 +1545,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10.0", "original_currency": "EUR", }, @@ -1542,6 +1580,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10.0", "original_currency": "EUR", }, @@ -1554,6 +1593,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "aspirine", "payer": 2, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "5.0", "original_currency": "EUR", }, @@ -1587,6 +1627,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1], + "bill_type": "Expense", "amount": "0", "original_currency": "EUR", }, @@ -1635,6 +1676,7 @@ class BudgetTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1], + "bill_type": "Expense", "amount": "9347242149381274732472348728748723473278472843.12", "original_currency": "EUR", }, diff --git a/ihatemoney/tests/history_test.py b/ihatemoney/tests/history_test.py index a8b3e10b..92eef005 100644 --- a/ihatemoney/tests/history_test.py +++ b/ihatemoney/tests/history_test.py @@ -200,6 +200,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": user_id, "payed_for": [user_id], + "bill_type": "Expense", "amount": "25", }, follow_redirects=True, @@ -216,6 +217,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": user_id, "payed_for": [user_id], + "bill_type": "Expense", "amount": "10", }, follow_redirects=True, @@ -367,6 +369,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1], + "bill_type": "Expense", "amount": "25", }, follow_redirects=True, @@ -388,6 +391,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "new thing", "payer": 1, "payed_for": [1], + "bill_type": "Expense", "amount": "10", }, follow_redirects=True, @@ -486,6 +490,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "Bill 1", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "25", }, ) @@ -496,6 +501,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "Bill 2", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "20", }, ) @@ -514,6 +520,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "Bill 1", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "88", }, ) @@ -555,6 +562,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "Bill 1", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "25", }, ) @@ -579,6 +587,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "Bill 2", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "20", }, ) @@ -641,6 +650,7 @@ class HistoryTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1], + "bill_type": "Expense", "amount": "10", "original_currency": "EUR", }, diff --git a/ihatemoney/tests/main_test.py b/ihatemoney/tests/main_test.py index f0a11d66..b7dbc50f 100644 --- a/ihatemoney/tests/main_test.py +++ b/ihatemoney/tests/main_test.py @@ -127,6 +127,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -138,6 +139,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1], + "bill_type": "Expense", "amount": "20", }, ) @@ -149,6 +151,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "delicatessen", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, ) @@ -183,6 +186,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "fromage à raclette", "payer": 1, "payed_for": [1, 2, 3], + "bill_type": "Expense", "amount": "10.0", }, ) @@ -194,6 +198,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "red wine", "payer": 2, "payed_for": [1], + "bill_type": "Expense", "amount": "20", }, ) @@ -205,6 +210,7 @@ class ModelsTestCase(IhatemoneyTestCase): "what": "delicatessen", "payer": 1, "payed_for": [1, 2], + "bill_type": "Expense", "amount": "10", }, )