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 account.models import UserProfile
8 from booking.models import Booking
9 from dashboard.models import Resource
10 from jenkins.models import JenkinsSlave
13 class BookingModelTestCase(TestCase):
15 self.slave = JenkinsSlave.objects.create(name='test', url='test')
16 self.owner = User.objects.create(username='owner')
18 self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x',
19 url='x',owner=self.owner)
20 self.res2 = Resource.objects.create(name='res2', slave=self.slave, description='x',
21 url='x',owner=self.owner)
23 self.user1 = User.objects.create(username='user1')
25 self.add_booking_perm = Permission.objects.get(codename='add_booking')
26 self.user1.user_permissions.add(self.add_booking_perm)
28 self.user1 = User.objects.get(pk=self.user1.id)
30 def test_start__end(self):
32 if the start of a booking is greater or equal then the end, saving should raise a
35 start = timezone.now()
36 end = start - timedelta(weeks=1)
37 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
38 resource=self.res1, user=self.user1)
40 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
41 resource=self.res1, user=self.user1)
43 def test_conflicts(self):
45 saving an overlapping booking on the same resource should raise a ValueException
46 saving for different resources should succeed
48 start = timezone.now()
49 end = start + timedelta(weeks=1)
51 Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
53 self.assertRaises(ValueError, Booking.objects.create, start=start,
54 end=end, resource=self.res1, user=self.user1)
55 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
56 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
58 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
59 end=end, resource=self.res1, user=self.user1)
60 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
61 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
63 self.assertRaises(ValueError, Booking.objects.create, start=start,
64 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
65 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
66 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
68 self.assertTrue(Booking.objects.create(start=start - timedelta(days=1), end=start,
69 user=self.user1, resource=self.res1))
70 self.assertTrue(Booking.objects.create(start=end, end=end + timedelta(days=1),
71 user=self.user1, resource=self.res1))
74 Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
75 user=self.user1, resource=self.res1))
77 Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
78 user=self.user1, resource=self.res1))
80 Booking.objects.create(start=start, end=end,
81 user=self.user1, resource=self.res2))
83 def test_authorization(self):
84 user = User.objects.create(username='user')
85 user.userprofile = UserProfile.objects.create(user=user)
86 self.assertRaises(PermissionError, Booking.objects.create, start=timezone.now(),
87 end=timezone.now() + timedelta(days=1), resource=self.res1, user=user)
88 self.res1.owner = user
90 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
91 resource=self.res1, user=user))
92 self.res1.owner = self.owner
93 user.user_permissions.add(self.add_booking_perm)
94 user = User.objects.get(pk=user.id)
96 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
97 resource=self.res2, user=user))