def test_task_update(client, data): public_url = reverse('tasks-detail', kwargs={"pk": data.public_task.pk}) private_url1 = reverse('tasks-detail', kwargs={"pk": data.private_task1.pk}) private_url2 = reverse('tasks-detail', kwargs={"pk": data.private_task2.pk}) users = [ None, data.registered_user, data.project_member_without_perms, data.project_member_with_perms, data.project_owner ] task_data = TaskSerializer(data.public_task).data task_data["subject"] = "test" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', public_url, task_data, users) assert results == [401, 403, 403, 200, 200] task_data = TaskSerializer(data.private_task1).data task_data["subject"] = "test" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', private_url1, task_data, users) assert results == [401, 403, 403, 200, 200] task_data = TaskSerializer(data.private_task2).data task_data["subject"] = "test" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', private_url2, task_data, users) assert results == [401, 403, 403, 200, 200]
def test_watchers_assignation_for_task(client): user1 = f.UserFactory.create() user2 = f.UserFactory.create() project1 = f.ProjectFactory.create(owner=user1) project2 = f.ProjectFactory.create(owner=user2) role1 = f.RoleFactory.create(project=project1) role2 = f.RoleFactory.create(project=project2) member1 = f.MembershipFactory.create(project=project1, user=user1, role=role1, is_owner=True) member2 = f.MembershipFactory.create(project=project2, user=user2, role=role2) client.login(user1) task = f.create_task(project=project1, owner=user1) data = {"version": task.version, "watchers": [user1.pk]} url = reverse("tasks-detail", args=[task.pk]) response = client.json.patch(url, json.dumps(data)) assert response.status_code == 200, response.content task = f.create_task(project=project1, owner=user1) data = {"version": task.version, "watchers": [user1.pk, user2.pk]} url = reverse("tasks-detail", args=[task.pk]) response = client.json.patch(url, json.dumps(data)) assert response.status_code == 400 task = f.create_task(project=project1, owner=user1) data = dict(TaskSerializer(task).data) data["id"] = None data["version"] = None data["watchers"] = [user1.pk, user2.pk] url = reverse("tasks-list") response = client.json.post(url, json.dumps(data)) assert response.status_code == 400 # Test the impossible case when project is not # exists in create request, and validator works as expected task = f.create_task(project=project1, owner=user1) data = dict(TaskSerializer(task).data) data["id"] = None data["watchers"] = [user1.pk, user2.pk] data["project"] = None url = reverse("tasks-list") response = client.json.post(url, json.dumps(data)) assert response.status_code == 400
def test_task_put_update_and_comment(client, data): public_url = reverse('tasks-detail', kwargs={"pk": data.public_task.pk}) private_url1 = reverse('tasks-detail', kwargs={"pk": data.private_task1.pk}) private_url2 = reverse('tasks-detail', kwargs={"pk": data.private_task2.pk}) blocked_url = reverse('tasks-detail', kwargs={"pk": data.blocked_task.pk}) users = [ None, data.registered_user, data.project_member_without_perms, data.project_member_with_perms, data.project_owner ] with mock.patch.object(OCCResourceMixin, "_validate_and_update_version"): task_data = TaskSerializer(data.public_task).data task_data["subject"] = "test" task_data["comment"] = "test comment" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', public_url, task_data, users) assert results == [401, 403, 403, 200, 200] task_data = TaskSerializer(data.private_task1).data task_data["subject"] = "test" task_data["comment"] = "test comment" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', private_url1, task_data, users) assert results == [401, 403, 403, 200, 200] task_data = TaskSerializer(data.private_task2).data task_data["subject"] = "test" task_data["comment"] = "test comment" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', private_url2, task_data, users) assert results == [401, 403, 403, 200, 200] task_data = TaskSerializer(data.blocked_task).data task_data["subject"] = "test" task_data["comment"] = "test comment" task_data = json.dumps(task_data) results = helper_test_http_method(client, 'put', blocked_url, task_data, users) assert results == [401, 403, 403, 451, 451]
def _search_tasks(self, project, text, get_all): where_clause = ( "to_tsvector(tasks_task.subject || tasks_task.description) " "@@ plainto_tsquery(%s)") model_cls = get_model("tasks", "Task") if get_all != "false" and text == '': queryset = model_cls.objects.filter(project_id=project.pk) else: queryset = (model_cls.objects.extra( where=[where_clause], params=[text]).filter(project_id=project.pk)[:50]) serializer = TaskSerializer(queryset, many=True) return serializer.data
def test_task_put_update_with_project_change(client): user1 = f.UserFactory.create() user2 = f.UserFactory.create() user3 = f.UserFactory.create() user4 = f.UserFactory.create() project1 = f.ProjectFactory() project2 = f.ProjectFactory() task_status1 = f.TaskStatusFactory.create(project=project1) task_status2 = f.TaskStatusFactory.create(project=project2) project1.default_task_status = task_status1 project2.default_task_status = task_status2 project1.save() project2.save() project1 = attach_project_extra_info( Project.objects.all()).get(id=project1.id) project2 = attach_project_extra_info( Project.objects.all()).get(id=project2.id) f.MembershipFactory(project=project1, user=user1, role__project=project1, role__permissions=list( map(lambda x: x[0], MEMBERS_PERMISSIONS))) f.MembershipFactory(project=project2, user=user1, role__project=project2, role__permissions=list( map(lambda x: x[0], MEMBERS_PERMISSIONS))) f.MembershipFactory(project=project1, user=user2, role__project=project1, role__permissions=list( map(lambda x: x[0], MEMBERS_PERMISSIONS))) f.MembershipFactory(project=project2, user=user3, role__project=project2, role__permissions=list( map(lambda x: x[0], MEMBERS_PERMISSIONS))) task = f.TaskFactory.create(project=project1) task = attach_task_extra_info(Task.objects.all()).get(id=task.id) url = reverse('tasks-detail', kwargs={"pk": task.pk}) # Test user with permissions in both projects client.login(user1) task_data = TaskSerializer(task).data task_data["project"] = project2.id task_data = json.dumps(task_data) response = client.put(url, data=task_data, content_type="application/json") assert response.status_code == 200 task.project = project1 task.save() # Test user with permissions in only origin project client.login(user2) task_data = TaskSerializer(task).data task_data["project"] = project2.id task_data = json.dumps(task_data) response = client.put(url, data=task_data, content_type="application/json") assert response.status_code == 403 task.project = project1 task.save() # Test user with permissions in only destionation project client.login(user3) task_data = TaskSerializer(task).data task_data["project"] = project2.id task_data = json.dumps(task_data) response = client.put(url, data=task_data, content_type="application/json") assert response.status_code == 403 task.project = project1 task.save() # Test user without permissions in the projects client.login(user4) task_data = TaskSerializer(task).data task_data["project"] = project2.id task_data = json.dumps(task_data) response = client.put(url, data=task_data, content_type="application/json") assert response.status_code == 403 task.project = project1 task.save()
def _search_tasks(self, project, text): queryset = services.search_tasks(project, text) serializer = TaskSerializer(queryset, many=True) return serializer.data