mirror of
https://github.com/AdrienHallet/HaitiWater.git
synced 2026-10-28 02:15:58 +00:00
398 lines
14 KiB
Python
398 lines
14 KiB
Python
from django.contrib.auth.models import User, Group
|
|
from django.test import TestCase
|
|
from django.test.client import Client
|
|
|
|
from apps.consumers.models import Consumer
|
|
from apps.financial.models import Payment
|
|
from apps.report.models import Ticket, BreakType, UrgencyType
|
|
from apps.water_network.models import Zone, Location, Element, ElementType, ElementStatus
|
|
|
|
|
|
class DeleteTests(TestCase):
|
|
fixtures = ["initial_data"]
|
|
|
|
def setUp(self):
|
|
self.client = Client()
|
|
self.client.login(username="Protos", password="Protos")
|
|
|
|
superzone = Zone.objects.get(name="Haiti")
|
|
zone = Zone(name="zone", superzone=superzone, subzones=["zone"],
|
|
fountain_price=100, fountain_duration=10,
|
|
kiosk_price=200, kiosk_duration=12,
|
|
indiv_base_price=300)
|
|
zone.save()
|
|
|
|
superzone.subzones.append(zone.name)
|
|
superzone.save()
|
|
|
|
lone_zone = Zone(name="lone", superzone=superzone, subzones=["lone"],
|
|
fountain_price=100, fountain_duration=10,
|
|
kiosk_price=200, kiosk_duration=12,
|
|
indiv_base_price=300)
|
|
lone_zone.save()
|
|
|
|
superzone.subzones.append(lone_zone.name)
|
|
superzone.save()
|
|
|
|
fountain = Element(name="fountain", type=ElementType.FOUNTAIN.name,
|
|
status=ElementStatus.OK.name, location="fountain", zone=superzone)
|
|
fountain.save()
|
|
|
|
indiv = Element(name="indiv", type=ElementType.INDIVIDUAL.name,
|
|
status=ElementStatus.OK.name, location="indiv", zone=superzone)
|
|
indiv.save()
|
|
|
|
lone_elem = Element(name="lone", type=ElementType.KIOSK.name,
|
|
status=ElementStatus.OK.name, location="lone", zone=superzone)
|
|
lone_elem.save()
|
|
|
|
user = User.objects.create_user(username="user_zone", email="test@gmail.com", password="test",
|
|
first_name="test", last_name="test")
|
|
user.profile.phone_number = None
|
|
user.profile.zone = zone
|
|
user.profile.save()
|
|
my_group = Group.objects.get(name='Gestionnaire de zone')
|
|
my_group.user_set.add(user)
|
|
|
|
user = User.objects.create_user(username="user_fountain", email="test@gmail.com", password="test",
|
|
first_name="test", last_name="test")
|
|
user.profile.phone_number = None
|
|
user.profile.outlets.append(indiv.id)
|
|
user.profile.save()
|
|
my_group = Group.objects.get(name='Gestionnaire de fontaine')
|
|
my_group.user_set.add(user)
|
|
|
|
lone_user = User.objects.create_user(username="lone", email="test@gmail.com", password="test",
|
|
first_name="test", last_name="test")
|
|
lone_user.profile.phone_number = None
|
|
lone_user.profile.zone = superzone
|
|
lone_user.profile.save()
|
|
my_group = Group.objects.get(name='Gestionnaire de zone')
|
|
my_group.user_set.add(lone_user)
|
|
|
|
lone_consumer = Consumer(first_name="consumer", last_name="fountain", gender="M",
|
|
location="test", household_size=1, water_outlet=fountain)
|
|
lone_consumer.save()
|
|
|
|
lone_ticket = Ticket(water_outlet=fountain, type=BreakType.MECHANICAL.name,
|
|
comment="test", urgency=UrgencyType.LOW.name)
|
|
lone_ticket.save()
|
|
|
|
lone_payment = Payment(consumer=lone_consumer, water_outlet=fountain, amount=100)
|
|
lone_payment.save()
|
|
|
|
self.client.post("/api/gis/?id={}&action=add".format(fountain.id), {
|
|
"geometry": {
|
|
"type": "Point",
|
|
"coordinates": [-72.331783, 19.394068]
|
|
}
|
|
}, content_type="application/json")
|
|
|
|
def tearDown(self):
|
|
self.client.logout()
|
|
|
|
def test_add_not_connected(self):
|
|
self.client.logout()
|
|
|
|
response = self.client.post("/api/remove/")
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
# Zone
|
|
|
|
def test_delete_zone(self):
|
|
old_zone = Zone.objects.get(name="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "zone",
|
|
"id": old_zone.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_zone = Zone.objects.filter(name="lone").first()
|
|
self.assertIsNone(test_zone)
|
|
|
|
superzone = Zone.objects.get(name="Haiti")
|
|
self.assertNotIn(old_zone.name, superzone.subzones)
|
|
|
|
def test_delete_zone_unauthorized(self):
|
|
self.client.login(username="user_fountain", password="test")
|
|
|
|
old_zone = Zone.objects.get(name="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "zone",
|
|
"id": old_zone.id
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_zone = Zone.objects.filter(name="lone").first()
|
|
self.assertIsNotNone(test_zone)
|
|
|
|
def test_delete_zone_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "zone",
|
|
"id": 1000
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_zone = Zone.objects.filter(id=1000).first()
|
|
self.assertIsNone(test_zone)
|
|
|
|
def test_delete_zone_used(self):
|
|
old_zone = Zone.objects.get(name="zone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "zone",
|
|
"id": old_zone.id
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_zone = Zone.objects.filter(name="zone").first()
|
|
self.assertIsNotNone(test_zone)
|
|
|
|
# Element
|
|
|
|
def test_delete_elem(self):
|
|
old_elem = Element.objects.get(name="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "water_element",
|
|
"id": old_elem.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_elem = Element.objects.filter(name="lone").first()
|
|
self.assertIsNone(test_elem)
|
|
|
|
def test_delete_elem_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "water_element",
|
|
"id": 1000
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_elem = Element.objects.filter(id=1000).first()
|
|
self.assertIsNone(test_elem)
|
|
|
|
def test_delete_elem_unauthorized(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
old_elem = Element.objects.get(name="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "water_element",
|
|
"id": old_elem.id
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_elem = Element.objects.filter(name="lone").first()
|
|
self.assertIsNotNone(test_elem)
|
|
|
|
def test_delete_elem_used(self):
|
|
old_elem = Element.objects.get(name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "water_element",
|
|
"id": old_elem.id
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_elem = Element.objects.filter(name="fountain").first()
|
|
self.assertIsNotNone(test_elem)
|
|
|
|
def test_delete_elem_with_user(self):
|
|
old_elem = Element.objects.get(name="indiv")
|
|
|
|
user = User.objects.get(username="user_fountain")
|
|
self.assertIn(str(old_elem.id), user.profile.outlets)
|
|
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "water_element",
|
|
"id": old_elem.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_elem = Element.objects.filter(name="indiv").first()
|
|
self.assertIsNone(test_elem)
|
|
|
|
user = User.objects.get(username="user_fountain")
|
|
self.assertNotIn(str(old_elem.id), user.profile.outlets)
|
|
|
|
# Consumer
|
|
|
|
def test_delete_consumer(self):
|
|
old_consumer = Consumer.objects.get(first_name="consumer", last_name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "consumer",
|
|
"id": old_consumer.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_consumer = Consumer.objects.filter(first_name="consumer", last_name="fountain").first()
|
|
self.assertIsNone(test_consumer)
|
|
|
|
def test_delete_consumer_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "consumer",
|
|
"id": 1000
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_consumer = Consumer.objects.filter(id=1000).first()
|
|
self.assertIsNone(test_consumer)
|
|
|
|
def test_delete_consumer_unauthorized(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
old_consumer = Consumer.objects.get(first_name="consumer", last_name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "consumer",
|
|
"id": old_consumer.id
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_consumer = Consumer.objects.filter(first_name="consumer", last_name="fountain").first()
|
|
self.assertIsNotNone(test_consumer)
|
|
|
|
# User
|
|
|
|
def test_delete_user(self):
|
|
old_user = User.objects.get(username="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "manager",
|
|
"id": old_user.username
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_user = User.objects.filter(username="lone").first()
|
|
self.assertIsNone(test_user)
|
|
|
|
def test_delete_user_unauthorized(self):
|
|
self.client.login(username="user_fountain", password="test")
|
|
|
|
old_user = User.objects.get(username="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "manager",
|
|
"id": old_user.username
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_user = User.objects.filter(username="lone").first()
|
|
self.assertIsNotNone(test_user)
|
|
|
|
def test_delete_user_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "manager",
|
|
"id": "not_exist"
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_user = User.objects.filter(username="not_exist").first()
|
|
self.assertIsNone(test_user)
|
|
|
|
def test_delete_user_higher(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
old_user = User.objects.get(username="lone")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "manager",
|
|
"id": old_user.username
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_user = User.objects.filter(username="lone").first()
|
|
self.assertIsNotNone(test_user)
|
|
|
|
# Ticket
|
|
|
|
def test_delete_ticket(self):
|
|
old_ticket = Ticket.objects.get(water_outlet__name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "ticket",
|
|
"id": old_ticket.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_ticket = Ticket.objects.filter(water_outlet__name="fountain").first()
|
|
self.assertIsNone(test_ticket)
|
|
|
|
def test_delete_ticket_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "ticket",
|
|
"id": 1000
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_ticket = Ticket.objects.filter(id=1000).first()
|
|
self.assertIsNone(test_ticket)
|
|
|
|
def test_delete_ticket_unauthorized(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
old_ticket = Ticket.objects.get(water_outlet__name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "ticket",
|
|
"id": old_ticket.id
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_ticket = Ticket.objects.filter(water_outlet__name="fountain").first()
|
|
self.assertIsNotNone(test_ticket)
|
|
|
|
# Payment
|
|
|
|
def test_delete_payment(self):
|
|
old_payment = Payment.objects.get(water_outlet__name="fountain", consumer__last_name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "payment",
|
|
"id": old_payment.id
|
|
})
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_payment = Payment.objects.filter(water_outlet__name="fountain", consumer__last_name="fountain").first()
|
|
self.assertIsNone(test_payment)
|
|
|
|
def test_delete_payment_not_exists(self):
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "payment",
|
|
"id": 1000
|
|
})
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_payment = Payment.objects.filter(id=1000).first()
|
|
self.assertIsNone(test_payment)
|
|
|
|
def test_delete_payment_unauthorized(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
old_payment = Payment.objects.get(water_outlet__name="fountain", consumer__last_name="fountain")
|
|
response = self.client.post("/api/remove/", {
|
|
"table": "payment",
|
|
"id": old_payment.id
|
|
})
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_payment = Payment.objects.filter(water_outlet__name="fountain", consumer__last_name="fountain").first()
|
|
self.assertIsNotNone(test_payment)
|
|
|
|
# Location
|
|
|
|
def test_delete_location(self):
|
|
fountain = Element.objects.get(name="fountain")
|
|
response = self.client.post("/api/gis/?id={}&action=remove".format(fountain.id))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
test_location = Location.objects.filter(elem__name="fountain").first()
|
|
self.assertIsNone(test_location)
|
|
|
|
def test_delete_location_not_exists(self):
|
|
response = self.client.post("/api/gis/?id=1000&action=remove")
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
test_location = Location.objects.filter(elem__id=1000).first()
|
|
self.assertIsNone(test_location)
|
|
|
|
def test_delete_location_unauthorized(self):
|
|
self.client.login(username="user_zone", password="test")
|
|
|
|
fountain = Element.objects.get(name="fountain")
|
|
response = self.client.post("/api/gis/?id={}&action=remove".format(fountain.id))
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
test_location = Location.objects.filter(elem__name="fountain").first()
|
|
self.assertIsNotNone(test_location)
|