diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py
index efca00bdad3237b8a813c0ca18d6cb584c093bb3..46f63ef092866a65ee0cbe075a10eb8fa24b47c9 100644
--- a/smash/web/models/worker.py
+++ b/smash/web/models/worker.py
@@ -29,14 +29,14 @@ def role_choices_by_worker_type(worker_type):
     elif worker_type == WORKER_VOUCHER_PARTNER:
         return VOUCHER_PARTNER_ROLE_CHOICES
     else:
-        return ()
+        raise TypeError("Unknown worker type")
 
 
 def worker_type_by_worker(worker):
     roles = worker.roles.filter(study=GLOBAL_STUDY_ID)
     if roles.count() == 0:
         return WORKER_STAFF
-    role = roles[0]
+    role = roles[0].role
     for role_type, role_name in STUDY_ROLE_CHOICES:
         if role_type == role:
             return WORKER_STAFF
@@ -46,7 +46,7 @@ def worker_type_by_worker(worker):
     for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES:
         if role_type == role:
             return WORKER_VOUCHER_PARTNER
-    return WORKER_STAFF
+    raise TypeError("Unknown worker role")
 
 
 class Worker(models.Model):
diff --git a/smash/web/tests/models/test_worker.py b/smash/web/tests/models/test_worker.py
index e43ae0bb4120e7c1e610336cb10380253d5f25f1..1b479467a673a15eb108e2ba61aaf519fde703f2 100644
--- a/smash/web/tests/models/test_worker.py
+++ b/smash/web/tests/models/test_worker.py
@@ -4,6 +4,9 @@ from django.contrib.auth.models import User, AnonymousUser
 from django.test import Client, TestCase
 
 from web.models import Holiday, Worker
+from web.models.worker import role_choices_by_worker_type, worker_type_by_worker
+from web.models.worker_study_role import WORKER_STAFF, ROLE_CHOICES_SECRETARY, ROLE_CHOICES_HEALTH_PARTNER, \
+    WORKER_HEALTH_PARTNER, ROLE_CHOICES_VOUCHER_PARTNER, WORKER_VOUCHER_PARTNER
 from web.tests.functions import create_worker
 from web.views.notifications import get_today_midnight_date
 
@@ -60,3 +63,31 @@ class WorkerModelTests(TestCase):
 
     def test_get_by_user_for_anonymous(self):
         self.assertIsNone(Worker.get_by_user(AnonymousUser()))
+
+    def test_role_choices_by_worker_type(self):
+        with self.assertRaises(Exception):
+            role_choices_by_worker_type("invalid arg")
+
+    def test_worker_type_by_worker_without_role(self):
+        self.assertEqual(WORKER_STAFF, worker_type_by_worker(Worker()))
+
+    def test_worker_type_by_worker_with_secretary_role(self):
+        worker = create_worker()
+        worker.roles.update(role=ROLE_CHOICES_SECRETARY)
+        self.assertEqual(WORKER_STAFF, worker_type_by_worker(worker))
+
+    def test_worker_type_by_worker_with_health_partner_role(self):
+        worker = create_worker()
+        worker.roles.update(role=ROLE_CHOICES_HEALTH_PARTNER)
+        self.assertEqual(WORKER_HEALTH_PARTNER, worker_type_by_worker(worker))
+
+    def test_worker_type_by_worker_with_voucher_partner_role(self):
+        worker = create_worker()
+        worker.roles.update(role=ROLE_CHOICES_VOUCHER_PARTNER)
+        self.assertEqual(WORKER_VOUCHER_PARTNER, worker_type_by_worker(worker))
+
+    def test_worker_type_by_worker_with_invalid_role(self):
+        worker = create_worker()
+        worker.roles.update(role="unk")
+        with self.assertRaises(Exception):
+            worker_type_by_worker(worker)