From 1d62f74f0b34742b456151a3d4b56a4b692246d6 Mon Sep 17 00:00:00 2001 From: MelodyZhangYiqun Date: Sun, 11 Dec 2022 00:16:38 -0500 Subject: [PATCH] test added --- ihatemoney/tests/main_test.py | 97 +++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/ihatemoney/tests/main_test.py b/ihatemoney/tests/main_test.py index f0a11d66..29ccda6f 100644 --- a/ihatemoney/tests/main_test.py +++ b/ihatemoney/tests/main_test.py @@ -4,6 +4,16 @@ import socket import unittest from unittest.mock import MagicMock, patch +from flask import ( + Blueprint, + abort, + flash, + g, + redirect, + render_template, + request, + url_for, +) from sqlalchemy import orm from werkzeug.security import check_password_hash @@ -410,5 +420,92 @@ class TestCurrencyConverter(unittest.TestCase): self.assertDictEqual(rates, {CurrencyConverter.no_currency: 1}) +class ModelsTestCase(IhatemoneyTestCase): + def test_remove_member(self): + # make project + self.post_project("raclette") + + # add members + self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) + self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "tata"}) + + # make bills + self.client.post( + "/raclette/add", + data={ + "date": "2011-08-10", + "what": "red wine", + "payer": 1, + "payed_for": [2], + "amount": "20", + }, + ) + + project = models.Project.query.get_by_name(name="raclette") + + zorglub = models.Person.query.get_by_name(name="zorglub", project=project) + tata = models.Person.query.get_by_name(name="tata", project=project) + fred = models.Person.query.get_by_name(name="fred", project=project) + + g.project.remove_member(tata.id) + # tata should be fully removed because they are not connected to a bill + self.assertEqual(project.members, [zorglub, fred]) + + g.project.remove_member(zorglub.id) + + # zorglub is connected to a bill so they should be deactivated + self.assertEqual(project.members, [zorglub, fred]) + self.assertEqual(zorglub.activated, False) + + def test_deactivated_user_bill(self): + + self.post_project("raclette") + + # add members + self.client.post("/raclette/members/add", data={"name": "zorglub", "weight": 2}) + self.client.post("/raclette/members/add", data={"name": "fred"}) + self.client.post("/raclette/members/add", data={"name": "tata"}) + + project = models.Project.query.get_by_name(name="raclette") + zorglub = models.Person.query.get_by_name(name="zorglub", project=project) + + self.client.post( + "/raclette/add", + data={ + "date": "2011-08-10", + "what": "red wine", + "payer": 1, + "payed_for": [2], + "amount": "20", + }, + ) + + g.project.remove_member(zorglub.id) + + self.client.post( + "/raclette/edit", + data={ + "date": "2011-08-10", + "what": "red wine", + "payer": 1, + "payed_for": [2], + "amount": "30", + }, + ) + + zorglub_bill = models.Bill.query.options( + orm.subqueryload(models.Bill.owers) + ).filter(models.Bill.owers.contains(zorglub)) + for bill in zorglub_bill: + id = bill.id + resp = self.client.post("/