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

5.4 KB · 185 lines · Python Raw History
  1from django.test import TestCase
  2from django.test import Client as HttpClient
  3from django.contrib.auth.models import User, Permission
  4from django.core.management import call_command
  5from django.apps import apps
  6
  7from faker import Factory
  8
  9from conf.models import Site, SitePermission
 10
 11
 12fake = Factory.create()
 13
 14
 15def init_api_test_data():
 16    """
 17    Generates fake data, starts an HttpClient session, creates a fake user and
 18    logs that user in.
 19    """
 20    call_command("migrate", verbosity=0)
 21    call_command("fake", verbosity=0, iterations=1)
 22
 23    c = HttpClient()
 24
 25    fake_user = fake.simple_profile()
 26    fake_password = fake.password()
 27    user = User.objects.create_user(
 28        fake_user["username"], fake_user["mail"], fake_password
 29    )
 30    site_permission = SitePermission.objects.create(user=user)
 31    site_permission.sites.set(Site.objects.filter(id=1))
 32    site_permission.save()
 33
 34    user = User.objects.get(username=fake_user["username"])
 35    c.login(username=fake_user["username"], password=fake_password)
 36
 37    return [c, user]
 38
 39
 40class AppTestCase(TestCase):
 41    def test_api_config(self):
 42        self.assertEqual(apps.get_app_config("api").name, "api")
 43
 44
 45class ClientBrowseableApiTestCase(TestCase):
 46    def setUp(self):
 47        self.c, self.user = init_api_test_data()
 48
 49    def test_clients_get(self):
 50        page = self.c.get("/api/clients/")
 51        self.assertEqual(page.status_code, 403)
 52
 53        self.user.user_permissions.add(Permission.objects.get(codename="view_client"))
 54
 55        page = self.c.get("/api/clients/")
 56        self.assertEqual(page.status_code, 200)
 57
 58    def test_clients_post(self):
 59        page = self.c.post("/api/clients/", {"name": fake.company()})
 60        self.assertEqual(page.status_code, 403)
 61
 62        self.user.user_permissions.add(Permission.objects.get(codename="add_client"))
 63
 64        page = self.c.post("/api/clients/", {"name": fake.company()})
 65        self.assertEqual(page.status_code, 201)
 66
 67    def test_clients_post_unicode(self):
 68        self.user.user_permissions.add(Permission.objects.get(codename="add_client"))
 69
 70        page = self.c.post("/api/clients/", {"name": "Юникод"})
 71        self.assertEqual(page.status_code, 201)
 72
 73
 74class ProjectBrowseableApiTestCase(TestCase):
 75    def setUp(self):
 76        self.c, self.user = init_api_test_data()
 77
 78    def test_projects_get(self):
 79        page = self.c.get("/api/projects/")
 80        self.assertEqual(page.status_code, 403)
 81
 82        self.user.user_permissions.add(Permission.objects.get(codename="view_project"))
 83
 84        page = self.c.get("/api/projects/")
 85        self.assertEqual(page.status_code, 200)
 86
 87    def test_projects_post(self):
 88        self.user.user_permissions.add(Permission.objects.get(codename="view_client"))
 89
 90        clients_page = self.c.get("/api/clients/")
 91        clients = clients_page.json()
 92
 93        page = self.c.post(
 94            "/api/projects/", {"client": clients[0]["url"], "name": fake.job()}
 95        )
 96
 97        self.assertEqual(page.status_code, 403)
 98
 99        self.user.user_permissions.add(Permission.objects.get(codename="add_project"))
100
101        page = self.c.post(
102            "/api/projects/", {"client": clients[0]["url"], "name": fake.job()}
103        )
104
105        self.assertEqual(page.status_code, 201)
106
107    def test_projects_post_unicode(self):
108        self.user.user_permissions.add(
109            Permission.objects.get(codename="add_project"),
110            Permission.objects.get(codename="view_client"),
111        )
112
113        clients_page = self.c.get("/api/clients/")
114        clients = clients_page.json()
115
116        page = self.c.post(
117            "/api/projects/", {"client": clients[0]["url"], "name": "Юникод"}
118        )
119
120        self.assertEqual(page.status_code, 201)
121
122
123class EntryBrowseableApiTestCase(TestCase):
124    def setUp(self):
125        self.c, self.user = init_api_test_data()
126
127    def test_entries_get(self):
128        page = self.c.get("/api/entries/")
129        self.assertEqual(page.status_code, 403)
130
131        self.user.user_permissions.add(Permission.objects.get(codename="view_entry"))
132
133        page = self.c.get("/api/entries/")
134        self.assertEqual(page.status_code, 200)
135
136    def test_entries_post(self):
137        self.user.user_permissions.add(Permission.objects.get(codename="view_project"))
138
139        projects_page = self.c.get("/api/projects/")
140        projects = projects_page.json()
141        users_page = self.c.get("/api/users/")
142        users = users_page.json()
143
144        page = self.c.post(
145            "/api/entries/",
146            {
147                "project": projects[0]["url"],
148                "user": users[0]["url"],
149                "duration": "1:30:00",
150            },
151        )
152
153        self.assertEqual(page.status_code, 403)
154
155        self.user.user_permissions.add(Permission.objects.get(codename="add_entry"))
156
157        page = self.c.post(
158            "/api/entries/",
159            {
160                "project": projects[0]["url"],
161                "user": users[0]["url"],
162                "duration": "1:30:00",
163            },
164        )
165
166        self.assertEqual(page.status_code, 201)
167
168
169class UserBrowseableApiTestCase(TestCase):
170    def setUp(self):
171        self.c, self.user = init_api_test_data()
172
173    def test_permission_get(self):
174        page = self.c.get("/api/permissions/")
175        self.assertEqual(page.status_code, 200)
176
177
178class PermissionBrowseableApiTestCase(TestCase):
179    def setUp(self):
180        self.c, self.user = init_api_test_data()
181
182    def test_users_get(self):
183        page = self.c.get("/api/users/")
184        self.assertEqual(page.status_code, 200)