From 55b4849abedd4b4b00e34cfffb5b726b2aabbfc4 Mon Sep 17 00:00:00 2001
From: Jacek Lebioda <jacek.lebioda@uni.lu>
Date: Thu, 14 Dec 2017 11:40:22 +0100
Subject: [PATCH] Tests for rooms and equipment items

---
 smash/web/tests/functions.py            | 17 ++++-
 smash/web/tests/view/test_equipments.py | 75 ++++++++++++++++++++++
 smash/web/tests/view/test_rooms.py      | 83 +++++++++++++++++++++++++
 smash/web/urls.py                       |  6 +-
 4 files changed, 179 insertions(+), 2 deletions(-)
 create mode 100644 smash/web/tests/view/test_equipments.py
 create mode 100644 smash/web/tests/view/test_rooms.py

diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py
index 8261bd63..8e7cb61c 100644
--- a/smash/web/tests/functions.py
+++ b/smash/web/tests/functions.py
@@ -6,7 +6,7 @@ from django.contrib.auth.models import User
 
 from web.models import Location, AppointmentType, StudySubject, Worker, Visit, Appointment, ConfigurationItem, \
     Language, ContactAttempt, FlyingTeam, Availability, Subject, Study, StudyColumns, StudyNotificationParameters, \
-    VoucherType, VoucherTypePrice, Voucher
+    VoucherType, VoucherTypePrice, Voucher, Room, Item
 from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, REDCAP_BASE_URL_CONFIGURATION_TYPE, \
     SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL, CONTACT_TYPES_PHONE, \
     MONDAY_AS_DAY_OF_WEEK, COUNTRY_AFGHANISTAN_ID, VOUCHER_STATUS_NEW
@@ -245,6 +245,21 @@ def create_flying_team(place=None):
     return result
 
 
+def create_item(name='Test item', is_fixed=False, disposable=False):
+    item = Item(name=name, is_fixed=is_fixed, disposable=disposable)
+    item.save()
+    return item
+
+
+def create_room(owner='Test owner', city='Test city',
+                address='Test address', equipment=[],
+                floor=1, is_vehicle=False, room_number=1):
+    room = Room(owner=owner, city=city, address=address, equipment=equipment,
+                floor=floor, is_vehicle=is_vehicle, room_number=room_number)
+    room.save()
+    return room
+
+
 def create_language(name="French", locale="fr_FR"):
     language = Language(name=name, locale=locale)
     language.save()
