f5b75d148cc6272f96c6e1d1e58560aa3885d401
[pharos-tools.git] / 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
16
17 class BookingViewTestCase(TestCase):
18     def setUp(self):
19         self.client = Client()
20         self.res1 = Resource.objects.create(name='res1', slavename='s1', description='x', url='x')
21         self.user1 = User.objects.create(username='user1')
22         self.user1.set_password('user1')
23         self.user1profile = UserProfile.objects.create(user=self.user1)
24         self.user1.save()
25
26         self.add_booking_perm = Permission.objects.get(codename='add_booking')
27         self.user1.user_permissions.add(self.add_booking_perm)
28
29         self.user1 = User.objects.get(pk=self.user1.id)
30
31
32     def test_resource_bookings_json(self):
33         url = reverse('booking:bookings_json', kwargs={'resource_id': 0})
34         self.assertEqual(self.client.get(url).status_code, 404)
35
36         url = reverse('booking:bookings_json', kwargs={'resource_id': self.res1.id})
37         response = self.client.get(url)
38         self.assertEqual(response.status_code, 200)
39         self.assertJSONEqual(force_text(response.content), {"bookings": []})
40         booking1 = Booking.objects.create(start=timezone.now(),
41                                           end=timezone.now() + timedelta(weeks=1), user=self.user1,
42                                           resource=self.res1)
43         response = self.client.get(url)
44         json = response.json()
45         self.assertEqual(response.status_code, 200)
46         self.assertIn('bookings', json)
47         self.assertEqual(len(json['bookings']), 1)
48         self.assertIn('start', json['bookings'][0])
49         self.assertIn('end', json['bookings'][0])
50         self.assertIn('id', json['bookings'][0])
51         self.assertIn('purpose', json['bookings'][0])
52
53     def test_booking_form_view(self):
54         url = reverse('booking:create', kwargs={'resource_id': 0})
55         self.assertEqual(self.client.get(url).status_code, 404)
56
57         # anonymous user
58         url = reverse('booking:create', kwargs={'resource_id': self.res1.id})
59         response = self.client.get(url, follow=True)
60         self.assertRedirects(response, reverse('account:login') + '?next=/booking/' + str(
61             self.res1.id) + '/')
62
63         # authenticated user
64         self.client.login(username='user1',password='user1')
65         response = self.client.get(url)
66         self.assertEqual(response.status_code, 200)
67         self.assertTemplateUsed('booking/booking_calendar.html')
68         self.assertTemplateUsed('booking/booking_form.html')
69         self.assertIn('resource', response.context)
70
71
72