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