c5dff5860fff18ffc05274a4a6b151ce874b4734
[pharos.git] / tools / pharos-dashboard / booking / tests / test_views.py
1 from datetime import timedelta
2
3 from django.contrib import auth
4 from django.test import Client
5 from django.utils import timezone
6 from django.contrib.auth.models import Permission
7 from django.test import TestCase
8 from django.urls import reverse
9 from django.utils.encoding import force_text
10 from registration.forms import User
11
12 from account.models import UserProfile
13 from booking.models import Booking
14 from dashboard.models import Resource
15 from jenkins.models import JenkinsSlave
16
17
18 class BookingViewTestCase(TestCase):
19     def setUp(self):
20         self.client = Client()
21         self.slave = JenkinsSlave.objects.create(name='test', url='test')
22         self.owner = User.objects.create(username='owner')
23         self.res1 = Resource.objects.create(name='res1', slave=self.slave, description='x',
24                                             url='x',owner=self.owner)
25         self.user1 = User.objects.create(username='user1')
26         self.user1.set_password('user1')
27         self.user1profile = UserProfile.objects.create(user=self.user1)
28         self.user1.save()
29
30         self.add_booking_perm = Permission.objects.get(codename='add_booking')
31         self.user1.user_permissions.add(self.add_booking_perm)
32
33         self.user1 = User.objects.get(pk=self.user1.id)
34
35
36     def test_resource_bookings_json(self):
37         url = reverse('booking:bookings_json', kwargs={'resource_id': 0})
38         self.assertEqual(self.client.get(url).status_code, 404)
39
40         url = reverse('booking:bookings_json', kwargs={'resource_id': self.res1.id})
41         response = self.client.get(url)
42         self.assertEqual(response.status_code, 200)
43         self.assertJSONEqual(force_text(response.content), {"bookings": []})
44         booking1 = Booking.objects.create(start=timezone.now(),
45                                           end=timezone.now() + timedelta(weeks=1), user=self.user1,
46                                           resource=self.res1)
47         response = self.client.get(url)
48         json = response.json()
49         self.assertEqual(response.status_code, 200)
50         self.assertIn('bookings', json)
51         self.assertEqual(len(json['bookings']), 1)
52         self.assertIn('start', json['bookings'][0])
53         self.assertIn('end', json['bookings'][0])
54         self.assertIn('id', json['bookings'][0])
55         self.assertIn('purpose', json['bookings'][0])
56
57     def test_booking_form_view(self):
58         url = reverse('booking:create', kwargs={'resource_id': 0})
59         self.assertEqual(self.client.get(url).status_code, 404)
60
61         # authenticated user
62         url = reverse('booking:create', kwargs={'resource_id': self.res1.id})
63         self.client.login(username='user1',password='user1')
64         response = self.client.get(url)
65         self.assertEqual(response.status_code, 200)
66         self.assertTemplateUsed('booking/booking_calendar.html')
67         self.assertTemplateUsed('booking/booking_form.html')
68         self.assertIn('resource', response.context)
69
70
71