diff --git a/smash/web/tests/view/test_equipments.py b/smash/web/tests/view/test_equipments.py
new file mode 100644
index 00000000..918ed72d
--- /dev/null
+++ b/smash/web/tests/view/test_equipments.py
@@ -0,0 +1,75 @@
+import logging
+
+from django.urls import reverse
+
+from web.tests.functions import create_item
+from web.models import Item
+from web.tests import LoggedInTestCase
+
+logger = logging.getLogger(__name__)
+
+
+class EquipmentTests(LoggedInTestCase):
+    def test_equipment_requests(self):
+        pages = [
+            'web.views.equipment',
+            'web.views.equipment_add',
+        ]
+
+        for page in pages:
+            response = self.client.get(reverse(page))
+            self.assertEqual(response.status_code, 200)
+
+    def test_equipment_edit_request(self):
+        item = create_item()
+        page = reverse('web.views.equipment_edit',
+                       kwargs={'equipment_id': str(item.id)})
+        response = self.client.get(page)
+        self.assertEqual(response.status_code, 200)
+
+    def test_equipment_delete_request(self):
+        item = create_item()
+        page = reverse('web.views.equipment_delete',
+                       kwargs={'equipment_id': str(item.id)})
+        response = self.client.get(page)
+        self.assertEqual(response.status_code, 200)
+
+    def test_equipment_add(self):
+        page = reverse('web.views.equipment_add')
+        data = {
+            'name': 'The mysterious potion',
+            'disposable': True,
+            'is_fixed': False,
+        }
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_created = Item.objects.filter(name=data['name'])
+        self.assertEqual(len(freshly_created), 1)
+
+    def test_equipment_edit(self):
+        item = create_item()
+        page = reverse('web.views.equipment_edit',
+                       kwargs={'equipment_id': str(item.id)})
+        data = {
+            'name': 'Even more mysterious potion',
+            'disposable': True,
+            'is_fixed': True,
+        }
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_edited = Item.objects.get(id=item.id)
+        for key in data:
+            self.assertEqual(getattr(freshly_edited, key, ''), data[key])
+
+    def test_equipment_delete(self):
+        item = create_item()
+        page = reverse('web.views.equipment_delete',
+                       kwargs={'equipment_id': str(item.id)})
+
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_deleted = Item.objects.filter(id=item.id)
+        self.assertEqual(len(freshly_deleted), 0)
diff --git a/smash/web/tests/view/test_rooms.py b/smash/web/tests/view/test_rooms.py
new file mode 100644
index 00000000..a921cfb9
--- /dev/null
+++ b/smash/web/tests/view/test_rooms.py
@@ -0,0 +1,83 @@
+import logging
+
+from django.urls import reverse
+
+from web.tests.functions import create_room, create_item
+from web.models import Item, Room
+from web.tests import LoggedInTestCase
+
+logger = logging.getLogger(__name__)
+
+
+class RoomsTests(LoggedInTestCase):
+    def test_rooms_requests(self):
+        pages = [
+            'web.views.equipment_and_rooms.rooms',
+            'web.views.equipment_and_rooms.rooms_add',
+        ]
+
+        for page in pages:
+            response = self.client.get(reverse(page))
+            self.assertEqual(response.status_code, 200)
+
+    def test_rooms_edit_request(self):
+        room = create_room()
+        page = reverse('web.views.equipment_and_rooms.rooms_edit',
+                       kwargs={'room_id': str(room.id)})
+        response = self.client.get(page)
+        self.assertEqual(response.status_code, 200)
+
+    def test_rooms_delete_request(self):
+        room = create_room()
+        page = reverse('web.views.equipment_and_rooms.rooms_delete',
+                       kwargs={'room_id': str(room.id)})
+        response = self.client.get(page)
+        self.assertEqual(response.status_code, 200)
+
+    def test_rooms_add(self):
+        page = reverse('web.views.equipment_and_rooms.rooms_add')
+        item = create_item()
+        data = {
+            'city': 'Belval',
+            'address': 'Av. du Swing 123456',
+            'room_number': 123,
+            'floor': 456,
+            'is_vehicle': False,
+            'owner': 'No one',
+            'equipment': [item.id]
+        }
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_created = Room.objects.filter(address=data['address'])
+        self.assertEqual(len(freshly_created), 1)
+
+    def test_rooms_edit(self):
+        room = create_room()
+        page = reverse('web.views.equipment_and_rooms.rooms_edit',
+                       kwargs={'room_id': str(room.id)})
+        data = {
+            'city': 'Belval2',
+            'address': 'Av. du Swing ABCDE',
+            'room_number': 5,
+            'floor': 8,
+            'is_vehicle': True,
+            'owner': 'Everyone',
+        }
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_edited = Room.objects.get(id=room.id)
+        for key in data:
+            self.assertEqual(getattr(freshly_edited, key, ''), data[key])
+
+    def test_rooms_delete(self):
+        room = create_room()
+        page = reverse('web.views.equipment_and_rooms.rooms_delete',
+                       kwargs={'room_id': str(room.id)})
+
+        response = self.client.post(page, data)
+        self.assertEqual(response.status_code, 302)
+
+        freshly_deleted = Room.objects.filter(id=room.id)
+        self.assertEqual(len(freshly_deleted), 0)
diff --git a/smash/web/urls.py b/smash/web/urls.py
index cd0f9de0..88897c1f 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -122,18 +122,22 @@ urlpatterns = [
     ####################
 
     url(r'^equipment_and_rooms$', views.equipment_and_rooms.equipment_and_rooms, name='web.views.equipment_and_rooms'),
+
+    url(r'^equipment_and_rooms/equipment$', views.equipment.equipment, name='web.views.equipment'),
     url(r'^equipment_and_rooms/equipment/add$', views.equipment.equipment_add, name='web.views.equipment_add'),
     url(r'^equipment_and_rooms/equipment/edit/(?P<equipment_id>\d+)$', views.equipment.equipment_edit, name='web.views.equipment_edit'),
     url(r'^equipment_and_rooms/equipment/delete/(?P<equipment_id>\d+)$', views.equipment.equipment_delete, name='web.views.equipment_delete'),
-    url(r'^equipment_and_rooms/equipment$', views.equipment.equipment, name='web.views.equipment'),
+
     url(r'^equipment_and_rooms/kit_requests$', views.kit.kit_requests, name='web.views.kit_requests'),
     url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/$', views.kit.kit_requests_send_mail,
         name='web.views.kit_requests_send_mail'),
     url(r'^equipment_and_rooms/kit_requests/(?P<start_date>[\w-]+)/(?P<end_date>[\w-]+)/$',
         views.kit.kit_requests_send_mail, name='web.views.kit_requests_send_mail'),
+
     url(r'^equipment_and_rooms/flying_teams$', views.flying_teams.flying_teams, name='web.views.equipment_and_rooms.flying_teams'),
     url(r'^equipment_and_rooms/flying_teams/add$', views.flying_teams.flying_teams_add, name='web.views.equipment_and_rooms.flying_teams_add'),
     url(r'^equipment_and_rooms/flying_teams/edit/(?P<flying_team_id>\d+)$', views.flying_teams.flying_teams_edit, name='web.views.equipment_and_rooms.flying_teams_edit'),
+
     url(r'^equipment_and_rooms/rooms$', views.rooms.rooms, name='web.views.equipment_and_rooms.rooms'),
     url(r'^equipment_and_rooms/rooms/add$', views.rooms.rooms_add, name='web.views.equipment_and_rooms.rooms_add'),
     url(r'^equipment_and_rooms/rooms/edit/(?P<room_id>\d+)$', views.rooms.rooms_edit, name='web.views.equipment_and_rooms.rooms_edit'),
-- 
GitLab