Fix python tests

This commit is contained in:
Daniel Egger 2022-09-28 15:34:07 +02:00
parent 8ab17f9370
commit e230c0b8e5
14 changed files with 185 additions and 309 deletions

View File

@ -1,100 +0,0 @@
import uuid
import wagtail_factories
from vbv_lernwelt.competence.content_blocks import MediaContentCollection, AnchorBlock, LinkBlock, \
CrossReferenceBlock
from vbv_lernwelt.competence.models import LibraryDocument, MediaLibraryPage, MediaCategoryPage
class LibraryDocumentFactory(wagtail_factories.DocumentFactory):
link_display_text = 'Dokument herunter laden'
thumbnail = 'https://d9-wret.s3.us-west-2.amazonaws.com/assets/palladium/production/s3fs-public/thumbnails/image/file.jpg'
class Meta:
model = LibraryDocument
class MediaLibraryPageFactory(wagtail_factories.PageFactory):
title = 'Mediathek'
class Meta:
model = MediaLibraryPage
class AnchorBlockFactory(wagtail_factories.StructBlockFactory):
class Meta:
model = AnchorBlock
class LinkBlockFactory(wagtail_factories.StructBlockFactory):
title = 'Interesting link'
description = 'This link is really interesting...'
url = 'https://www.vbv.ch/'
class Meta:
model = LinkBlock
class CrossReferenceBlockFactory(wagtail_factories.StructBlockFactory):
class Meta:
model = CrossReferenceBlock
class MediaContentCollectionFactory(wagtail_factories.StructBlockFactory):
title = 'Links'
contents = wagtail_factories.StreamFieldFactory({
'Links': LinkBlockFactory,
'Documents': LibraryDocumentFactory
})
class Meta:
model = MediaContentCollection
class MediaCategoryPageFactory(wagtail_factories.PageFactory):
title = 'Fahrzeug'
introduction_text = 'Das Auto ist für viele der grösste Stolz! Es birgt aber ...'
description_title = 'Das erwartet dich in diesem Handlungsfeld'
class Meta:
model = MediaCategoryPage
def create_media_content_link(link_block=None):
if link_block is None:
link_block = LinkBlockFactory()
return {
"id": str(uuid.uuid4()),
"type": "Links",
"value": dict(link_block.items())
}
def create_link_collection(links_dict=None):
return {
"id": str(uuid.uuid4()),
"type": "content_collection",
"value": {
"title": "Links",
"contents": [link_dict for link_dict in links_dict]
}
}
def create_document_collection(document_ids=None):
if document_ids is None:
document_ids = [d.id for d in LibraryDocument.objects.all()]
return {
"id": str(uuid.uuid4()),
"type": "content_collection",
"value": {
"title": "Lernmedien",
"contents": [{
"id": str(uuid.uuid4()),
"type": "Documents",
"value": doc_id
} for doc_id in document_ids]
}
}

View File

@ -0,0 +1,25 @@
from rest_framework.test import APITestCase
from vbv_lernwelt.competence.models import CompetenceProfilePage
from vbv_lernwelt.core.admin import User
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.course.creators.test_course import create_test_course
class CompetenceAPITestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
self.user = User.objects.get(username='student')
self.client.login(username='student', password='test')
def test_get_learnpathPage(self):
slug = 'test-lehrgang-competence'
competence_profile = CompetenceProfilePage.objects.get(slug=slug)
response = self.client.get(f'/api/course/page/{slug}/')
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(competence_profile.title, data['title'])
self.assertEqual('Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).', data['children'][1]['children'][0]['title'])

View File

