diff --git a/pms/templates/rooms.html b/pms/templates/rooms.html
index c30929f1f..d004a8538 100644
--- a/pms/templates/rooms.html
+++ b/pms/templates/rooms.html
@@ -2,6 +2,21 @@
{% block content %}
Habitaciones del hotel
+
+
+
+{% if rooms|length == 0 %}
+No se encontraron habitaciones.
+{% endif %}
+
{% for room in rooms%}
@@ -11,9 +26,9 @@
Habitaciones del hotel
-
+
-
+
{% endfor %}
{% endblock content%}
diff --git a/pms/tests.py b/pms/tests.py
index 7ce503c2d..fe51dd4ab 100644
--- a/pms/tests.py
+++ b/pms/tests.py
@@ -1,3 +1,45 @@
-from django.test import TestCase
+from django.test import TestCase, Client
+from django.urls import reverse
-# Create your tests here.
+from .models import Room, Room_type
+
+
+class RoomsViewFilterTest(TestCase):
+ def setUp(self):
+ self.client = Client()
+ self.room_type = Room_type.objects.create(name="Individual", price=20, max_guests=1)
+ Room.objects.create(name="Room 1.1", room_type=self.room_type, description="")
+ Room.objects.create(name="Room 1.2", room_type=self.room_type, description="")
+ Room.objects.create(name="Room 2.1", room_type=self.room_type, description="")
+
+ def test_rooms_list_shows_all_rooms(self):
+ response = self.client.get(reverse("rooms"))
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(len(response.context["rooms"]), 3)
+
+ def test_filter_by_name_contains(self):
+ response = self.client.get(reverse("rooms"), {"name": "Room 1"})
+ self.assertEqual(response.status_code, 200)
+ rooms = response.context["rooms"]
+ self.assertEqual(len(rooms), 2)
+ names = [r["name"] for r in rooms]
+ self.assertIn("Room 1.1", names)
+ self.assertIn("Room 1.2", names)
+ self.assertNotIn("Room 2.1", names)
+
+ def test_filter_is_case_insensitive(self):
+ response = self.client.get(reverse("rooms"), {"name": "room 1"})
+ self.assertEqual(len(response.context["rooms"]), 2)
+
+ def test_filter_no_results(self):
+ response = self.client.get(reverse("rooms"), {"name": "Room 9"})
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(len(response.context["rooms"]), 0)
+
+ def test_empty_filter_returns_all(self):
+ response = self.client.get(reverse("rooms"), {"name": ""})
+ self.assertEqual(len(response.context["rooms"]), 3)
+
+ def test_search_query_in_context(self):
+ response = self.client.get(reverse("rooms"), {"name": "Room 1"})
+ self.assertEqual(response.context["search_query"], "Room 1")
diff --git a/pms/views.py b/pms/views.py
index f38563933..9770ca880 100644
--- a/pms/views.py
+++ b/pms/views.py
@@ -238,9 +238,14 @@ def get(self, request, pk):
class RoomsView(View):
def get(self, request):
- # renders a list of rooms
- rooms = Room.objects.all().values("name", "room_type__name", "id")
+ # renders a list of rooms, optionally filtered by name
+ rooms = Room.objects.all()
+ query = request.GET.get("name", "").strip()
+ if query:
+ rooms = rooms.filter(name__icontains=query)
+ rooms = rooms.values("name", "room_type__name", "id")
context = {
- 'rooms': rooms
+ 'rooms': rooms,
+ 'search_query': query,
}
return render(request, "rooms.html", context)