added content structure to the circle api fields

This commit is contained in:
Lorenz Padberg 2022-05-25 15:40:54 +02:00
parent be99631c9a
commit ba81ce2215
2 changed files with 76 additions and 1 deletions

View File

@ -9,6 +9,7 @@ from wagtail.api import APIField
from vbv_lernwelt.learnpath.models_competences import * from vbv_lernwelt.learnpath.models_competences import *
from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock
from grapple.helpers import register_query_field from grapple.helpers import register_query_field
from collections import OrderedDict
import graphene import graphene
from grapple.models import ( from grapple.models import (
@ -100,9 +101,35 @@ class Circle(Page, Orderable):
api_fields = [ api_fields = [
APIField('title'), APIField('title'),
APIField('description'), APIField('description'),
APIField('learning_sequences'), APIField('topic'),
APIField('content_structure'),
] ]
@property
def content_structure(self):
learning_sequences = LearningSequence.objects.filter(circle_id=self.id).values()
learning_packages = LearningPackage.objects.filter(learning_sequence__circle_id=self.id).values()
learning_units = LearningUnit.objects.filter(learning_package__learning_sequence__circle_id=self.id).values('learning_package_id', 'title')
content = OrderedDict()
content['learning_sequences'] = []
for learning_sequence in learning_sequences:
this_learning_packages = []
related_learning_packages = [lp for lp in learning_packages if lp['learning_sequence_id'] == learning_sequence['id']]
for learning_package in related_learning_packages:
related_learning_units = [lu for lu in learning_units if
lu['learning_package_id'] == learning_package['id']]
this_learning_units = [learning_unit for learning_unit in related_learning_units]
learning_package['learning_units'] = this_learning_units
this_learning_packages.append(learning_package)
learning_sequence['learning_packages'] = this_learning_packages
content['learning_sequences'].append(learning_sequence)
return content
def full_clean(self, *args, **kwargs): def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True)) self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True))
@ -149,6 +176,7 @@ class LearningSequence(Orderable):
] ]
class Meta: class Meta:
verbose_name = "Learning Sequence" verbose_name = "Learning Sequence"

View File

@ -0,0 +1,47 @@
from django.test import TestCase
from rest_framework.test import APITestCase
from vbv_lernwelt.core.admin import User
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.learnpath.models import LearningPath, Circle
from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path
from vbv_lernwelt.learnpath.tests.test_create_default_learning_path import create_locales_for_wagtail
class TestRetrieveLearingPathContents(APITestCase):
@classmethod
def setUpClass(cls) -> None:
super(TestRetrieveLearingPathContents, cls).setUpClass()
create_locales_for_wagtail()
create_default_learning_path()
create_default_users()
def setUp(self) -> None:
qs = LearningPath.objects.filter(title="Versicherungsvermittler/in")
self.credentials = {
'username': 'admin',
'password': 'admin'}
user = User.objects.get(username='admin')
self.client.force_authenticate(user=user)
self.client.post('/login/', self.credentials, follow=True)
def test_get_circle(self):
circle = Circle.objects.get(slug='analyse')
response = self.client.get(f'/wagtailapi/v2/pages/{circle.id}/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['title'], 'Analyse')
def test_get_circle_has_learning_sequences(self):
circle = Circle.objects.get(slug='analyse')
response = self.client.get(f'/wagtailapi/v2/pages/{circle.id}/')
self.assertTrue(len(response.data['learning_sequences']) > 2)
self.assertEqual(response.data['learning_sequences'][0]['title'], 'Starten')
def test_get_circle_has_learning_sequences_learningpackages(self):
circle = Circle.objects.get(slug='analyse')
response = self.client.get(f'/wagtailapi/v2/pages/{circle.id}/')
self.assertTrue(len(response.data['learning_sequences'][0]['learnging_packages']) > 1)
self.assertTrue(response.data['learning_sequences'][0]['learnging_packages'][0]['title'])