b4cd1133c113bfd218b8f6d7cf9be39f12028346
[laas.git] / src / booking / tests / test_models.py
1 ##############################################################################
2 # Copyright (c) 2016 Max Breitenfeldt and others.
3 #
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 ##############################################################################
9
10
11 from datetime import timedelta
12
13 from django.contrib.auth.models import Permission
14 from django.test import TestCase
15 from django.utils import timezone
16
17 from booking.models import *
18 from dashboard.models import Resource
19 from jenkins.models import JenkinsSlave
20
21
22 class BookingModelTestCase(TestCase):
23     def setUp(self):
24         self.slave = JenkinsSlave.objects.create(name='test', url='test')
25         self.owner = User.objects.create(username='owner')
26
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)
31
32         self.user1 = User.objects.create(username='user1')
33
34         self.add_booking_perm = Permission.objects.get(codename='add_booking')
35         self.user1.user_permissions.add(self.add_booking_perm)
36
37         self.user1 = User.objects.get(pk=self.user1.id)
38
39         self.installer = Installer.objects.create(name='TestInstaller')
40         self.scenario = Scenario.objects.create(name='TestScenario')
41
42     def test_start_end(self):
43         """
44         if the start of a booking is greater or equal then the end, saving should raise a
45         ValueException
46         """
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)
51         end = start
52         self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
53                           resource=self.res1, user=self.user1)
54
55     def test_conflicts(self):
56         """
57         saving an overlapping booking on the same resource should raise a ValueException
58         saving for different resources should succeed
59         """
60         start = timezone.now()
61         end = start + timedelta(weeks=1)
62         self.assertTrue(
63             Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
64
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)
69
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)
74
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)
79
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))
84
85         self.assertTrue(
86             Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
87                                    user=self.user1, resource=self.res1))
88         self.assertTrue(
89             Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
90                                    user=self.user1, resource=self.res1))
91         self.assertTrue(
92             Booking.objects.create(start=start, end=end,
93                                    user=self.user1, resource=self.res2, scenario=self.scenario,
94                                    installer=self.installer))