Skip to content

Commit 9b9565b

Browse files
del9rafyliu
authored andcommitted
feat: add endpoints: project_url
1 parent 60fe94e commit 9b9565b

4 files changed

Lines changed: 66 additions & 0 deletions

File tree

app/core/api/serializers.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from core.models import ProgramArea
1616
from core.models import Project
1717
from core.models import ProjectStatus
18+
from core.models import ProjectUrl
1819
from core.models import Referrer
1920
from core.models import ReferrerType
2021
from core.models import Sdg
@@ -480,3 +481,17 @@ class Meta:
480481
"contact_email",
481482
)
482483
read_only_fields = ("uuid", "created_at", "updated_at")
484+
485+
486+
class ProjectUrlSerializer(serializers.ModelSerializer):
487+
class Meta:
488+
model = ProjectUrl
489+
fields = (
490+
"uuid",
491+
"project",
492+
"url_type",
493+
"name",
494+
"external_id",
495+
"url",
496+
)
497+
read_only_fields = ("uuid", "created_at", "updated_at")

app/core/api/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from .views import PracticeAreaViewSet
1515
from .views import ProgramAreaViewSet
1616
from .views import ProjectStatusViewSet
17+
from .views import ProjectUrlViewSet
1718
from .views import ProjectViewSet
1819
from .views import ReferrerTypeViewSet
1920
from .views import ReferrerViewSet
@@ -58,6 +59,7 @@
5859
)
5960
router.register(r"check-types", CheckTypeViewSet, basename="check-type")
6061
router.register(r"project-statuses", ProjectStatusViewSet, basename="project-status")
62+
router.register(r"project-urls", ProjectUrlViewSet, basename="project-url")
6163
router.register(r"soc-majors", SocMajorViewSet, basename="soc-major")
6264
router.register(r"soc-minors", SocMinorViewSet, basename="soc-minor")
6365
router.register(r"url-types", UrlTypeViewSet, basename="url-type")

app/core/api/views.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from ..models import ProgramArea
2626
from ..models import Project
2727
from ..models import ProjectStatus
28+
from ..models import ProjectUrl
2829
from ..models import Referrer
2930
from ..models import ReferrerType
3031
from ..models import Sdg
@@ -50,6 +51,7 @@
5051
from .serializers import ProgramAreaSerializer
5152
from .serializers import ProjectSerializer
5253
from .serializers import ProjectStatusSerializer
54+
from .serializers import ProjectUrlSerializer
5355
from .serializers import ReferrerSerializer
5456
from .serializers import ReferrerTypeSerializer
5557
from .serializers import SdgSerializer
@@ -502,3 +504,17 @@ class ReferrerViewSet(viewsets.ModelViewSet):
502504
permission_classes = [IsAuthenticated]
503505
queryset = Referrer.objects.all()
504506
serializer_class = ReferrerSerializer
507+
508+
509+
@extend_schema_view(
510+
list=extend_schema(description="Return a list of all the project urls"),
511+
create=extend_schema(description="Create a new project url"),
512+
retrieve=extend_schema(description="Return the details of a project url"),
513+
destroy=extend_schema(description="Delete a project url"),
514+
update=extend_schema(description="Update a project url"),
515+
partial_update=extend_schema(description="Patch a project url"),
516+
)
517+
class ProjectUrlViewSet(viewsets.ModelViewSet):
518+
permission_classes = [IsAuthenticated]
519+
queryset = ProjectUrl.objects.all()
520+
serializer_class = ProjectUrlSerializer

app/core/tests/test_api.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
AFFILIATION_URL = reverse("affiliation-list")
3535
CHECK_TYPE_URL = reverse("check-type-list")
3636
PROJECT_STATUSES_URL = reverse("project-status-list")
37+
PROJECT_URLS_URL = reverse("project-url-list")
3738
SOC_MAJOR_URL = reverse("soc-major-list")
3839
SOC_MINORS_URL = reverse("soc-minor-list")
3940
URL_TYPE_URL = reverse("url-type-list")
@@ -566,3 +567,35 @@ def test_assign_referrer_to_user(auth_client, user, referrer):
566567

567568
assert res.status_code == status.HTTP_200_OK
568569
assert str(res.data["referrer"]) == str(referrer.uuid)
570+
571+
572+
def test_create_project_url(auth_client, project, url_type):
573+
payload = {
574+
# "project": project.pk,
575+
# "url_type": url_type.pk,
576+
"name": "This is a test project url",
577+
"external_id": "This is a test external id",
578+
"url": "https://test.com",
579+
}
580+
res = auth_client.post(PROJECT_URLS_URL, payload)
581+
assert res.status_code == status.HTTP_201_CREATED
582+
# assert res.data["project"] == payload["project"]
583+
# assert res.data["url_type"] == payload["url_type"]
584+
assert res.data["name"] == payload["name"]
585+
assert res.data["external_id"] == payload["external_id"]
586+
assert res.data["url"] == payload["url"]
587+
588+
589+
def test_project_url_project_relationship(auth_client, project_url, project):
590+
res = auth_client.patch(
591+
reverse("project-url-detail", kwargs={"pk": project_url.pk}),
592+
{"project": project.pk},
593+
)
594+
assert res.status_code == status.HTTP_200_OK
595+
res = auth_client.get(PROJECT_URLS_URL)
596+
project.exists = False
597+
for item in res.data:
598+
if item["project"] == project.pk:
599+
project_exists = True
600+
break
601+
assert project_exists is True

0 commit comments

Comments
 (0)