Add API tests
[pharos-tools.git] / dashboard / src / workflow / tests / test_workflows.py
1 ##############################################################################
2 # Copyright (c) 2018 Parker Berberian, Sawyer Bergeron, 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 from django.test import TestCase
11 from workflow.workflow_factory import WorkflowFactory
12 from dashboard.populate_db import Populator
13
14
15 """
16 To start a workflow:
17     POST to /wf/workflow {"add": <wf_type_int>
18
19     types:
20         0 - Booking
21         1 - Resource
22         2 - Config
23
24 To remove a workflow:
25     POST to /wf/workflow {"cancel": ""}
26 """
27
28
29 class WorkflowTestCase(TestCase):
30
31     @classmethod
32     def setUpTestData(cls):
33         Populator().populate()
34
35     def setUp(self):
36         self.clear_workflow()
37         self.create_workflow(self.wf_type)
38
39     def create_workflow(self, wf_type):
40         self.clear_workflow()
41
42         # creates workflow on backend
43         self.client.post("/", {"create": int(wf_type)})  # TODO: verify content type, etc
44
45     def clear_workflow(self):
46         session = self.client.session
47         for k in session.keys():
48             del session[k]
49         session.save()
50
51     def render_steps(self):
52         """
53         retrieves each step individually at /wf/workflow/step=<index>
54         """
55         for i in range(self.step_count):
56             #  renders the step itself, not in an iframe
57             exception = None
58             try:
59                 response = self.client.get("/wf/workflow/", {"step": str(i)})
60                 self.assertLess(response.status_code, 300)
61             except Exception as e:
62                 exception = e
63
64             self.assertIsNone(exception)
65
66
67 class BookingWorkflowTestCase(WorkflowTestCase):
68
69     @classmethod
70     def setUpClass(cls):
71         super(BookingWorkflowTestCase, cls).setUpClass()
72         cls.step_count = len(WorkflowFactory.booking_steps)
73         cls.wf_type = 0
74
75     def test_steps_render(self):
76         super(BookingWorkflowTestCase, self).render_steps()
77
78
79 class ResourceWorkflowTestCase(WorkflowTestCase):
80
81     @classmethod
82     def setUpClass(cls):
83         super(ResourceWorkflowTestCase, cls).setUpClass()
84         cls.step_count = len(WorkflowFactory.resource_steps)
85         cls.wf_type = 1
86
87     def test_steps_render(self):
88         super(ResourceWorkflowTestCase, self).render_steps()
89
90
91 class ConfigWorkflowTestCase(WorkflowTestCase):
92
93     @classmethod
94     def setUpClass(cls):
95         super(ConfigWorkflowTestCase, cls).setUpClass()
96         cls.step_count = len(WorkflowFactory.config_steps)
97         cls.wf_type = 2
98
99     def test_steps_render(self):
100         super(ConfigWorkflowTestCase, self).render_steps()