From 639ff276a752aeb66555519f8ebcdaddc446a303 Mon Sep 17 00:00:00 2001 From: Kory Becker Date: Mon, 22 Aug 2022 11:51:58 -0400 Subject: [PATCH] Unit tests. --- pybossa/view/projects.py | 4 + test/test_view/test_assign_task_worker.py | 95 +++++++++++++++++++++-- 2 files changed, 92 insertions(+), 7 deletions(-) diff --git a/pybossa/view/projects.py b/pybossa/view/projects.py index f904ac82a9..e2090e7b8c 100644 --- a/pybossa/view/projects.py +++ b/pybossa/view/projects.py @@ -1844,6 +1844,7 @@ def bulk_update_assign_worker(short_name): # update tasks with assign worker values assign_workers = data.get('add', []) remove_workers = data.get('remove', []) + assign_users = [] assign_worker_emails = [w["email"] for w in assign_workers] remove_worker_emails = [w["email"] for w in remove_workers] @@ -1875,6 +1876,7 @@ def bulk_update_assign_worker(short_name): if assign_user: user_pref["assign_user"] = assign_user + assign_users.append({'taskId': int(task_id), 'assign_user': assign_user}) elif "assign_user" in user_pref: del user_pref["assign_user"] @@ -1882,6 +1884,8 @@ def bulk_update_assign_worker(short_name): flag_modified(t, "user_pref") task_repo.update(t) + response['assign_users'] = assign_users + return Response(json.dumps(response), 200, mimetype='application/json') @crossdomain(origin='*', headers=cors_headers) diff --git a/test/test_view/test_assign_task_worker.py b/test/test_view/test_assign_task_worker.py index 296f88e5de..3a63a85e70 100644 --- a/test/test_view/test_assign_task_worker.py +++ b/test/test_view/test_assign_task_worker.py @@ -5,6 +5,8 @@ from test import with_context from test.factories import ProjectFactory, TaskFactory, UserFactory from test.helper import web +from test.helper.gig_helper import make_subadmin_by +from unittest.mock import patch class TestAssignTaskWorker(web.Helper): @@ -103,24 +105,103 @@ def test_bulk_priority_update(self): assert task1.priority_0 == .5, task1.priority_0 + @with_context + def test_update_assign_workers_by_task_id(self): + """Test update assign worker.""" + admin = UserFactory.create(admin=True) + admin.set_password('1234') + user_repo.save(admin) + + csrf = self.get_csrf('/account/signin') + self.signin(email=admin.email_addr, csrf=csrf) + + project = ProjectFactory.create(published=True) + user = UserFactory.create(email_addr='a@a.com', fullname="test_user") + + task1 = TaskFactory.create(project=project) + task_repo.update(task1) + + # Assign user to task by task id. + req_data = dict(taskId=str(task1.id), add=[{'email':user.email_addr}]) + + url = '/project/%s/tasks/assign-workersupdate?api_key=%s' % (project.short_name, project.owner.api_key) + res = self.app.post(url, content_type='application/json', data=json.dumps(req_data), follow_redirects=True, headers={'X-CSRFToken': csrf}) + res_data = json.loads(res.data) + + # Verify the user has been assigned to this task. + assert res_data['assign_users'][0]['taskId'] == task1.id + assert res_data['assign_users'][0]['assign_user'][0] == user.email_addr + + task1_modified = task_repo.get_task(task1.id) + assert user.email_addr in task1_modified.user_pref.get('assign_user') @with_context - def test_update_assign_workers(self): + def test_update_assign_workers_by_filter(self): """Test update assign worker.""" + admin = UserFactory.create(admin=True) + admin.set_password('1234') + user_repo.save(admin) + + csrf = self.get_csrf('/account/signin') + self.signin(email=admin.email_addr, csrf=csrf) + + project = ProjectFactory.create(published=True) + user = UserFactory.create(email_addr='a@a.com', fullname="test_user") + + task1 = TaskFactory.create(project=project) + task_repo.update(task1) + + # Assign user to task by filter. + req_data = dict(filters='{"task_id": "' + str(task1.id) + '"}', add=[{'email':user.email_addr}]) + + url = '/project/%s/tasks/assign-workersupdate?api_key=%s' % (project.short_name, project.owner.api_key) + res = self.app.post(url, content_type='application/json', data=json.dumps(req_data), follow_redirects=True, headers={'X-CSRFToken': csrf}) + res_data = json.loads(res.data) + + # Verify the user has been assigned to this task. + assert res_data['assign_users'][0]['taskId'] == task1.id + assert res_data['assign_users'][0]['assign_user'][0] == user.email_addr + + task1_modified = task_repo.get_task(task1.id) + assert user.email_addr in task1_modified.user_pref.get('assign_user') + + @with_context + def test_update_assign_workers_remove(self): + """Test update unassign worker.""" + admin = UserFactory.create(admin=True) + admin.set_password('1234') + user_repo.save(admin) + + csrf = self.get_csrf('/account/signin') + self.signin(email=admin.email_addr, csrf=csrf) + project = ProjectFactory.create(published=True) user = UserFactory.create(email_addr='a@a.com', fullname="test_user") task1_user_pref = dict(assign_user=[user.email_addr]) + # Create a task with an assigned user. task1 = TaskFactory.create(project=project, user_pref=task1_user_pref) task_repo.update(task1) - req_data = dict(taskIds=str(task1.id), add=user) + # Verify the user has been assigned to the task. + assert user.email_addr in task1.user_pref.get('assign_user') + + # Load the task and verify the user has been assigned to the task. + task1_modified1 = task_repo.get_task(task1.id) + assert user.email_addr in task1_modified1.user_pref.get('assign_user') + + # Remove the user. + req_data = dict(taskId=str(task1.id), remove=[{'email':user.email_addr}]) url = '/project/%s/tasks/assign-workersupdate?api_key=%s' % (project.short_name, project.owner.api_key) - req_data = dict(taskId=None) - res = self.app.post(url, content_type='application/json', - data=json.dumps(req_data)) + res = self.app.post(url, content_type='application/json', data=json.dumps(req_data), follow_redirects=True, headers={'X-CSRFToken': csrf}) res_data = json.loads(res.data) - assert res_data['assign_users'][0]['fullname'] == user.fullname - assert res_data['assign_users'][0]['email'] == user.email_addr + + import pdb + pdb.set_trace() + assert not res_data['assign_users'] + + # Verify the assign_user parameter has been deleted from the user_pref. + task1_modified2 = task_repo.get_task(task1.id) + assert not task1_modified2.user_pref.get('assign_user')