inital commit
This commit is contained in:
104
adventrues/tests.py
Normal file
104
adventrues/tests.py
Normal file
@@ -0,0 +1,104 @@
|
||||
from datetime import timedelta
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.utils import timezone
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
|
||||
from accounts.models import VendorProfile
|
||||
from adventrues.models import AdventureCategory, AdventureOffering
|
||||
from booking.models import Booking
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class AdventureApiTests(APITestCase):
|
||||
def setUp(self):
|
||||
self.vendor_user = User.objects.create_user(
|
||||
email="vendor2@example.com",
|
||||
password="Pass123456!",
|
||||
is_vendor=True,
|
||||
is_customer=False,
|
||||
)
|
||||
self.vendor_profile = VendorProfile.objects.create(user=self.vendor_user, business_name="Kayak Co")
|
||||
self.customer_user = User.objects.create_user(
|
||||
email="customer2@example.com",
|
||||
password="Pass123456!",
|
||||
is_vendor=False,
|
||||
is_customer=True,
|
||||
)
|
||||
self.category = AdventureCategory.objects.create(name="Kayak", slug="kayak")
|
||||
self.offering = AdventureOffering.objects.create(
|
||||
vendor=self.vendor_profile,
|
||||
category=self.category,
|
||||
title="Sunset Kayak",
|
||||
public_id="kayak-001",
|
||||
meeting_point="Biscayne Bay",
|
||||
duration_minutes=120,
|
||||
capacity=8,
|
||||
price_per_person="75.00",
|
||||
is_active=True,
|
||||
)
|
||||
|
||||
def test_public_adventure_list_detail_and_filter(self):
|
||||
list_res = self.client.get("/api/v1/adventrues/offerings/")
|
||||
self.assertEqual(list_res.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(list_res.data), 1)
|
||||
|
||||
filter_res = self.client.get("/api/v1/adventrues/offerings/?category=kayak&location=biscayne")
|
||||
self.assertEqual(filter_res.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(filter_res.data), 1)
|
||||
|
||||
detail_res = self.client.get("/api/v1/adventrues/offerings/kayak-001/")
|
||||
self.assertEqual(detail_res.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(detail_res.data["public_id"], "kayak-001")
|
||||
|
||||
def test_vendor_adventure_crud_access_control(self):
|
||||
self.client.force_authenticate(self.customer_user)
|
||||
forbidden = self.client.post(
|
||||
"/api/v1/adventrues/vendor/offerings/",
|
||||
{
|
||||
"public_id": "cust-adv",
|
||||
"title": "No Access",
|
||||
"duration_minutes": 90,
|
||||
"capacity": 3,
|
||||
"price_per_person": "20.00",
|
||||
"category_id": self.category.id,
|
||||
},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(forbidden.status_code, status.HTTP_403_FORBIDDEN)
|
||||
|
||||
self.client.force_authenticate(self.vendor_user)
|
||||
created = self.client.post(
|
||||
"/api/v1/adventrues/vendor/offerings/",
|
||||
{
|
||||
"public_id": "vendor-adv",
|
||||
"title": "Vendor Adventure",
|
||||
"duration_minutes": 90,
|
||||
"capacity": 5,
|
||||
"price_per_person": "55.00",
|
||||
"category_id": self.category.id,
|
||||
"meeting_point": "Harbor",
|
||||
},
|
||||
format="json",
|
||||
)
|
||||
self.assertEqual(created.status_code, status.HTTP_201_CREATED)
|
||||
|
||||
def test_public_adventure_list_excludes_unavailable_range(self):
|
||||
starts = timezone.now() + timedelta(days=4)
|
||||
ends = starts + timedelta(hours=2)
|
||||
Booking.objects.create(
|
||||
customer=self.customer_user,
|
||||
vendor=self.vendor_profile,
|
||||
adventure_offering=self.offering,
|
||||
starts_at=starts,
|
||||
ends_at=ends,
|
||||
status=Booking.Status.APPROVED,
|
||||
total_price="150.00",
|
||||
)
|
||||
res = self.client.get(
|
||||
f"/api/v1/adventrues/offerings/?available_from={starts.isoformat()}&available_to={ends.isoformat()}"
|
||||
)
|
||||
self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(res.data), 0)
|
||||
Reference in New Issue
Block a user