Merge "Revert "Minor updates to info file""
[pharos.git] / tools / pharos-dashboard / booking / tests / test_models.py
1 from datetime import timedelta
2
3 from django.contrib.auth.models import User, Permission
4 from django.test import TestCase
5 from django.utils import timezone
6
7 from account.models import UserProfile
8 from booking.models import Booking
9 from dashboard.models import Resource
10 from jenkins.models import JenkinsSlave
11
12
13 class BookingModelTestCase(TestCase):
14     def setUp(self):
15         self.slave = JenkinsSlave.objects.create(name='test', url='test')
16         self.owner = User.objects.create(username='owner')
17
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)
22
23         self.user1 = User.objects.create(username='user1')
24
25         self.add_booking_perm = Permission.objects.get(codename='add_booking')
26         self.user1.user_permissions.add(self.add_booking_perm)
27
28         self.user1 = User.objects.get(pk=self.user1.id)
29
30     def test_start__end(self):
31         """
32         if the start of a booking is greater or equal then the end, saving should raise a
33         ValueException
34         """
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)
39         end = start
40         self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
41                           resource=self.res1, user=self.user1)
42
43     def test_conflicts(self):
44         """
45         saving an overlapping booking on the same resource should raise a ValueException
46         saving for different resources should succeed
47         """
48         start = timezone.now()
49         end = start + timedelta(weeks=1)
50         self.assertTrue(
51             Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
52
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)
57
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)
62
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)
67
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))
72
73         self.assertTrue(
74             Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
75                                    user=self.user1, resource=self.res1))
76         self.assertTrue(
77             Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
78                                    user=self.user1, resource=self.res1))
79         self.assertTrue(
80             Booking.objects.create(start=start, end=end,
81                                    user=self.user1, resource=self.res2))
82
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
89         self.assertTrue(
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)
95         self.assertTrue(
96             Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
97                                    resource=self.res2, user=user))