1 ##############################################################################
2 # Copyright (c) 2016 Max Breitenfeldt and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
11 from datetime import timedelta
13 from django.contrib.auth.models import User, Permission
14 from django.test import TestCase
15 from django.utils import timezone
17 from account.models import UserProfile
18 from booking.models import Booking
19 from dashboard.models import Resource
20 from jenkins.models import JenkinsSlave
23 class BookingModelTestCase(TestCase):
25 self.slave = JenkinsSlave.objects.create(name='test', url='test')
26 self.owner = User.objects.create(username='owner')
28 self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x',
29 url='x',owner=self.owner)
30 self.res2 = Resource.objects.create(name='res2', slave=self.slave, description='x',
31 url='x',owner=self.owner)
33 self.user1 = User.objects.create(username='user1')
35 self.add_booking_perm = Permission.objects.get(codename='add_booking')
36 self.user1.user_permissions.add(self.add_booking_perm)
38 self.user1 = User.objects.get(pk=self.user1.id)
40 def test_start__end(self):
42 if the start of a booking is greater or equal then the end, saving should raise a
45 start = timezone.now()
46 end = start - timedelta(weeks=1)
47 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
48 resource=self.res1, user=self.user1)
50 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
51 resource=self.res1, user=self.user1)
53 def test_conflicts(self):
55 saving an overlapping booking on the same resource should raise a ValueException
56 saving for different resources should succeed
58 start = timezone.now()
59 end = start + timedelta(weeks=1)
61 Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
63 self.assertRaises(ValueError, Booking.objects.create, start=start,
64 end=end, 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.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
69 end=end, resource=self.res1, user=self.user1)
70 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
71 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
73 self.assertRaises(ValueError, Booking.objects.create, start=start,
74 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
75 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
76 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
78 self.assertTrue(Booking.objects.create(start=start - timedelta(days=1), end=start,
79 user=self.user1, resource=self.res1))
80 self.assertTrue(Booking.objects.create(start=end, end=end + timedelta(days=1),
81 user=self.user1, resource=self.res1))
84 Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
85 user=self.user1, resource=self.res1))
87 Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
88 user=self.user1, resource=self.res1))
90 Booking.objects.create(start=start, end=end,
91 user=self.user1, resource=self.res2))
93 def test_authorization(self):
94 user = User.objects.create(username='user')
95 user.userprofile = UserProfile.objects.create(user=user)
96 self.assertRaises(PermissionError, Booking.objects.create, start=timezone.now(),
97 end=timezone.now() + timedelta(days=1), resource=self.res1, user=user)
98 self.res1.owner = user
100 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
101 resource=self.res1, user=user))
102 self.res1.owner = self.owner
103 user.user_permissions.add(self.add_booking_perm)
104 user = User.objects.get(pk=user.id)
106 Booking.objects.create(start=timezone.now(), end=timezone.now() + timedelta(days=1),
107 resource=self.res2, user=user))