@ -1,25 +0,0 @@
from django.test import TestCase
from wagtail.core.models import Collection
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.competence.create_default_documents import create_default_collections, create_default_documents
from vbv_lernwelt.competence.models import LibraryDocument
class TestCreateDefaultDocuments(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
def test_create_default_collections(self):
create_default_collections()
qs = Collection.objects.filter(name="Versicherungsvermittler/in")
self.assertTrue(qs.exists())
def test_create_default_documents(self):
create_default_collections()
create_default_documents()
qs = LibraryDocument.objects.all()
self.assertTrue(qs.exists())

View File

@ -1,29 +0,0 @@
from django.test import TestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory
from vbv_lernwelt.competence.create_default_competence import create_default_competence
from vbv_lernwelt.competence.models import MediaLibraryPage, MediaCategoryPage
class TestCreateDefaultDocuments(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
LearningPathFactory()
create_default_competence()
def test_create_default_competence(self):
self.assertEqual(MediaLibraryPage.objects.all().count(), 1)
self.assertEqual(MediaCategoryPage.objects.all().count(), 12)
def test_create_category_fahrzeug_contains_content(self):
fahrzeug = MediaCategoryPage.objects.get(title='Fahrzeug')

View File

@ -1,47 +0,0 @@
import json
from django.test import TestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.competence.models import MediaCategoryPage
from vbv_lernwelt.competence.tests.competence_factories import MediaContentCollectionFactory, MediaCategoryPageFactory, \
LinkBlockFactory, generate_default_content2, collection_body_dict
class TestMediaLibraryFactories(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
def test_content_collection_factory(self):
content_collection = MediaContentCollectionFactory()
self.assertEqual(content_collection.get('title'), 'Links')
self.assertEqual(content_collection.get('collection_type'), 'LearningMedia')
def test_link_block_factory(self):
link = LinkBlockFactory(title='MyLink')
self.assertEqual(link.get('description'), 'This link is really interesting...')
self.assertEqual(link.get('url'), 'www.example.com')
self.assertEqual(link.get('link_display_text'), 'Link öffnen')
self.assertEqual(link.get('title'), 'MyLink')
def test_category_contains_content_collection(self):
default_content = generate_default_content2()
default_content['body__content_collection__0__title'] = 'Spidf'
category = MediaCategoryPageFactory(**default_content)
print(category.body.raw_data)
self.assertNotEqual(category.body.raw_data, [])
def collection_via_dict_generation(self):
category = MediaCategoryPageFactory()
category.body = json.dumps(collection_body_dict())
category.save()
category_id = category.id
new_category = MediaCategoryPage.objects.get(id=category_id)
self.assertNotEqual(new_category.body, [])
self.assertNotEqual(new_category.body, [])

View File

@ -1,20 +1,31 @@
import json
import wagtail_factories
from django.conf import settings
from wagtail.models import Site
from vbv_lernwelt.competence.factories import CompetenceProfilePageFactory, CompetencePageFactory, \
PerformanceCriteriaFactory
from vbv_lernwelt.competence.models import CompetencePage
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.course.consts import COURSE_TEST_ID
from vbv_lernwelt.course.factories import CoursePageFactory
from vbv_lernwelt.course.models import CoursePage, CourseCategory
from vbv_lernwelt.course.models import CoursePage, CourseCategory, Course
from vbv_lernwelt.learnpath.models import LearningUnit
from vbv_lernwelt.learnpath.tests.learning_path_factories import CircleFactory, LearningSequenceFactory, \
LearningContentFactory, DocumentBlockFactory, LearningUnitFactory, TestBlockFactory, ExerciseBlockFactory, \
LearningPathFactory, TopicFactory, OnlineTrainingBlockFactory
from vbv_lernwelt.media_library.tests.media_library_factories import MediaLibraryPageFactory, \
create_document_collection, create_link_collection, create_media_content_link, LinkBlockFactory, \
MediaCategoryPageFactory
def create_test_course():
create_locales_for_wagtail()
create_test_course_with_categories()
create_test_learning_path()
create_test_competence_profile()
create_test_media_library()
def create_test_course_with_categories(apps=None, schema_editor=None):
@ -27,7 +38,7 @@ def create_test_course_with_categories(apps=None, schema_editor=None):
course, _ = Course.objects.get_or_create(
id=COURSE_TEST_ID,
title='Test Lerngang',
title='Test Lehrgang',
category_name='Handlungsfeld'
)
@ -164,3 +175,116 @@ def create_test_learning_path(user=None, skip_locales=True):
contents=[('document', DocumentBlockFactory())]
)
def create_test_competence_profile():
course = Course.objects.get(id=COURSE_TEST_ID)
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
competence_profile_page = CompetenceProfilePageFactory(
title='Kompetenzprofil',
parent=course_page,
)
competences = [{
'competence_id': 'X1',
'title': 'Weiterempfehlung für Neukunden generieren',
'items': [
'Verhandlungsgeschick',
'Überzeugtes Auftreten',
],
}, {
'competence_id': 'Y1',
'title': 'Wünsche, Ziele und Bedürfnisse der Kunden im Gespräch ermitteln',
'items': [
'Gesprächsführung',
'Fragetechniken',
'Kundenpsychologie',
]
}, {
'competence_id': 'Y2',
'title': 'Analyse des Kundenbedarfs und des Kundenbedürfnisses durchführen',
'items': [
'Fragetechniken',
'Visuelle Hilfsmittel / Visualisierungstechniken',
]
}]
for c in competences:
CompetencePageFactory(
parent=competence_profile_page,
competence_id=c['competence_id'],
title=c['title'],
items=[
('item', i) for i in c['items']
]
)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id='Y1'),
competence_id='Y1.3',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).',
learning_unit=LearningUnit.objects.get(slug='test-lehrgang-lp-circle-analyse-lu-fahrzeug'),
)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id='Y2'),
competence_id='Y2.1',
title='Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.',
learning_unit=LearningUnit.objects.get(slug='test-lehrgang-lp-circle-analyse-lu-fahrzeug'),
)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id='Y1'),
competence_id='Y1.3',
title='Innerhalb des Handlungsfelds «Reisen» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).',
learning_unit=LearningUnit.objects.get(slug='test-lehrgang-lp-circle-analyse-lu-reisen'),
)
def create_test_media_library():
course = Course.objects.get(id=COURSE_TEST_ID)
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
media_lib_page = MediaLibraryPageFactory(
title='Mediathek',
parent=course_page,
)
icons = ['icon-hf-fahrzeug', 'icon-hf-reisen', 'icon-hf-einkommenssicherung', ]
for idx, cat in enumerate(course.coursecategory_set.all()):
overview_icon = icons[(idx + 2) % len(icons)]
introduction_text = '''
Das Auto ist für viele der grösste Stolz! Es birgt aber auch ein grosses Gefahrenpotenzial.
Dabei geht es bei den heutigen Fahrzeugpreisen und Reparaturkosten rasch um namhafte Summen,
die der Fahrzeugbesitzer und die Fahrzeugbesitzerin in einem grösseren Schadenfall oft nur schwer selbst aufbringen kann.'''.strip()
description_title = 'Das erwartet dich in diesem Handlungsfeld'
description_text = '''
In diesem berufstypischem Handlungsfeld lernst du alles rund um Motorfahrzeugversicherungen,
wie man sein Auto optimal schützen kann, wie du vorgehst bei einem Fahrzeugwechsel,
welche Aspekte du bei einer Offerte beachten musst und wie du dem Kunden die Lösung präsentierst.'''.strip()
items = [
('item', 'Motorfahrzeughaftpflichtversicherung'),
('item', 'Motorfahrzeugkaskoversicherung'),
('item', 'Insassenunfallversicherung'),
]
body_data = json.dumps([
create_document_collection(),
create_link_collection(
links_dict=[
create_media_content_link(
LinkBlockFactory(title='Nationales Versicherungsbüro', url='https://www.vbv.ch/')),
create_media_content_link(
LinkBlockFactory(title='Adressen der Strassenverkehrsämter', url='https://www.vbv.ch/')),
]
)
])
media_category = MediaCategoryPageFactory(
overview_icon=overview_icon,
title=cat.title,
course_category=cat,
parent=media_lib_page,
introduction_text=introduction_text,
description_title=description_title,
description_text=description_text,
items=items,
body=body_data,
)

