Example #1
0
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]
Example #2
0
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]
Example #4
0
    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()
Example #6
0
 def _search_tasks(self, project, text):
     queryset = services.search_tasks(project, text)
     serializer = TaskSerializer(queryset, many=True)
     return serializer.data