Allow to resolve wikipages with references endpoint

remotes/origin/issue/4217/improving-mail-design
David Barragán Merino 2017-03-14 12:57:01 +01:00
parent 2ea75b1aee
commit 363c9432f5
3 changed files with 73 additions and 20 deletions

View File

@ -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)

View File

@ -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

View File

@ -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