View File

@ -1,6 +1,7 @@
import djclick as click
from vbv_lernwelt.competence.create_default_competence_profile import create_default_competence_profile
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.creators.versicherungsvermittlerin import create_versicherungsvermittlerin_with_categories
from vbv_lernwelt.learnpath.create_default_learning_path import create_default_learning_path
from vbv_lernwelt.media_library.create_default_documents import create_default_collections, create_default_documents
@ -19,3 +20,6 @@ def command():
create_default_collections()
create_default_documents()
create_default_media_library()
# test course
create_test_course()

View File

@ -1,8 +1,8 @@
# Generated by Django 3.2.13 on 2022-09-28 12:51
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
@ -23,7 +23,7 @@ class Migration(migrations.Migration):
('category_name', models.CharField(default='Kategorie', max_length=255, verbose_name='Kategorie-Name')),
],
options={
'verbose_name': 'Lerngang',
'verbose_name': 'Lehrgang',
},
),
migrations.CreateModel(
@ -33,7 +33,7 @@ class Migration(migrations.Migration):
('course', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='course.course')),
],
options={
'verbose_name': 'Lerngang-Seite',
'verbose_name': 'Lehrgang-Seite',
},
bases=('wagtailcore.page',),
),

View File

@ -13,7 +13,7 @@ class Course(models.Model):
category_name = models.CharField(_('Kategorie-Name'), max_length=255, default='Kategorie')
class Meta:
verbose_name = _("Lerngang")
verbose_name = _("Lehrgang")
def __str__(self):
return f"{self.title}"
@ -35,7 +35,7 @@ class CoursePage(Page):
course = models.ForeignKey('course.Course', on_delete=models.PROTECT)
class Meta:
verbose_name = _("Lerngang-Seite")
verbose_name = _("Lehrgang-Seite")
def full_clean(self, *args, **kwargs):
self.slug = find_available_slug(slugify(self.title, allow_unicode=True))

