コード例 #1
0
def test_user_story_update(client, data):
    public_url = reverse('userstories-detail',
                         kwargs={"pk": data.public_user_story.pk})
    private_url1 = reverse('userstories-detail',
                           kwargs={"pk": data.private_user_story1.pk})
    private_url2 = reverse('userstories-detail',
                           kwargs={"pk": data.private_user_story2.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"):
        user_story_data = UserStorySerializer(data.public_user_story).data
        user_story_data["subject"] = "test"
        user_story_data = json.dumps(user_story_data)
        results = helper_test_http_method(client, 'put', public_url,
                                          user_story_data, users)
        assert results == [401, 403, 403, 200, 200]

        user_story_data = UserStorySerializer(data.private_user_story1).data
        user_story_data["subject"] = "test"
        user_story_data = json.dumps(user_story_data)
        results = helper_test_http_method(client, 'put', private_url1,
                                          user_story_data, users)
        assert results == [401, 403, 403, 200, 200]

        user_story_data = UserStorySerializer(data.private_user_story2).data
        user_story_data["subject"] = "test"
        user_story_data = json.dumps(user_story_data)
        results = helper_test_http_method(client, 'put', private_url2,
                                          user_story_data, users)
        assert results == [401, 403, 403, 200, 200]
コード例 #2
0
def test_watchers_assignation_for_us(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)
    f.MembershipFactory.create(project=project1,
                               user=user1,
                               role=role1,
                               is_owner=True)
    f.MembershipFactory.create(project=project2, user=user2, role=role2)

    client.login(user1)

    us = f.create_userstory(project=project1,
                            owner=user1,
                            status__project=project1)
    data = {"version": us.version, "watchers": [user1.pk]}

    url = reverse("userstories-detail", args=[us.pk])
    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 200, str(response.content)

    us = f.create_userstory(project=project1,
                            owner=user1,
                            status__project=project1)
    data = {"version": us.version, "watchers": [user1.pk, user2.pk]}

    url = reverse("userstories-detail", args=[us.pk])
    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 400

    us = f.create_userstory(project=project1,
                            owner=user1,
                            status__project=project1)
    data = dict(UserStorySerializer(us).data)
    data["id"] = None
    data["version"] = None
    data["watchers"] = [user1.pk, user2.pk]

    url = reverse("userstories-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
    us = f.create_userstory(project=project1,
                            owner=user1,
                            status__project=project1)
    data = dict(UserStorySerializer(us).data)

    data["id"] = None
    data["watchers"] = [user1.pk, user2.pk]
    data["project"] = None

    url = reverse("userstories-list")
    response = client.json.post(url, json.dumps(data))
    assert response.status_code == 400
コード例 #3
0
ファイル: test_userstories.py プロジェクト: vanife/taiga-back
def test_update_userstory_points(client):
    user1 = f.UserFactory.create()
    user2 = f.UserFactory.create()
    project = f.ProjectFactory.create(owner=user1)

    role1 = f.RoleFactory.create(project=project)
    role2 = f.RoleFactory.create(project=project)

    f.MembershipFactory.create(project=project,
                               user=user1,
                               role=role1,
                               is_admin=True)
    f.MembershipFactory.create(project=project, user=user2, role=role2)

    f.PointsFactory.create(project=project, value=None)
    f.PointsFactory.create(project=project, value=1)
    points3 = f.PointsFactory.create(project=project, value=2)

    us = f.UserStoryFactory.create(project=project,
                                   owner=user1,
                                   status__project=project,
                                   milestone__project=project)
    usdata = UserStorySerializer(us).data

    url = reverse("userstories-detail", args=[us.pk])

    client.login(user1)

    # invalid role
    data = {}
    data["version"] = usdata["version"]
    data["points"] = copy.copy(usdata["points"])
    data["points"].update({"222222": points3.pk})

    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 400

    # invalid point
    data = {}
    data["version"] = usdata["version"]
    data["points"] = copy.copy(usdata["points"])
    data["points"].update({str(role1.pk): "999999"})

    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 400

    # Api should save successful
    data = {}
    data["version"] = usdata["version"]
    data["points"] = copy.copy(usdata["points"])
    data["points"].update({str(role1.pk): points3.pk})

    response = client.json.patch(url, json.dumps(data))
    us = models.UserStory.objects.get(pk=us.pk)
    usdatanew = UserStorySerializer(us).data
    assert response.status_code == 200, str(response.content)
    assert response.data["points"] == usdatanew['points']
    assert response.data["points"] != usdata['points']
コード例 #4
0
    def _search_user_stories(self, project, text, get_all):
        where_clause = (
            "to_tsvector(userstories_userstory.subject || "
            "userstories_userstory.description) @@ plainto_tsquery(%s)")

        model_cls = get_model("userstories", "UserStory")
        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 = UserStorySerializer(queryset, many=True)
        return serializer.data
コード例 #5
0
def test_update_userstory_points(client):
    user1 = f.UserFactory.create()
    user2 = f.UserFactory.create()
    project = f.ProjectFactory.create(owner=user1)

    role1 = f.RoleFactory.create(project=project)
    role2 = f.RoleFactory.create(project=project)

    member = f.MembershipFactory.create(project=project,
                                        user=user1,
                                        role=role1,
                                        is_owner=True)
    member = f.MembershipFactory.create(project=project,
                                        user=user2,
                                        role=role2)

    points1 = f.PointsFactory.create(project=project, value=None)
    points2 = f.PointsFactory.create(project=project, value=1)
    points3 = f.PointsFactory.create(project=project, value=2)

    us = f.UserStoryFactory.create(project=project, owner=user1)
    url = reverse("userstories-detail", args=[us.pk])
    usdata = UserStorySerializer(us).data

    client.login(user1)

    # Api should ignore invalid values
    data = {}
    data["version"] = usdata["version"]
    data["points"] = copy.copy(usdata["points"])
    data["points"].update({'2000': points3.pk})

    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 200, response.data

    # Api should save successful
    data = {}
    data["version"] = usdata["version"] + 1
    data["points"] = copy.copy(usdata["points"])
    data["points"].update({str(role1.pk): points3.pk})

    response = client.json.patch(url, json.dumps(data))
    assert response.status_code == 200, response.data

    us = models.UserStory.objects.get(pk=us.pk)
    rp = list(us.role_points.values_list("role_id", "points_id"))

    assert rp == [(role1.pk, points3.pk), (role2.pk, points1.pk)]
コード例 #6
0
ファイル: test_milestones.py プロジェクト: utngz/taiga-back
def test_update_milestone_with_userstories_list(client):
    user = f.UserFactory.create()
    project = f.ProjectFactory.create(owner=user)
    role = f.RoleFactory.create(project=project)
    f.MembershipFactory.create(project=project, user=user, role=role, is_owner=True)
    sprint = f.MilestoneFactory.create(project=project, owner=user)
    f.PointsFactory.create(project=project, value=None)
    us = f.UserStoryFactory.create(project=project, owner=user)

    url = reverse("milestones-detail", args=[sprint.pk])

    form_data = {
        "name": "test",
        "user_stories": [UserStorySerializer(us).data]
    }

    client.login(user)
    response = client.json.patch(url, json.dumps(form_data))
    assert response.status_code == 200
コード例 #7
0
def test_user_story_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()

    us_status1 = f.UserStoryStatusFactory.create(project=project1)
    us_status2 = f.UserStoryStatusFactory.create(project=project2)

    project1.default_us_status = us_status1
    project2.default_us_status = us_status2

    project1.save()
    project2.save()

    membership1 = f.MembershipFactory(project=project1,
                                      user=user1,
                                      role__project=project1,
                                      role__permissions=list(
                                          map(lambda x: x[0],
                                              MEMBERS_PERMISSIONS)))
    membership2 = f.MembershipFactory(project=project2,
                                      user=user1,
                                      role__project=project2,
                                      role__permissions=list(
                                          map(lambda x: x[0],
                                              MEMBERS_PERMISSIONS)))
    membership3 = f.MembershipFactory(project=project1,
                                      user=user2,
                                      role__project=project1,
                                      role__permissions=list(
                                          map(lambda x: x[0],
                                              MEMBERS_PERMISSIONS)))
    membership4 = f.MembershipFactory(project=project2,
                                      user=user3,
                                      role__project=project2,
                                      role__permissions=list(
                                          map(lambda x: x[0],
                                              MEMBERS_PERMISSIONS)))

    us = f.UserStoryFactory.create(project=project1)

    url = reverse('userstories-detail', kwargs={"pk": us.pk})

    # Test user with permissions in both projects
    client.login(user1)

    us_data = UserStorySerializer(us).data
    us_data["project"] = project2.id
    us_data = json.dumps(us_data)

    response = client.put(url, data=us_data, content_type="application/json")

    assert response.status_code == 200

    us.project = project1
    us.save()

    # Test user with permissions in only origin project
    client.login(user2)

    us_data = UserStorySerializer(us).data
    us_data["project"] = project2.id
    us_data = json.dumps(us_data)

    response = client.put(url, data=us_data, content_type="application/json")

    assert response.status_code == 403

    us.project = project1
    us.save()

    # Test user with permissions in only destionation project
    client.login(user3)

    us_data = UserStorySerializer(us).data
    us_data["project"] = project2.id
    us_data = json.dumps(us_data)

    response = client.put(url, data=us_data, content_type="application/json")

    assert response.status_code == 403

    us.project = project1
    us.save()

    # Test user without permissions in the projects
    client.login(user4)

    us_data = UserStorySerializer(us).data
    us_data["project"] = project2.id
    us_data = json.dumps(us_data)

    response = client.put(url, data=us_data, content_type="application/json")

    assert response.status_code == 403

    us.project = project1
    us.save()
コード例 #8
0
 def _search_user_stories(self, project, text):
     queryset = services.search_user_stories(project, text)
     serializer = UserStorySerializer(queryset, many=True)
     return serializer.data
コード例 #9
0
 def get_user_stories(self, obj):
     qs = obj.user_stories.all()
     qs = qs.prefetch_related("assigned_users")
     return UserStorySerializer(qs, many=True).data