From 736ecb2449bd5edb9568185e3cb9393d184c0b67 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Mon, 13 Jun 2022 14:43:57 +0200 Subject: [PATCH] Refactor client can complete learning contents --- client/src/views/CircleView.vue | 9 ++++--- .../vbv_lernwelt/completion/tests/test_api.py | 24 ++++++++++++++++--- server/vbv_lernwelt/completion/urls.py | 2 +- server/vbv_lernwelt/completion/views.py | 9 ++++--- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/client/src/views/CircleView.vue b/client/src/views/CircleView.vue index 55154b55..752d2c2b 100644 --- a/client/src/views/CircleView.vue +++ b/client/src/views/CircleView.vue @@ -31,7 +31,11 @@ export default { log.debug('CircleView mounted', this.circleSlug); itGet(`/learnpath/api/circle/${this.circleSlug}/`).then((data) => { this.circleData = data; - itGet(`/api/completion/user_circle_completion/${this.circleData.translation_key}/`).then((completionData) => { + itGet(`/api/completion/circle/${this.circleData.translation_key}/`).then((completionData) => { + let completedLearningContents = {}; + if (completionData?.json_data?.completed_learning_contents) { + completedLearningContents = completionData.json_data.completed_learning_contents; + } // aggregate wagtail data into LearningSequence > LearningUnit > LearningPackage hierarchy let learningSequence = null; @@ -54,7 +58,7 @@ export default { learningUnit = Object.assign(child, { learningContents: [] }); } else { // must be a LearningContent - if (child.translation_key in completionData.json_data.completed_learning_contents) { + if (child.translation_key in completedLearningContents) { child.completed = true; } learningUnit.learningContents.push(child); @@ -80,7 +84,6 @@ export default { log.debug(this.learningSequences); }); - }); } diff --git a/server/vbv_lernwelt/completion/tests/test_api.py b/server/vbv_lernwelt/completion/tests/test_api.py index 9ad24545..e257c11b 100644 --- a/server/vbv_lernwelt/completion/tests/test_api.py +++ b/server/vbv_lernwelt/completion/tests/test_api.py @@ -30,8 +30,26 @@ class CompletionApiTestCase(APITestCase): 'learning_content_key': learning_content_key }) response_json = response.json() - print(json.dumps(response.json())) + print(json.dumps(response.json(), indent=2)) - self.assertEqual(response.status_code, 201) + self.assertEqual(response.status_code, 200) self.assertEqual(response_json['circle_key'], circle_key) - self.assertEqual(response_json['json_data']['completed_learning_contents'][learning_content_key]['learning_content_key'], learning_content_key) + self.assertEqual( + response_json['json_data']['completed_learning_contents'][learning_content_key]['learning_content_key'], + learning_content_key + ) + + # test getting the circle data + response = self.client.get(f'/api/completion/user_circle_completion/{circle_key}/') + response_json = response.json() + print(json.dumps(response.json(), indent=2)) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response_json['circle_key'], circle_key) + self.assertEqual( + response_json['json_data']['completed_learning_contents'][learning_content_key]['learning_content_key'], + learning_content_key + ) + + + diff --git a/server/vbv_lernwelt/completion/urls.py b/server/vbv_lernwelt/completion/urls.py index 8c172be3..51d373c5 100644 --- a/server/vbv_lernwelt/completion/urls.py +++ b/server/vbv_lernwelt/completion/urls.py @@ -3,6 +3,6 @@ from django.urls import path from vbv_lernwelt.completion.views import complete_learning_content, request_user_circle_completion urlpatterns = [ - path(r"user_circle_completion//", request_user_circle_completion, name="request_user_circle_completion"), + path(r"circle//", request_user_circle_completion, name="request_user_circle_completion"), path(r"complete_learning_content/", complete_learning_content, name="complete_learning_content"), ] diff --git a/server/vbv_lernwelt/completion/views.py b/server/vbv_lernwelt/completion/views.py index 37fb5af4..ed686656 100644 --- a/server/vbv_lernwelt/completion/views.py +++ b/server/vbv_lernwelt/completion/views.py @@ -13,12 +13,15 @@ logger = structlog.get_logger(__name__) @api_view(['GET']) def request_user_circle_completion(request, circle_key): - ucc = UserCircleCompletion.objects.get( + ucc = UserCircleCompletion.objects.filter( user=request.user, circle_key=circle_key, ) - return Response(status=200, data=UserCircleCompletionSerializer(ucc).data) + if ucc.count() > 0: + return Response(status=200, data=UserCircleCompletionSerializer(ucc.first()).data) + else: + return Response(status=200, data={}) @api_view(['POST']) @@ -55,4 +58,4 @@ def complete_learning_content(request): user_id=request.user.id, ) - return Response(status=201, data=UserCircleCompletionSerializer(ucc).data) + return Response(status=200, data=UserCircleCompletionSerializer(ucc).data)