View File

@ -0,0 +1,25 @@
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.course.creators.test_course import create_test_course
from vbv_lernwelt.media_library.models import MediaLibraryPage
class MediaCenterAPITestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
self.user = User.objects.get(username='student')
self.client.login(username='student', password='test')
def test_get_learnpathPage(self):
slug = 'test-lehrgang-media'
media_library = MediaLibraryPage.objects.get(slug=slug)
response = self.client.get(f'/api/course/page/{slug}/')
self.assertEqual(response.status_code, 200)
data = response.json()
self.assertEqual(media_library.title, data['title'])
self.assertEqual('Fahrzeug', data['children'][1]['title'])

View File

@ -1,25 +0,0 @@
from django.test import TestCase
from wagtail.core.models import Collection
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.media_library.create_default_documents import create_default_collections, create_default_documents
from vbv_lernwelt.media_library.models import LibraryDocument
class TestCreateDefaultDocuments(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
def test_create_default_collections(self):
create_default_collections()
qs = Collection.objects.filter(name="Versicherungsvermittler/in")
self.assertTrue(qs.exists())
def test_create_default_documents(self):
create_default_collections()
create_default_documents()
qs = LibraryDocument.objects.all()
self.assertTrue(qs.exists())

View File

@ -1,29 +0,0 @@
from django.test import TestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory
from vbv_lernwelt.media_library.create_default_media_library import create_default_media_library
from vbv_lernwelt.media_library.models import MediaLibraryPage, MediaCategoryPage
class TestCreateDefaultDocuments(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
LearningPathFactory()
create_default_media_library()
def test_create_default_media_library(self):
self.assertEqual(MediaLibraryPage.objects.all().count(), 1)
self.assertEqual(MediaCategoryPage.objects.all().count(), 12)
def test_create_category_fahrzeug_contains_content(self):
fahrzeug = MediaCategoryPage.objects.get(title='Fahrzeug')

View File

@ -1,47 +0,0 @@
import json
from django.test import TestCase
from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
from vbv_lernwelt.media_library.models import MediaCategoryPage
from vbv_lernwelt.media_library.tests.media_library_factories import MediaContentCollectionFactory, MediaCategoryPageFactory, \
LinkBlockFactory, generate_default_content2, collection_body_dict
class TestMediaLibraryFactories(TestCase):
def setUp(self) -> None:
create_default_users()
create_locales_for_wagtail()
def test_content_collection_factory(self):
content_collection = MediaContentCollectionFactory()
self.assertEqual(content_collection.get('title'), 'Links')
self.assertEqual(content_collection.get('collection_type'), 'LearningMedia')
def test_link_block_factory(self):
link = LinkBlockFactory(title='MyLink')
self.assertEqual(link.get('description'), 'This link is really interesting...')
self.assertEqual(link.get('url'), 'www.example.com')
self.assertEqual(link.get('link_display_text'), 'Link öffnen')
self.assertEqual(link.get('title'), 'MyLink')
def test_category_contains_content_collection(self):
default_content = generate_default_content2()
default_content['body__content_collection__0__title'] = 'Spidf'
category = MediaCategoryPageFactory(**default_content)
print(category.body.raw_data)
self.assertNotEqual(category.body.raw_data, [])
def collection_via_dict_generation(self):
category = MediaCategoryPageFactory()
category.body = json.dumps(collection_body_dict())
category.save()
category_id = category.id
new_category = MediaCategoryPage.objects.get(id=category_id)
self.assertNotEqual(new_category.body, [])
self.assertNotEqual(new_category.body, [])