1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
##############################################################################
# Copyright (c) 2016 Max Breitenfeldt and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
from datetime import timedelta
from django.contrib.auth.models import Permission
from django.test import TestCase
from django.utils import timezone
from booking.models import *
from dashboard.models import Resource
from jenkins.models import JenkinsSlave
class BookingModelTestCase(TestCase):
def setUp(self):
self.slave = JenkinsSlave.objects.create(name='test', url='test')
self.owner = User.objects.create(username='owner')
self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x',
url='x',owner=self.owner)
self.res2 = Resource.objects.create(name='res2', slave=self.slave, description='x',
url='x',owner=self.owner)
self.user1 = User.objects.create(username='user1')
self.add_booking_perm = Permission.objects.get(codename='add_booking')
self.user1.user_permissions.add(self.add_booking_perm)
self.user1 = User.objects.get(pk=self.user1.id)
self.installer = Installer.objects.create(name='TestInstaller')
self.scenario = Scenario.objects.create(name='TestScenario')
def test_start_end(self):
"""
if the start of a booking is greater or equal then the end, saving should raise a
ValueException
"""
start = timezone.now()
end = start - timedelta(weeks=1)
self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
resource=self.res1, user=self.user1)
end = start
self.assertRaises(ValueError, Booking.objects.create, start=start, end=end,
resource=self.res1, user=self.user1)
def test_conflicts(self):
"""
saving an overlapping booking on the same resource should raise a ValueException
saving for different resources should succeed
"""
start = timezone.now()
end = start + timedelta(weeks=1)
self.assertTrue(
Booking.objects.create(start=start, end=end, user=self.user1, resource=self.res1))
self.assertRaises(ValueError, Booking.objects.create, start=start,
end=end, resource=self.res1, user=self.user1)
self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
end=end - timedelta(days=1), resource=self.res1, user=self.user1)
self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
end=end, resource=self.res1, user=self.user1)
self.assertRaises(ValueError, Booking.objects.create, start=start - timedelta(days=1),
end=end - timedelta(days=1), resource=self.res1, user=self.user1)
self.assertRaises(ValueError, Booking.objects.create, start=start,
end=end + timedelta(days=1), resource=self.res1, user=self.user1)
self.assertRaises(ValueError, Booking.objects.create, start=start + timedelta(days=1),
end=end + timedelta(days=1), resource=self.res1, user=self.user1)
self.assertTrue(Booking.objects.create(start=start - timedelta(days=1), end=start,
user=self.user1, resource=self.res1))
self.assertTrue(Booking.objects.create(start=end, end=end + timedelta(days=1),
user=self.user1, resource=self.res1))
self.assertTrue(
Booking.objects.create(start=start - timedelta(days=2), end=start - timedelta(days=1),
user=self.user1, resource=self.res1))
self.assertTrue(
Booking.objects.create(start=end + timedelta(days=1), end=end + timedelta(days=2),
user=self.user1, resource=self.res1))
self.assertTrue(
Booking.objects.create(start=start, end=end,
user=self.user1, resource=self.res2, scenario=self.scenario,
installer=self.installer))
|