Allow to resolve wikipages with references endpoint
parent
2ea75b1aee
commit
363c9432f5
|
@ -66,24 +66,34 @@ class ResolverViewSet(viewsets.ViewSet):
|
|||
|
||||
if data["ref"]:
|
||||
ref_found = False # No need to continue once one ref is found
|
||||
if ref_found is False and user_has_perm(request.user, "view_epics", project):
|
||||
epic = project.epics.filter(ref=data["ref"]).first()
|
||||
if epic:
|
||||
result["epic"] = epic.pk
|
||||
ref_found = True
|
||||
if user_has_perm(request.user, "view_us", project):
|
||||
us = project.user_stories.filter(ref=data["ref"]).first()
|
||||
if us:
|
||||
result["us"] = us.pk
|
||||
ref_found = True
|
||||
if ref_found is False and user_has_perm(request.user, "view_tasks", project):
|
||||
task = project.tasks.filter(ref=data["ref"]).first()
|
||||
if task:
|
||||
result["task"] = task.pk
|
||||
ref_found = True
|
||||
if ref_found is False and user_has_perm(request.user, "view_issues", project):
|
||||
issue = project.issues.filter(ref=data["ref"]).first()
|
||||
if issue:
|
||||
result["issue"] = issue.pk
|
||||
try:
|
||||
value = int(data["ref"])
|
||||
|
||||
if user_has_perm(request.user, "view_epics", project):
|
||||
epic = project.epics.filter(ref=value).first()
|
||||
if epic:
|
||||
result["epic"] = epic.pk
|
||||
ref_found = True
|
||||
if ref_found is False and user_has_perm(request.user, "view_us", project):
|
||||
us = project.user_stories.filter(ref=value).first()
|
||||
if us:
|
||||
result["us"] = us.pk
|
||||
ref_found = True
|
||||
if ref_found is False and user_has_perm(request.user, "view_tasks", project):
|
||||
task = project.tasks.filter(ref=value).first()
|
||||
if task:
|
||||
result["task"] = task.pk
|
||||
ref_found = True
|
||||
if ref_found is False and user_has_perm(request.user, "view_issues", project):
|
||||
issue = project.issues.filter(ref=value).first()
|
||||
if issue:
|
||||
result["issue"] = issue.pk
|
||||
except:
|
||||
value = data["ref"]
|
||||
|
||||
if user_has_perm(request.user, "view_wiki_pages", project):
|
||||
wiki_page = project.wiki_pages.filter(slug=value).first()
|
||||
if wiki_page:
|
||||
result["wikipage"] = wiki_page.pk
|
||||
|
||||
return response.Ok(result)
|
||||
|
|
|
@ -28,8 +28,8 @@ class ResolverValidator(validators.Validator):
|
|||
us = serializers.IntegerField(required=False)
|
||||
task = serializers.IntegerField(required=False)
|
||||
issue = serializers.IntegerField(required=False)
|
||||
ref = serializers.IntegerField(required=False)
|
||||
wikipage = serializers.CharField(max_length=512, required=False)
|
||||
ref = serializers.CharField(max_length=512, required=False)
|
||||
|
||||
def validate(self, attrs):
|
||||
if "ref" in attrs:
|
||||
|
@ -41,5 +41,7 @@ class ResolverValidator(validators.Validator):
|
|||
raise ValidationError("'task' param is incompatible with 'ref' in the same request")
|
||||
if "issue" in attrs:
|
||||
raise ValidationError("'issue' param is incompatible with 'ref' in the same request")
|
||||
if "wikipage" in attrs:
|
||||
raise ValidationError("'wikipage' param is incompatible with 'ref' in the same request")
|
||||
|
||||
return attrs
|
||||
|
|
|
@ -191,3 +191,44 @@ def test_params_validation_in_api_request(client, refmodels):
|
|||
response = client.json.get("{}?project={}&ref={}&milestone={}".format(url, project.slug, us.ref,
|
||||
milestone.slug))
|
||||
assert response.status_code == 200
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_by_ref_calls_in_api_request(client, refmodels):
|
||||
refmodels.Reference.objects.all().delete()
|
||||
|
||||
user = factories.UserFactory.create()
|
||||
project = factories.ProjectFactory.create(owner=user)
|
||||
seqname1 = refmodels.make_sequence_name(project)
|
||||
role = factories.RoleFactory.create(project=project)
|
||||
factories.MembershipFactory.create(project=project, user=user, role=role, is_admin=True)
|
||||
|
||||
epic = factories.EpicFactory.create(project=project)
|
||||
milestone = factories.MilestoneFactory.create(project=project)
|
||||
us = factories.UserStoryFactory.create(project=project)
|
||||
task = factories.TaskFactory.create(project=project)
|
||||
issue = factories.IssueFactory.create(project=project)
|
||||
wiki_page = factories.WikiPageFactory.create(project=project)
|
||||
|
||||
client.login(user)
|
||||
|
||||
url = reverse("resolver-list")
|
||||
response = client.json.get("{}?project={}&ref={}".format(url, project.slug, epic.ref))
|
||||
assert response.status_code == 200
|
||||
assert response.data["epic"] == epic.id
|
||||
|
||||
response = client.json.get("{}?project={}&ref={}".format(url, project.slug, us.ref))
|
||||
assert response.status_code == 200
|
||||
assert response.data["us"] == us.id
|
||||
|
||||
response = client.json.get("{}?project={}&ref={}".format(url, project.slug, task.ref))
|
||||
assert response.status_code == 200
|
||||
assert response.data["task"] == task.id
|
||||
|
||||
response = client.json.get("{}?project={}&ref={}".format(url, project.slug, issue.ref))
|
||||
assert response.status_code == 200
|
||||
assert response.data["issue"] == issue.id
|
||||
|
||||
response = client.json.get("{}?project={}&ref={}".format(url, project.slug, wiki_page.slug))
|
||||
assert response.status_code == 200
|
||||
assert response.data["wikipage"] == wiki_page.id
|
||||
|
|
Loading…
Reference in New Issue