1 from datetime import timedelta
3 from django.contrib.auth.models import User, Permission
4 from django.test import TestCase
5 from django.utils import timezone
7 from booking.models import Booking
8 from dashboard.models import Resource
9 from jenkins.models import JenkinsSlave
12 class BookingModelTestCase(TestCase):
14 self.slave = JenkinsSlave.objects.create(name='test', url='test')
16 self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x', url='x')
17 self.res2 = Resource.objects.create(name='res2', slave=self.slave, description='x', url='x')
19 self.user1 = User.objects.create(username='user1')
21 self.add_booking_perm = Permission.objects.get(codename='add_booking')
22 self.user1.user_permissions.add(self.add_booking_perm)
24 self.user1 = User.objects.get(pk=self.user1.id)
26 def test_start__end(self):
28 if the start of a booking is greater or equal then the end, saving should raise a
31 start = timezone.now()
32 end = start - timedelta(weeks=1)
33 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
34 resource=self.res1, user=self.user1)
36 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
37 resource=self.res1, user=self.user1)
39 def test_conflicts(self):
41 saving an overlapping booking on the same resource should raise a ValueException
42 saving for different resources should succeed
44 start = timezone.now()
45 end = start + timedelta(weeks=1)
47 Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
49 self.assertRaises(ValueError, Booking.objects.create, start=start,
50 end=end, resource=self.res1, user=self.user1)
51 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
52 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
54 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
55 end=end, resource=self.res1, user=self.user1)
56 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
57 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
59 self.assertRaises(ValueError, Booking.objects.create, start=start,
60 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
61 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
62 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
64 self.assertTrue(Booking.objects.create(start=start - timedelta(days=1), end=start,
65 user=self.user1, resource=self.res1))
66 self.assertTrue(Booking.objects.create(start=end, end=end + timedelta(days=1),
67 user=self.user1, resource=self.res1))
70 Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
71 user=self.user1, resource=self.res1))
73 Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
74 user=self.user1, resource=self.res1))
76 Booking.objects.create(start=start, end=end,
77 user=self.user1, resource=self.res2))
79 def test_authorization(self):
80 user = User.objects.create(username='user')
81 self.assertRaises(PermissionError, Booking.objects.create, start=timezone.now(),
82 end=timezone.now() + timedelta(days=1), resource=self.res1, user=user)
83 self.res1.owners.add(user)
85 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
86 resource=self.res1, user=user))
87 user.user_permissions.add(self.add_booking_perm)
88 user = User.objects.get(pk=user.id)
90 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
91 resource=self.res2, user=user))