From 6825702d087dddda79bd241c4a3034c8d8401e2c Mon Sep 17 00:00:00 2001 From: Jillian Vogel Date: Mon, 9 Oct 2023 14:46:47 +1030 Subject: [PATCH] feat: adds endpoint for downloading the taxonomy templates --- .../rest_api/v1/tests/test_views.py | 31 +++++++++++++++++++ .../content_tagging/rest_api/v1/urls.py | 10 +++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/openedx/core/djangoapps/content_tagging/rest_api/v1/tests/test_views.py b/openedx/core/djangoapps/content_tagging/rest_api/v1/tests/test_views.py index 8e57c1546ff0..8cb4b94fd227 100644 --- a/openedx/core/djangoapps/content_tagging/rest_api/v1/tests/test_views.py +++ b/openedx/core/djangoapps/content_tagging/rest_api/v1/tests/test_views.py @@ -25,6 +25,7 @@ TAXONOMY_ORG_LIST_URL = "/api/content_tagging/v1/taxonomies/" TAXONOMY_ORG_DETAIL_URL = "/api/content_tagging/v1/taxonomies/{pk}/" OBJECT_TAG_UPDATE_URL = "/api/content_tagging/v1/object_tags/{object_id}/?taxonomy={taxonomy_id}" +TAXONOMY_TEMPLATE_URL = "/api/content_tagging/v1/taxonomies/import/{filename}" def check_taxonomy( @@ -844,3 +845,33 @@ def test_tag_unauthorized(self, objectid_attr): response = self.client.put(url, {"tags": ["Tag 1"]}, format="json") assert response.status_code == status.HTTP_403_FORBIDDEN + + +@skip_unless_cms +@ddt.ddt +class TestDownloadTemplateView(APITestCase): + """ + Tests the taxonomy template downloads. + """ + @ddt.data( + ("template.csv", "text/csv"), + ("template.json", "application/json"), + ) + @ddt.unpack + def test_download(self, filename, content_type): + url = TAXONOMY_TEMPLATE_URL.format(filename=filename) + response = self.client.get(url) + assert response.status_code == status.HTTP_200_OK + assert response.headers['Content-Type'] == content_type + assert response.headers['Content-Disposition'] == f'attachment; filename="{filename}"' + assert int(response.headers['Content-Length']) > 0 + + def test_download_not_found(self): + url = TAXONOMY_TEMPLATE_URL.format(filename="template.txt") + response = self.client.get(url) + assert response.status_code == status.HTTP_404_NOT_FOUND + + def test_download_method_not_allowed(self): + url = TAXONOMY_TEMPLATE_URL.format(filename="template.txt") + response = self.client.post(url) + assert response.status_code == status.HTTP_405_METHOD_NOT_ALLOWED diff --git a/openedx/core/djangoapps/content_tagging/rest_api/v1/urls.py b/openedx/core/djangoapps/content_tagging/rest_api/v1/urls.py index 5c0bceb38ee4..d6fc047e5288 100644 --- a/openedx/core/djangoapps/content_tagging/rest_api/v1/urls.py +++ b/openedx/core/djangoapps/content_tagging/rest_api/v1/urls.py @@ -6,7 +6,10 @@ from django.urls.conf import path, include -from openedx_tagging.core.tagging.rest_api.v1 import views as oel_tagging_views +from openedx_tagging.core.tagging.rest_api.v1 import ( + views as oel_tagging_views, + views_import as oel_tagging_views_import, +) from . import views @@ -15,5 +18,10 @@ router.register("object_tags", oel_tagging_views.ObjectTagView, basename="object_tag") urlpatterns = [ + path( + "taxonomies/import/template.", + oel_tagging_views_import.TemplateView.as_view(), + name="taxonomy-import-template", + ), path('', include(router.urls)) ]