53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
from django.contrib.auth.models import User
|
|
from django.test import TestCase
|
|
from django.utils import timezone
|
|
|
|
from rides.models import Fahrgast, Profile, Ride, RideStatus, Role
|
|
|
|
|
|
class RideLifecycleTests(TestCase):
|
|
def setUp(self):
|
|
self.pilot = User.objects.create_user("pilot")
|
|
Profile.objects.create(user=self.pilot, role=Role.PILOT)
|
|
self.fahrgast = Fahrgast.objects.create(name="Frau M.")
|
|
self.ride = Ride.objects.create(
|
|
fahrgast=self.fahrgast,
|
|
scheduled_at=timezone.now(),
|
|
pickup_label="A",
|
|
pickup_lat=49.25,
|
|
pickup_lng=6.96,
|
|
dest_label="B",
|
|
dest_lat=49.23,
|
|
dest_lng=6.99,
|
|
)
|
|
|
|
def test_claim_sets_pilot_and_status(self):
|
|
self.ride.claim(self.pilot)
|
|
self.assertEqual(self.ride.status, RideStatus.CLAIMED)
|
|
self.assertEqual(self.ride.assigned_pilot, self.pilot)
|
|
|
|
def test_cannot_finish_unclaimed_ride(self):
|
|
with self.assertRaises(ValueError):
|
|
self.ride.mark_done()
|
|
|
|
def test_claim_then_done(self):
|
|
self.ride.claim(self.pilot)
|
|
self.ride.mark_done()
|
|
self.assertEqual(self.ride.status, RideStatus.DONE)
|
|
|
|
def test_cannot_claim_done_ride(self):
|
|
self.ride.claim(self.pilot)
|
|
self.ride.mark_done()
|
|
with self.assertRaises(ValueError):
|
|
self.ride.claim(self.pilot)
|
|
|
|
def test_cannot_cancel_done_ride(self):
|
|
self.ride.claim(self.pilot)
|
|
self.ride.mark_done()
|
|
with self.assertRaises(ValueError):
|
|
self.ride.cancel()
|
|
|
|
def test_open_for_pilots_excludes_claimed(self):
|
|
self.assertIn(self.ride, Ride.objects.open_for_pilots())
|
|
self.ride.claim(self.pilot)
|
|
self.assertNotIn(self.ride, Ride.objects.open_for_pilots())
|