summaryrefslogtreecommitdiffstats
path: root/tools/pharos-dashboard/src/booking/tests/test_views.py
blob: e568c1554e24b090e6c499a46612d54a4cae015f (plain)
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
##############################################################################
# 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 import auth
from django.test import Client
from django.utils import timezone
from django.contrib.auth.models import Permission
from django.test import TestCase
from django.urls import reverse
from django.utils.encoding import force_text
from registration.forms import User

from account.models import UserProfile
from booking.models import Booking
from dashboard.models import Resource
from jenkins.models import JenkinsSlave


class BookingViewTestCase(TestCase):
    def setUp(self):
        self.client = Client()
        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.user1 = User.objects.create(username='user1')
        self.user1.set_password('user1')
        self.user1profile = UserProfile.objects.create(user=self.user1)
        self.user1.save()

        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)


    def test_resource_bookings_json(self):
        url = reverse('booking:bookings_json', kwargs={'resource_id': 0})
        self.assertEqual(self.client.get(url).status_code, 404)

        url = reverse('booking:bookings_json', kwargs={'resource_id': self.res1.id})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertJSONEqual(force_text(response.content), {"bookings": []})
        booking1 = Booking.objects.create(start=timezone.now(),
                                          end=timezone.now() + timedelta(weeks=1), user=self.user1,
                                          resource=self.res1)
        response = self.client.get(url)
        json = response.json()
        self.assertEqual(response.status_code, 200)
        self.assertIn('bookings', json)
        self.assertEqual(len(json['bookings']), 1)
        self.assertIn('start', json['bookings'][0])
        self.assertIn('end', json['bookings'][0])
        self.assertIn('id', json['bookings'][0])
        self.assertIn('purpose', json['bookings'][0])

    def test_booking_form_view(self):
        url = reverse('booking:create', kwargs={'resource_id': 0})
        self.assertEqual(self.client.get(url).status_code, 404)

        # authenticated user
        url = reverse('booking:create', kwargs={'resource_id': self.res1.id})
        self.client.login(username='user1',password='user1')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed('booking/booking_calendar.html')
        self.assertTemplateUsed('booking/booking_form.html')
        self.assertIn('resource', response.context)