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 Permission
14 from django.test import TestCase
15 from django.utils import timezone
17 from booking.models import *
18 from dashboard.models import Resource
19 from jenkins.models import JenkinsSlave
22 class BookingModelTestCase(TestCase):
24 self.slave = JenkinsSlave.objects.create(name='test', url='test')
25 self.owner = User.objects.create(username='owner')
27 self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x',
28 url='x',owner=self.owner)
29 self.res2 = Resource.objects.create(name='res2', slave=self.slave, description='x',
30 url='x',owner=self.owner)
32 self.user1 = User.objects.create(username='user1')
34 self.add_booking_perm = Permission.objects.get(codename='add_booking')
35 self.user1.user_permissions.add(self.add_booking_perm)
37 self.user1 = User.objects.get(pk=self.user1.id)
39 self.installer = Installer.objects.create(name='TestInstaller')
40 self.scenario = Scenario.objects.create(name='TestScenario')
42 def test_start_end(self):
44 if the start of a booking is greater or equal then the end, saving should raise a
47 start = timezone.now()
48 end = start - timedelta(weeks=1)
49 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
50 resource=self.res1, user=self.user1)
52 self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
53 resource=self.res1, user=self.user1)
55 def test_conflicts(self):
57 saving an overlapping booking on the same resource should raise a ValueException
58 saving for different resources should succeed
60 start = timezone.now()
61 end = start + timedelta(weeks=1)
63 Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
65 self.assertRaises(ValueError, Booking.objects.create, start=start,
66 end=end, resource=self.res1, user=self.user1)
67 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
68 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
70 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
71 end=end, resource=self.res1, user=self.user1)
72 self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
73 end=end - timedelta(days=1), resource=self.res1, user=self.user1)
75 self.assertRaises(ValueError, Booking.objects.create, start=start,
76 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
77 self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
78 end=end + timedelta(days=1), resource=self.res1, user=self.user1)
80 self.assertTrue(Booking.objects.create(start=start - timedelta(days=1), end=start,
81 user=self.user1, resource=self.res1))
82 self.assertTrue(Booking.objects.create(start=end, end=end + timedelta(days=1),
83 user=self.user1, resource=self.res1))
86 Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
87 user=self.user1, resource=self.res1))
89 Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
90 user=self.user1, resource=self.res1))
92 Booking.objects.create(start=start, end=end,
93 user=self.user1, resource=self.res2, scenario=self.scenario,
94 installer=self.installer))