added content structure to the circle api fields
This commit is contained in:
parent
be99631c9a
commit
ba81ce2215
|
|
@ -9,6 +9,7 @@ from wagtail.api import APIField
|
|||
from vbv_lernwelt.learnpath.models_competences import *
|
||||
from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock
|
||||
from grapple.helpers import register_query_field
|
||||
from collections import OrderedDict
|
||||
import graphene
|
||||
|
||||
from grapple.models import (
|
||||
|
|
@ -100,9 +101,35 @@ class Circle(Page, Orderable):
|
|||
api_fields = [
|
||||
APIField('title'),
|
||||
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):
|
||||
self.slug = find_available_slug(Circle, slugify(self.title, allow_unicode=True))
|
||||
|
|
@ -149,6 +176,7 @@ class LearningSequence(Orderable):
|
|||
]
|
||||
|
||||
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Learning Sequence"
|
||||
|
||||
|
|
|
|||
|
|
@ -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'])
|
||||
Loading…
Reference in New Issue