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]
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
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']
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
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)]
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
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()
def _search_user_stories(self, project, text): queryset = services.search_user_stories(project, text) serializer = UserStorySerializer(queryset, many=True) return serializer.data
def get_user_stories(self, obj): qs = obj.user_stories.all() qs = qs.prefetch_related("assigned_users") return UserStorySerializer(qs, many=True).data