repos
/ timestrap-django master

timestrap-django

mirror archived upstream

Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.

djangodockerhandcodedpythonself-hostedtime-trackingtimetracker

7.1 KB · 209 lines · Python Raw History
  1from decimal import Decimal
  2
  3from selenium.common.exceptions import NoSuchElementException
  4
  5from core.models import Client, Project
  6
  7from . import SeleniumTestCase
  8
  9
 10class ClientsTestCase(SeleniumTestCase):
 11    def test_clients_navigation(self):
 12        nav_clients = self.find("nav-clients")
 13        nav_clients.click()
 14
 15        self.find("view-clients")
 16
 17    def test_clients_visible(self):
 18        self.test_clients_navigation()
 19
 20        clients = Client.objects.all()
 21        for client in clients:
 22            client_id = "client-%s" % (client.id,)
 23            self.find(client_id)
 24
 25    def test_projects_visible(self):
 26        self.test_clients_navigation()
 27
 28        projects = Project.objects.all()
 29        for project in projects:
 30            project_id = "project-%s" % (project.id,)
 31            self.find(project_id)
 32
 33    def test_clients_add(self):
 34        self.test_clients_navigation()
 35
 36        client_add = self.find("client-add")
 37
 38        client_add.click()
 39
 40        client_modal_name = self.find("client-modal-name")
 41        client_modal_submit = self.find("client-modal-submit")
 42
 43        client_modal_name.send_keys("new client name")
 44        client_modal_submit.click()
 45
 46        view_clients = self.find("view-clients")
 47        self.contains("new client name", view_clients)
 48
 49        client = Client.objects.get(name="new client name")
 50        self.assertEqual(client.name, "new client name")
 51
 52    def test_projects_add(self):
 53        self.test_clients_navigation()
 54
 55        project_add = self.find("project-add")
 56
 57        project_add.click()
 58
 59        project_modal_client = self.find("project-modal-client")
 60        project_modal_name = self.find("project-modal-name")
 61        project_modal_estimate = self.find("project-modal-estimate")
 62        project_modal_submit = self.find("project-modal-submit")
 63
 64        client = Client.objects.first()
 65
 66        self.select(client.name, project_modal_client)
 67        project_modal_name.send_keys("new project name")
 68        project_modal_estimate.send_keys("350")
 69        project_modal_submit.click()
 70
 71        view_clients = self.find("view-clients")
 72        self.contains("new project name", view_clients)
 73        self.contains("0%", view_clients)
 74
 75        project = Project.objects.get(name="new project name")
 76        self.assertEqual(project.name, "new project name")
 77        self.assertEqual(project.estimate, Decimal(350))
 78
 79    def test_clients_delete(self):
 80        self.test_clients_navigation()
 81
 82        client = Client.objects.first()
 83        client_id = "client-%s" % (client.id,)
 84        client_element = self.find(client_id)
 85        client_menu = self.find("client-menu", client_element)
 86        client_menu_delete = self.find("client-menu-delete", client_element)
 87
 88        client_menu.click()
 89        client_menu_delete.click()
 90
 91        self.assertRaises(NoSuchElementException, self.find, client_id)
 92        self.assertRaises(
 93            Client.DoesNotExist, Client.objects.get, id=client.id
 94        )  # noqa: E501
 95
 96    def test_projects_delete(self):
 97        self.test_clients_navigation()
 98
 99        project = Project.objects.first()
100        project_id = "project-%s" % (project.id,)
101        project_element = self.find(project_id)
102        project_menu = self.find("project-menu", project_element)
103        project_menu_delete = self.find("project-menu-delete", project_element)
104
105        project_menu.click()
106        project_menu_delete.click()
107
108        self.assertRaises(NoSuchElementException, self.find, project_id)
109        self.assertRaises(
110            Project.DoesNotExist, Project.objects.get, id=project.id
111        )  # noqa: E501
112
113    def test_clients_archive(self):
114        self.test_clients_navigation()
115
116        client = Client.objects.first()
117        client_id = "client-%s" % (client.id,)
118        client_element = self.find(client_id)
119        client_menu = self.find("client-menu", client_element)
120        client_menu_archive = self.find("client-menu-archive", client_element)
121
122        client_menu.click()
123        client_menu_archive.click()
124
125        self.assertRaises(NoSuchElementException, self.find, client_id)
126        self.assertEqual(Client.objects.get(id=client.id).archive, True)
127
128    def test_projects_archive(self):
129        self.test_clients_navigation()
130
131        project = Project.objects.first()
132        project_id = "project-%s" % (project.id,)
133        project_element = self.find(project_id)
134        project_menu = self.find("project-menu", project_element)
135        project_menu_archive = self.find(
136            "project-menu-archive", project_element
137        )  # noqa: E501
138
139        project_menu.click()
140        project_menu_archive.click()
141
142        self.assertRaises(NoSuchElementException, self.find, project_id)
143        self.assertEqual(Project.objects.get(id=project.id).archive, True)
144
145    def test_clients_change(self):
146        self.test_clients_navigation()
147
148        client = Client.objects.first()
149        client_id = "client-%s" % (client.id,)
150        client_element = self.find(client_id)
151        client_menu = self.find("client-menu", client_element)
152        client_menu_change = self.find("client-menu-change", client_element)
153
154        client_menu.click()
155        client_menu_change.click()
156
157        client_modal_name = self.find("client-modal-name")
158        client_modal_submit = self.find("client-modal-submit")
159
160        self.assertEqual(client.name, client_modal_name.get_attribute("value"))
161
162        self.clear(client_modal_name)
163        client_modal_name.send_keys("new client name")
164        client_modal_submit.click()
165
166        self.contains("new client name", client_element)
167
168        client = Client.objects.get(id=client.id)
169        self.assertEqual(client.name, "new client name")
170
171    def test_projects_change(self):
172        # TODO: Test changing the projects client
173        self.test_clients_navigation()
174
175        project = Project.objects.first()
176        project_id = "project-%s" % (project.id,)
177        project_element = self.find(project_id)
178        project_menu = self.find("project-menu", project_element)
179        project_menu_change = self.find("project-menu-change", project_element)
180
181        project_menu.click()
182        project_menu_change.click()
183
184        project_modal_name = self.find("project-modal-name")
185        project_modal_estimate = self.find("project-modal-estimate")
186        project_modal_submit = self.find("project-modal-submit")
187
188        self.assertEqual(
189            project.name, project_modal_name.get_attribute("value")
190        )  # noqa: E501
191        self.assertEqual(
192            project.estimate or Decimal(0),
193            Decimal(project_modal_estimate.get_attribute("value") or 0),
194        )  # noqa: E501
195
196        self.clear(project_modal_name)
197        project_modal_name.send_keys("new project name")
198        self.clear(project_modal_estimate)
199        project_modal_estimate.send_keys("350")
200        project_modal_submit.click()
201
202        self.contains("new project name", project_element)
203        # Can't check if the page contains the new estimate since we don't have
204        # that on the front-end, we display a percent. Work around?
205
206        project = Project.objects.get(id=project.id)
207        self.assertEqual(project.name, "new project name")
208        self.assertEqual(project.estimate, Decimal(350))