Allow to resolve wikipages with references endpoint
parent
2ea75b1aee
commit
363c9432f5
|
@ -66,24 +66,34 @@ class ResolverViewSet(viewsets.ViewSet):
|
||||||
|
|
||||||
if data["ref"]:
|
if data["ref"]:
|
||||||
ref_found = False # No need to continue once one ref is found
|
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):
|
try:
|
||||||
epic = project.epics.filter(ref=data["ref"]).first()
|
value = int(data["ref"])
|
||||||
if epic:
|
|
||||||
result["epic"] = epic.pk
|
if user_has_perm(request.user, "view_epics", project):
|
||||||
ref_found = True
|
epic = project.epics.filter(ref=value).first()
|
||||||
if user_has_perm(request.user, "view_us", project):
|
if epic:
|
||||||
us = project.user_stories.filter(ref=data["ref"]).first()
|
result["epic"] = epic.pk
|
||||||
if us:
|
ref_found = True
|
||||||
result["us"] = us.pk
|
if ref_found is False and user_has_perm(request.user, "view_us", project):
|
||||||
ref_found = True
|
us = project.user_stories.filter(ref=value).first()
|
||||||
if ref_found is False and user_has_perm(request.user, "view_tasks", project):
|
if us:
|
||||||
task = project.tasks.filter(ref=data["ref"]).first()
|
result["us"] = us.pk
|
||||||
if task:
|
ref_found = True
|
||||||
result["task"] = task.pk
|
if ref_found is False and user_has_perm(request.user, "view_tasks", project):
|
||||||
ref_found = True
|
task = project.tasks.filter(ref=value).first()
|
||||||
if ref_found is False and user_has_perm(request.user, "view_issues", project):
|
if task:
|
||||||
issue = project.issues.filter(ref=data["ref"]).first()
|
result["task"] = task.pk
|
||||||
if issue:
|
ref_found = True
|
||||||
result["issue"] = issue.pk
|
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)
|
return response.Ok(result)
|
||||||
|
|
|
@ -28,8 +28,8 @@ class ResolverValidator(validators.Validator):
|
||||||
us = serializers.IntegerField(required=False)
|
us = serializers.IntegerField(required=False)
|
||||||
task = serializers.IntegerField(required=False)
|
task = serializers.IntegerField(required=False)
|
||||||
issue = serializers.IntegerField(required=False)
|
issue = serializers.IntegerField(required=False)
|
||||||
ref = serializers.IntegerField(required=False)
|
|
||||||
wikipage = serializers.CharField(max_length=512, required=False)
|
wikipage = serializers.CharField(max_length=512, required=False)
|
||||||
|
ref = serializers.CharField(max_length=512, required=False)
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
if "ref" in 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")
|
raise ValidationError("'task' param is incompatible with 'ref' in the same request")
|
||||||
if "issue" in attrs:
|
if "issue" in attrs:
|
||||||
raise ValidationError("'issue' param is incompatible with 'ref' in the same request")
|
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
|
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,
|
response = client.json.get("{}?project={}&ref={}&milestone={}".format(url, project.slug, us.ref,
|
||||||
milestone.slug))
|
milestone.slug))
|
||||||
assert response.status_code == 200
|
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