1 from datetime import timedelta
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
12 from account.models import UserProfile
13 from booking.models import Booking
14 from dashboard.models import Resource
17 class BookingViewTestCase(TestCase):
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)
26 self.add_booking_perm = Permission.objects.get(codename='add_booking')
27 self.user1.user_permissions.add(self.add_booking_perm)
29 self.user1 = User.objects.get(pk=self.user1.id)
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)
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,
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])
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)
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(
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)