Adding unset_related_userstory end point to epics API
parent
9bba8efde9
commit
0e6daf09f6
|
@ -276,6 +276,31 @@ class EpicViewSet(OCCResourceMixin, VotedResourceMixin, HistoryResourceMixin,
|
||||||
|
|
||||||
return response.BadRequest(validator.errors)
|
return response.BadRequest(validator.errors)
|
||||||
|
|
||||||
|
@detail_route(methods=["POST"])
|
||||||
|
def unset_related_userstory(self, request, **kwargs):
|
||||||
|
validator = validators.UnsetRelatedUserStoryValidator(data=request.DATA)
|
||||||
|
if validator.is_valid():
|
||||||
|
data = validator.data
|
||||||
|
epic = self.get_object()
|
||||||
|
project = epic.project
|
||||||
|
user_story = UserStory.objects.get(id=data["us_id"])
|
||||||
|
self.check_permissions(request, "update", epic)
|
||||||
|
|
||||||
|
if project.blocked_code is not None:
|
||||||
|
raise exc.Blocked(_("Blocked element"))
|
||||||
|
|
||||||
|
related_us = get_object_or_404(
|
||||||
|
models.RelatedUserStory,
|
||||||
|
epic=epic,
|
||||||
|
user_story=user_story
|
||||||
|
)
|
||||||
|
related_us.delete()
|
||||||
|
epic = self.get_queryset().get(id=epic.id)
|
||||||
|
epic_serialized = self.get_serializer_class()(epic)
|
||||||
|
return response.Ok(epic_serialized.data)
|
||||||
|
|
||||||
|
return response.BadRequest(validator.errors)
|
||||||
|
|
||||||
|
|
||||||
class EpicVotersViewSet(VotersViewSetMixin, ModelListViewSet):
|
class EpicVotersViewSet(VotersViewSetMixin, ModelListViewSet):
|
||||||
permission_classes = (permissions.EpicVotersPermission,)
|
permission_classes = (permissions.EpicVotersPermission,)
|
||||||
|
|
|
@ -63,3 +63,7 @@ class CrateRelatedUserStoriesBulkValidator(ProjectExistsValidator, EpicExistsVal
|
||||||
class SetRelatedUserStoryValidator(UserStoryExistsValidator, validators.Validator):
|
class SetRelatedUserStoryValidator(UserStoryExistsValidator, validators.Validator):
|
||||||
us_id = serializers.IntegerField()
|
us_id = serializers.IntegerField()
|
||||||
order = serializers.IntegerField(required=False, default=10000)
|
order = serializers.IntegerField(required=False, default=10000)
|
||||||
|
|
||||||
|
|
||||||
|
class UnsetRelatedUserStoryValidator(UserStoryExistsValidator, validators.Validator):
|
||||||
|
us_id = serializers.IntegerField()
|
||||||
|
|
|
@ -159,6 +159,11 @@ def data():
|
||||||
m.private_us2 = f.UserStoryFactory(project=m.private_project2)
|
m.private_us2 = f.UserStoryFactory(project=m.private_project2)
|
||||||
m.blocked_us = f.UserStoryFactory(project=m.blocked_project)
|
m.blocked_us = f.UserStoryFactory(project=m.blocked_project)
|
||||||
|
|
||||||
|
m.public_related_us = f.RelatedUserStory(epic=m.public_epic, user_story=m.public_us)
|
||||||
|
m.private_related_us1 = f.RelatedUserStory(epic=m.private_epic1, user_story=m.private_us1)
|
||||||
|
m.private_related_us2 = f.RelatedUserStory(epic=m.private_epic2, user_story=m.private_us2)
|
||||||
|
m.blocked_related_us = f.RelatedUserStory(epic=m.blocked_epic, user_story=m.blocked_us)
|
||||||
|
|
||||||
m.public_project.default_epic_status = m.public_epic.status
|
m.public_project.default_epic_status = m.public_epic.status
|
||||||
m.public_project.save()
|
m.public_project.save()
|
||||||
m.private_project1.default_epic_status = m.private_epic1.status
|
m.private_project1.default_epic_status = m.private_epic1.status
|
||||||
|
@ -740,6 +745,43 @@ def test_set_related_user_story(client, data):
|
||||||
assert results == [404, 404, 404, 451, 451]
|
assert results == [404, 404, 404, 451, 451]
|
||||||
|
|
||||||
|
|
||||||
|
def test_unset_related_user_story(client, data):
|
||||||
|
users = [
|
||||||
|
None,
|
||||||
|
data.registered_user,
|
||||||
|
data.project_member_without_perms,
|
||||||
|
data.project_member_with_perms
|
||||||
|
]
|
||||||
|
|
||||||
|
url = reverse('epics-unset-related-userstory', kwargs={"pk": data.public_epic.pk})
|
||||||
|
edit_data = json.dumps({
|
||||||
|
"us_id": data.public_related_us.user_story.pk,
|
||||||
|
})
|
||||||
|
results = helper_test_http_method(client, 'post', url, edit_data, users)
|
||||||
|
assert results == [401, 403, 403, 200]
|
||||||
|
|
||||||
|
url = reverse('epics-set-related-userstory', kwargs={"pk": data.private_epic1.pk})
|
||||||
|
edit_data = json.dumps({
|
||||||
|
"us_id": data.private_related_us1.user_story.pk,
|
||||||
|
})
|
||||||
|
results = helper_test_http_method(client, 'post', url, edit_data, users)
|
||||||
|
assert results == [401, 403, 403, 200]
|
||||||
|
|
||||||
|
url = reverse('epics-set-related-userstory', kwargs={"pk": data.private_epic2.pk})
|
||||||
|
edit_data = json.dumps({
|
||||||
|
"us_id": data.private_related_us2.user_story.pk,
|
||||||
|
})
|
||||||
|
results = helper_test_http_method(client, 'post', url, edit_data, users)
|
||||||
|
assert results == [404, 404, 404, 200]
|
||||||
|
|
||||||
|
url = reverse('epics-set-related-userstory', kwargs={"pk": data.blocked_epic.pk})
|
||||||
|
edit_data = json.dumps({
|
||||||
|
"us_id": data.blocked_related_us.user_story.pk,
|
||||||
|
})
|
||||||
|
results = helper_test_http_method(client, 'post', url, edit_data, users)
|
||||||
|
assert results == [404, 404, 404, 451]
|
||||||
|
|
||||||
|
|
||||||
def test_epic_action_upvote(client, data):
|
def test_epic_action_upvote(client, data):
|
||||||
public_url = reverse('epics-upvote', kwargs={"pk": data.public_epic.pk})
|
public_url = reverse('epics-upvote', kwargs={"pk": data.public_epic.pk})
|
||||||
private_url1 = reverse('epics-upvote', kwargs={"pk": data.private_epic1.pk})
|
private_url1 = reverse('epics-upvote', kwargs={"pk": data.private_epic1.pk})
|
||||||
|
|
|
@ -133,7 +133,6 @@ def test_set_related_userstory_existing(client):
|
||||||
us = f.UserStoryFactory.create()
|
us = f.UserStoryFactory.create()
|
||||||
related_us = f.RelatedUserStory.create(epic=epic, user_story=us, order=55)
|
related_us = f.RelatedUserStory.create(epic=epic, user_story=us, order=55)
|
||||||
f.MembershipFactory.create(project=epic.project, user=user, is_admin=True)
|
f.MembershipFactory.create(project=epic.project, user=user, is_admin=True)
|
||||||
f.MembershipFactory.create(project=us.project, user=user, is_admin=True)
|
|
||||||
|
|
||||||
url = reverse('epics-set-related-userstory', kwargs={"pk": epic.pk})
|
url = reverse('epics-set-related-userstory', kwargs={"pk": epic.pk})
|
||||||
|
|
||||||
|
@ -148,3 +147,24 @@ def test_set_related_userstory_existing(client):
|
||||||
|
|
||||||
related_us = models.RelatedUserStory.objects.get(id=related_us.id)
|
related_us = models.RelatedUserStory.objects.get(id=related_us.id)
|
||||||
assert related_us.order == 77
|
assert related_us.order == 77
|
||||||
|
|
||||||
|
|
||||||
|
def test_unset_related_userstory(client):
|
||||||
|
user = f.UserFactory.create()
|
||||||
|
epic = f.EpicFactory.create()
|
||||||
|
us = f.UserStoryFactory.create()
|
||||||
|
related_us = f.RelatedUserStory.create(epic=epic, user_story=us, order=55)
|
||||||
|
f.MembershipFactory.create(project=epic.project, user=user, is_admin=True)
|
||||||
|
|
||||||
|
url = reverse('epics-unset-related-userstory', kwargs={"pk": epic.pk})
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"us_id": us.id
|
||||||
|
}
|
||||||
|
client.login(user)
|
||||||
|
response = client.json.post(url, json.dumps(data))
|
||||||
|
print(response.data)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.data['user_stories_counts'] == {'opened': 0, 'closed': 0}
|
||||||
|
|
||||||
|
assert not models.RelatedUserStory.objects.filter(id=related_us.id).exists()
|
||||||
|
|
Loading…
Reference in New Issue