From c2e2d596b2c4bab5f398972a69a25c5bd534fc49 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 26 Aug 2022 10:02:43 +0200 Subject: [PATCH 1/9] Add function to create simple learningpath for unit tests --- .../commands/create_default_learning_path.py | 1 + .../tests/create_simple_test_learning_path.py | 149 ++++++++++++++++++ server/vbv_lernwelt/learnpath/views.py | 13 +- 3 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 server/vbv_lernwelt/learnpath/tests/create_simple_test_learning_path.py diff --git a/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py index 0dd5d605..13ef5e61 100644 --- a/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py @@ -6,3 +6,4 @@ from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_def @click.command() def command(): create_default_learning_path(skip_locales=True) + # create_simple_test_learning_path(skip_locales=True) diff --git a/server/vbv_lernwelt/learnpath/tests/create_simple_test_learning_path.py b/server/vbv_lernwelt/learnpath/tests/create_simple_test_learning_path.py new file mode 100644 index 00000000..f3c8c153 --- /dev/null +++ b/server/vbv_lernwelt/learnpath/tests/create_simple_test_learning_path.py @@ -0,0 +1,149 @@ +import wagtail_factories +from django.conf import settings +from wagtail.models import Site, Page + +from vbv_lernwelt.core.admin import User +from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory, TopicFactory, CircleFactory, \ + LearningSequenceFactory, LearningContentFactory, VideoBlockFactory, PodcastBlockFactory, CompetenceBlockFactory, \ + ExerciseBlockFactory, LearningUnitFactory, LearningUnitQuestionFactory + + +def create_circle(title, learning_path): + return CircleFactory( + title=title, + parent=learning_path, + description="Unit-Test Circle", + job_situations=[ + ('job_situation', 'Absicherung der Familie'), + ('job_situation', 'Reisen'), + ], + goals=[ + ('goal', '... die heutige Versicherungssituation von Privat- oder Geschäftskunden einzuschätzen.'), + ('goal', '... deinem Kunden seine optimale Lösung aufzuzeigen'), + ], + experts=[ + ('person', {'last_name': 'Huggel', 'first_name': 'Patrizia', 'email': 'patrizia.huggel@example.com'}), + ] + ) + + +def create_circle_children(circle, title): + LearningSequenceFactory(title='Starten', parent=circle, icon='it-icon-ls-start') + LearningContentFactory( + title=f'Einleitung Circle "{title}"', + parent=circle, + minutes=15, + contents=[('video', VideoBlockFactory( + url='https://www.youtube.com/embed/qhPIfxS2hvI', + description='In dieser Circle zeigt dir ein Fachexperte anhand von Kundensituationen, wie du erfolgreich' + 'den Kundenbedarf ermitteln, analysieren, priorisieren und anschliessend zusammenfassen kannst.' + ))] + ) + + LearningSequenceFactory(title='Beobachten', parent=circle, icon='it-icon-ls-watch') + lu = LearningUnitFactory( + title='Absicherung der Familie', + parent=circle, + ) + LearningUnitQuestionFactory( + title="Ich bin in der Lage, mit geeigneten Fragestellungen die Deckung von Versicherungen zu erfassen.", + parent=lu + ) + LearningUnitQuestionFactory( + title="Zweite passende Frage zu 'Absicherung der Familie'", + parent=lu + ) + LearningContentFactory( + title='Ermittlung des Kundenbedarfs', + parent=circle, + minutes=30, + contents=[('podcast', PodcastBlockFactory( + description='Die Ermittlung des Kundenbedarfs muss in einem eingehenden Gespräch herausgefunden werden. Höre dazu auch diesen Podcast an.', + url='https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/325190984&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true', + ))] + ) + LearningContentFactory( + title='Kundenbedürfnisse erkennen', + parent=circle, + minutes=30, + contents=[('competence', CompetenceBlockFactory())] + ) + LearningContentFactory( + title='Was braucht eine Familie?', + parent=circle, + minutes=60, + contents=[('exercise', ExerciseBlockFactory(url='/media/web_based_trainings/story-01-a-01-patrizia-marco-sichern-sich-ab-einstieg/scormcontent/index.html' + ))] + + ) + + lu = LearningUnitFactory(title='Reisen', parent=circle) + LearningUnitQuestionFactory( + title='Passende Frage zu "Reisen"', + parent=lu + ) + LearningContentFactory( + title='Reiseversicherung', + parent=circle, + minutes=240, + contents=[('competence', CompetenceBlockFactory())] + ) + LearningContentFactory( + title='Sorgenfrei reisen', + parent=circle, + minutes=120, + contents=[('exercise', ExerciseBlockFactory( + url='/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html'))] + ) + + LearningSequenceFactory(title='Beenden', parent=circle, icon='it-icon-ls-end') + LearningContentFactory( + title='Kompetenzprofil anschauen', + parent=circle, + minutes=30, + contents=[('document', CompetenceBlockFactory())] + ) + LearningContentFactory( + title='Circle "Analyse" abschliessen', + parent=circle, + minutes=30, + contents=[('document', CompetenceBlockFactory())] + ) + + +def create_simple_test_learning_path(user=None, skip_locales=True): + if user is None: + user = User.objects.get(username='info@iterativ.ch') + + site = Site.objects.filter(is_default_site=True).first() + + if not site: + site = wagtail_factories.SiteFactory(is_default_site=True) + + if settings.APP_ENVIRONMENT == 'development': + site.port = 8000 + site.save() + + lp = LearningPathFactory(title="Unit-Test Lernpfad", parent=site.root_page) + TopicFactory(title="Unit-Test Topic", is_visible=False, parent=lp) + + circle_analyse = create_circle('Unit-Test Circle', lp) + create_circle_children(circle_analyse, 'Unit-Test Circle') + + # locales + # if not skip_locales: + # locale_de = Locale.objects.get(language_code='de-CH') + # locale_fr, _ = Locale.objects.get_or_create(language_code='fr-CH') + # LocaleSynchronization.objects.get_or_create( + # locale_id=locale_fr.id, + # sync_from_id=locale_de.id + # ) + # locale_it, _ = Locale.objects.get_or_create(language_code='it-CH') + # LocaleSynchronization.objects.get_or_create( + # locale_id=locale_it.id, + # sync_from_id=locale_de.id + # ) + # call_command('sync_locale_trees') + + # all pages belong to 'admin' by default + Page.objects.update(owner=user) diff --git a/server/vbv_lernwelt/learnpath/views.py b/server/vbv_lernwelt/learnpath/views.py index c1ea8f26..590bbd66 100644 --- a/server/vbv_lernwelt/learnpath/views.py +++ b/server/vbv_lernwelt/learnpath/views.py @@ -2,6 +2,7 @@ import glob from pathlib import Path +import structlog from django.conf import settings from django.shortcuts import render from django.views.decorators.cache import cache_page @@ -11,13 +12,19 @@ from wagtail.models import Page from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt +logger = structlog.get_logger(__name__) + @api_view(['GET']) @cache_page(60 * 60 * 8, cache="learning_path_cache") def page_api_view(request, slug): - page = Page.objects.get(slug=slug, locale__language_code='de-CH') - serializer = page.specific.get_serializer_class()(page.specific) - return Response(serializer.data) + try: + page = Page.objects.get(slug=slug, locale__language_code='de-CH') + serializer = page.specific.get_serializer_class()(page.specific) + return Response(serializer.data) + except Exception as e: + logger.error(e) + return Response({"error": str(e)}, status=404) @django_view_authentication_exempt From 0ad87066253af76f7494a259ccf80e1cb37d3564 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 26 Aug 2022 10:18:56 +0200 Subject: [PATCH 2/9] Fix unit tests --- server/config/settings/base.py | 1 - server/config/urls.py | 1 - .../vbv_lernwelt/completion/tests/test_api.py | 14 +-- .../core/management/commands/cypress_reset.py | 2 +- server/vbv_lernwelt/core/tests/helpers.py | 7 ++ server/vbv_lernwelt/core/tests/test_user.py | 16 --- .../create_default_learning_path.py | 0 .../commands/create_default_learning_path.py | 2 +- .../commands/delete_default_learning_path.py | 2 +- server/vbv_lernwelt/learnpath/models.py | 5 +- .../learnpath/models_competences.py | 66 ----------- .../learnpath/tests/competences.json | 78 ------------- .../learnpath/tests/competences_factories.py | 30 ----- .../tests/create_default_competences.py | 23 ---- .../learnpath/tests/grapple_test.http | 20 ---- .../learnpath/tests/grapple_test.txt | 17 --- .../vbv_lernwelt/learnpath/tests/test_api.py | 50 +++------ .../tests/test_competences_factories.py | 18 --- .../tests/test_create_default_competences.py | 12 -- .../test_create_default_learning_path.py | 23 ---- .../learnpath/tests/test_factories.py | 9 -- server/vbv_lernwelt/media_library/tests.py | 3 - .../tests/test_create_default_documents.py | 8 +- server/vbv_lernwelt/simpletodo/__init__.py | 0 server/vbv_lernwelt/simpletodo/admin.py | 39 ------- server/vbv_lernwelt/simpletodo/apps.py | 6 - .../simpletodo/migrations/0001_initial.py | 105 ------------------ .../simpletodo/migrations/__init__.py | 0 server/vbv_lernwelt/simpletodo/models.py | 24 ---- server/vbv_lernwelt/simpletodo/serializers.py | 41 ------- .../templates/simpletodo/index.html | 17 --- .../simpletodo/partials/add_task_form.html | 21 ---- .../simpletodo/partials/simple_list.html | 18 --- .../templates/simpletodo/partials/task.html | 35 ------ .../vbv_lernwelt/simpletodo/tests/__init__.py | 0 .../simpletodo/tests/test_serializers.py | 26 ----- server/vbv_lernwelt/simpletodo/urls.py | 13 --- server/vbv_lernwelt/simpletodo/views.py | 92 --------------- 38 files changed, 36 insertions(+), 808 deletions(-) create mode 100644 server/vbv_lernwelt/core/tests/helpers.py delete mode 100644 server/vbv_lernwelt/core/tests/test_user.py rename server/vbv_lernwelt/learnpath/{tests => }/create_default_learning_path.py (100%) delete mode 100644 server/vbv_lernwelt/learnpath/models_competences.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/competences.json delete mode 100644 server/vbv_lernwelt/learnpath/tests/competences_factories.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/create_default_competences.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/grapple_test.http delete mode 100644 server/vbv_lernwelt/learnpath/tests/grapple_test.txt delete mode 100644 server/vbv_lernwelt/learnpath/tests/test_competences_factories.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/test_create_default_learning_path.py delete mode 100644 server/vbv_lernwelt/learnpath/tests/test_factories.py delete mode 100644 server/vbv_lernwelt/media_library/tests.py delete mode 100644 server/vbv_lernwelt/simpletodo/__init__.py delete mode 100644 server/vbv_lernwelt/simpletodo/admin.py delete mode 100644 server/vbv_lernwelt/simpletodo/apps.py delete mode 100644 server/vbv_lernwelt/simpletodo/migrations/0001_initial.py delete mode 100644 server/vbv_lernwelt/simpletodo/migrations/__init__.py delete mode 100644 server/vbv_lernwelt/simpletodo/models.py delete mode 100644 server/vbv_lernwelt/simpletodo/serializers.py delete mode 100644 server/vbv_lernwelt/simpletodo/templates/simpletodo/index.html delete mode 100644 server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/add_task_form.html delete mode 100644 server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/simple_list.html delete mode 100644 server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/task.html delete mode 100644 server/vbv_lernwelt/simpletodo/tests/__init__.py delete mode 100644 server/vbv_lernwelt/simpletodo/tests/test_serializers.py delete mode 100644 server/vbv_lernwelt/simpletodo/urls.py delete mode 100644 server/vbv_lernwelt/simpletodo/views.py diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 9fd92a30..e6b7b7da 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -103,7 +103,6 @@ THIRD_PARTY_APPS = [ LOCAL_APPS = [ "vbv_lernwelt.core", - "vbv_lernwelt.simpletodo", "vbv_lernwelt.sso", "vbv_lernwelt.learnpath", "vbv_lernwelt.completion", diff --git a/server/config/urls.py b/server/config/urls.py index d5aeada9..c40bb6d3 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -34,7 +34,6 @@ urlpatterns = [ path('admin/raise_error/', user_passes_test(lambda u: u.is_superuser, login_url='/login/')(raise_example_error), ), path(settings.ADMIN_URL, admin.site.urls), path("checkratelimit/", check_rate_limit), - path("todo/", include("vbv_lernwelt.simpletodo.urls")), path("sso/", include("vbv_lernwelt.sso.urls")), path('cms/', include(wagtailadmin_urls)), path('documents/', include(wagtaildocs_urls)), diff --git a/server/vbv_lernwelt/completion/tests/test_api.py b/server/vbv_lernwelt/completion/tests/test_api.py index 22bcca73..de44fb6c 100644 --- a/server/vbv_lernwelt/completion/tests/test_api.py +++ b/server/vbv_lernwelt/completion/tests/test_api.py @@ -4,25 +4,21 @@ from rest_framework.test import APITestCase from vbv_lernwelt.core.create_default_users import create_default_users from vbv_lernwelt.core.models import User +from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail from vbv_lernwelt.learnpath.models import LearningContent -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 +from vbv_lernwelt.learnpath.tests.create_simple_test_learning_path import create_simple_test_learning_path class CompletionApiTestCase(APITestCase): - @classmethod - def setUpClass(cls) -> None: - super(CompletionApiTestCase, cls).setUpClass() + def setUp(self) -> None: create_locales_for_wagtail() create_default_users() - create_default_learning_path() - - def setUp(self) -> None: + create_simple_test_learning_path() self.user = User.objects.get(username='student') self.client.login(username='student', password='test') def test_completeLearningContent_works(self): - learning_content = LearningContent.objects.get(title='Einleitung Circle "Anlayse"') + learning_content = LearningContent.objects.get(title='Einleitung Circle "Unit-Test Circle"') learning_content_key = str(learning_content.translation_key) circle_key = str(learning_content.get_parent().translation_key) diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index dd456172..96e5f9a7 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -1,6 +1,6 @@ import djclick as click -from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path, \ +from vbv_lernwelt.learnpath.create_default_learning_path import create_default_learning_path, \ delete_default_learning_path diff --git a/server/vbv_lernwelt/core/tests/helpers.py b/server/vbv_lernwelt/core/tests/helpers.py new file mode 100644 index 00000000..10b36959 --- /dev/null +++ b/server/vbv_lernwelt/core/tests/helpers.py @@ -0,0 +1,7 @@ +from django.conf import settings +from wagtail.models import Locale + + +def create_locales_for_wagtail(): + for language in settings.WAGTAIL_CONTENT_LANGUAGES: + Locale.objects.get_or_create(language_code=language[0]) diff --git a/server/vbv_lernwelt/core/tests/test_user.py b/server/vbv_lernwelt/core/tests/test_user.py deleted file mode 100644 index 442d7b34..00000000 --- a/server/vbv_lernwelt/core/tests/test_user.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.test import TestCase - -from vbv_lernwelt.core.models import User -from vbv_lernwelt.core.tests.factories import UserFactory -from vbv_lernwelt.simpletodo.models import SimpleList - - -class TestUserCreation(TestCase): - def test_create_user(self): - User(last_name='Sepp').save() - - def test_simple(self): - # create_default_learning_path() - self.user = UserFactory() - SimpleList.objects.get_or_create(title='Default', user=self.user) - self.assertTrue(True) diff --git a/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/create_default_learning_path.py similarity index 100% rename from server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py rename to server/vbv_lernwelt/learnpath/create_default_learning_path.py diff --git a/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py index 13ef5e61..ba20d5fb 100644 --- a/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py @@ -1,6 +1,6 @@ import djclick as click -from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path +from vbv_lernwelt.learnpath.create_default_learning_path import create_default_learning_path @click.command() diff --git a/server/vbv_lernwelt/learnpath/management/commands/delete_default_learning_path.py b/server/vbv_lernwelt/learnpath/management/commands/delete_default_learning_path.py index c07106f5..bed10bfd 100644 --- a/server/vbv_lernwelt/learnpath/management/commands/delete_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/management/commands/delete_default_learning_path.py @@ -1,6 +1,6 @@ import djclick as click -from vbv_lernwelt.learnpath.tests.create_default_learning_path import delete_default_learning_path +from vbv_lernwelt.learnpath.create_default_learning_path import delete_default_learning_path @click.command() diff --git a/server/vbv_lernwelt/learnpath/models.py b/server/vbv_lernwelt/learnpath/models.py index 14fb1f64..78688654 100644 --- a/server/vbv_lernwelt/learnpath/models.py +++ b/server/vbv_lernwelt/learnpath/models.py @@ -1,13 +1,12 @@ -# Create your models here. - +from django.db import models from django.utils.text import slugify from wagtail import blocks +from wagtail.admin.panels import FieldPanel, StreamFieldPanel from wagtail.blocks import StreamBlock from wagtail.fields import StreamField from wagtail.images.blocks import ImageChooserBlock from wagtail.models import Page, Orderable -from vbv_lernwelt.learnpath.models_competences import * from vbv_lernwelt.learnpath.models_learning_unit_content import WebBasedTrainingBlock, VideoBlock, PodcastBlock, \ CompetenceBlock, ExerciseBlock, DocumentBlock, KnowledgeBlock from vbv_lernwelt.learnpath.serializer_helpers import get_it_serializer_class diff --git a/server/vbv_lernwelt/learnpath/models_competences.py b/server/vbv_lernwelt/learnpath/models_competences.py deleted file mode 100644 index d90f7a2f..00000000 --- a/server/vbv_lernwelt/learnpath/models_competences.py +++ /dev/null @@ -1,66 +0,0 @@ -from django.db import models -from wagtail.models import Page, Orderable -from modelcluster.fields import ParentalKey -from wagtail.admin.panels import FieldPanel, StreamFieldPanel, InlinePanel - - -class CompetencePage(Page): - """This is the page where the competences and Fullfillment criterias are manged - For one Learning Path""" - - - content_panels = Page.content_panels + [ - InlinePanel('competences', label="Competences"), - ] - - subpage_types = ['learnpath.Circle'] - - parent_page_types = ['learnpath.LearningPath'] - - - class Meta: - verbose_name = "Learning Path" - - def __str__(self): - return f"{self.title}" - - -class Competence(Orderable): - """ In VBV Terms this is a "Handlungskompetenz""" - category_short = models.CharField(max_length=3, default='') - name = models.CharField(max_length=2048) - - - competence_page = ParentalKey('learnpath.CompetencePage', - null=True, - blank=True, - on_delete=models.CASCADE, - related_name='competences', - ) - - - - def get_short_info(self): - return f"{self.category_short}{self.sort_order}" - - def __str__(self): - return f"{self.get_short_info()}: {self.name}" - - - class Meta: - verbose_name = "Competence" - - -class FullfillmentCriteria(Orderable): - """ VBV Term Leistungskriterium""" - name = models.CharField(max_length=2048) - competence = models.ForeignKey(Competence, on_delete=models.CASCADE, null=True) - - def get_short_info(self): - return f"{self.competence.get_short_info()}.{self.sort_order}" - - def __str__(self): - return f"{self.get_short_info()}: {self.name}" - - class Meta: - verbose_name = "Fullfillment Criteria" diff --git a/server/vbv_lernwelt/learnpath/tests/competences.json b/server/vbv_lernwelt/learnpath/tests/competences.json deleted file mode 100644 index b50e04e5..00000000 --- a/server/vbv_lernwelt/learnpath/tests/competences.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "competences": [ - { - "name": "Weiterempfehlung für Neukunden generieren", - "category_short": "A", - "fullfillment_criteria": [ - { - "name": "bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden" - }, - { - "name": "geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die Vermittlung/Zusammenarbeit anzusprechen" - }, - { - "name": "verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. gezielt für die Gewinnung von Neukunden zu benützen" - }, - { - "name": "ein beliebiges Gespräch resp. einen bestehenden Kontakt in die Richtung «Versicherung» zu lenken" - }, - { - "name": "das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen" - }, - { - "name": "im täglichen Kontakt potentielle Kundinnen und Kunden zu erkennen" - } - ] - }, - { - "name": "Kundengespräche vereinbaren", - "category_short": "A", - "fullfillment_criteria": [ - { - "name": "je nach (Neu-) Kunde Form und Ort für das Gespräch festzulegen" - }, - { - "name": "sich intern und extern die nötigen Informationen über den (Neu-) Kunde zu beschaffen" - }, - { - "name": "die Terminierung auf ein bestimmtes Thema wie z.B. Rechtsschutz, Vorsorge, Krankenversicherung etc. auszurichten" - }, - { - "name": "für das zu führende Gespräch eine Agenda zu erstellen" - }, - { - "name": "für das zu führende Gespräch geeignete Hilfsmittel und Unterlagen zusammenzustellen" - }, { - "name": "eine Kaltakquise durchzuführen und auf mögliche Einwände reagieren zu können" - } -] - - }, - { - "name": "Auftritt in den sozialen Medien zeitgemäss halten", - "category_short": "A", - "fullfillment_criteria": [ { - "name": "in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte für den zu realisierenden Medienauftritt zielgruppengerecht festzulegen" - }, - { - "name": "für die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren" - }, - { - "name": "die Inhalte compliant zu halten" - } - ] - }, - { - "name": "Kundendaten erfassen", - "category_short": "A", - "fullfillment_criteria": [] - }, - { - "name": "Wünsche, Ziele und Bedürfnisse der Kunden im Gespräch ermitteln", - "category_short": "B", - "fullfillment_criteria": [] - } - ] -} - - diff --git a/server/vbv_lernwelt/learnpath/tests/competences_factories.py b/server/vbv_lernwelt/learnpath/tests/competences_factories.py deleted file mode 100644 index fd6ed29e..00000000 --- a/server/vbv_lernwelt/learnpath/tests/competences_factories.py +++ /dev/null @@ -1,30 +0,0 @@ -import factory -import wagtail_factories - -from vbv_lernwelt.learnpath.models_competences import Competence, FullfillmentCriteria, CompetencePage -from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory - - -class CompetencePageFactory(wagtail_factories.PageFactory): - # learning_path = factory.SubFactory(LearningPathFactory) - - class Meta: - model = CompetencePage - - -class CompetenceFactory(factory.django.DjangoModelFactory): - category_short = 'A' - name = "Weiterempfehung für neukunden generieren" - competence_page = factory.SubFactory(CompetencePageFactory) - - class Meta: - model = Competence - - -class FullfilmentCriteriaFactory(factory.django.DjangoModelFactory): - name = 'Bestehende Kunden so zu beraten, dass sie von diesen weiterempfohlen werden' - competence = factory.SubFactory(CompetenceFactory) - - class Meta: - model = FullfillmentCriteria - diff --git a/server/vbv_lernwelt/learnpath/tests/create_default_competences.py b/server/vbv_lernwelt/learnpath/tests/create_default_competences.py deleted file mode 100644 index 9a8716ae..00000000 --- a/server/vbv_lernwelt/learnpath/tests/create_default_competences.py +++ /dev/null @@ -1,23 +0,0 @@ -import json - - -import os.path - -from vbv_lernwelt.learnpath.tests.competences_factories import CompetenceFactory, FullfilmentCriteriaFactory - -competences_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'competences.json') - - -def create_default_competences(competences_json=competences_file): - with open(competences_json) as f: - competences_json = json.load(f) - - for index, compentence in enumerate(competences_json['competences']): - - competence_model = CompetenceFactory(name=compentence['name'], category_short=compentence['category_short'], sort_order=index) - print(competence_model) - - for criteria_index, criteria in enumerate(compentence['fullfillment_criteria']): - criteria_model = FullfilmentCriteriaFactory(name=criteria['name'], competence=competence_model, sort_order=criteria_index) - print(criteria_model) - diff --git a/server/vbv_lernwelt/learnpath/tests/grapple_test.http b/server/vbv_lernwelt/learnpath/tests/grapple_test.http deleted file mode 100644 index 883b9d03..00000000 --- a/server/vbv_lernwelt/learnpath/tests/grapple_test.http +++ /dev/null @@ -1,20 +0,0 @@ -GET http://localhost:8000/graphql/ -Accept: application/json - -### -{ - page(id: 8) { - - children { - __typename - id - title - children { - __typename - - id - title - } - } - } -} diff --git a/server/vbv_lernwelt/learnpath/tests/grapple_test.txt b/server/vbv_lernwelt/learnpath/tests/grapple_test.txt deleted file mode 100644 index 51917e32..00000000 --- a/server/vbv_lernwelt/learnpath/tests/grapple_test.txt +++ /dev/null @@ -1,17 +0,0 @@ -{ - page(id: 8) { - - children { - __typename - id - title - children { - __typename - - id - title - } - } - } -} - diff --git a/server/vbv_lernwelt/learnpath/tests/test_api.py b/server/vbv_lernwelt/learnpath/tests/test_api.py index 8b412f7e..dad7a7e5 100644 --- a/server/vbv_lernwelt/learnpath/tests/test_api.py +++ b/server/vbv_lernwelt/learnpath/tests/test_api.py @@ -2,44 +2,30 @@ 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 +from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail +from vbv_lernwelt.learnpath.models import LearningPath +from vbv_lernwelt.learnpath.tests.create_simple_test_learning_path import create_simple_test_learning_path class TestRetrieveLearingPathContents(APITestCase): - @classmethod - def setUpClass(cls) -> None: - super(TestRetrieveLearingPathContents, cls).setUpClass() + def setUp(self) -> None: create_locales_for_wagtail() create_default_users() - create_default_learning_path() + create_simple_test_learning_path() - def setUp(self) -> None: - qs = LearningPath.objects.filter(title="Versicherungsvermittler/in") - self.credentials = { - 'username': 'admin', - 'password': 'admin'} + self.user = User.objects.get(username='student') + self.client.login(username='student', password='test') - 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}/') + def test_get_learnpathPage(self): + learning_path = LearningPath.objects.get(slug='unit-test-lernpfad') + response = self.client.get('/learnpath/api/page/unit-test-lernpfad/') + print(response) self.assertEqual(response.status_code, 200) - self.assertEqual(response.data['title'], 'Analyse') + data = response.json() + # print(data) - 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']) + self.assertEqual(learning_path.title, data['title']) + # topic and circle + self.assertEqual(2, len(data['children'])) + # circle "unit-test-circle" contents + self.assertEqual(13, len(data['children'][1]['children'])) diff --git a/server/vbv_lernwelt/learnpath/tests/test_competences_factories.py b/server/vbv_lernwelt/learnpath/tests/test_competences_factories.py deleted file mode 100644 index baf72c70..00000000 --- a/server/vbv_lernwelt/learnpath/tests/test_competences_factories.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.test import TestCase - -from vbv_lernwelt.learnpath.models_competences import Competence, FullfillmentCriteria -from vbv_lernwelt.learnpath.tests.competences_factories import CompetencePageFactory, CompetenceFactory, \ - FullfilmentCriteriaFactory - - -class TestCompetencesFactories(TestCase): - def test_create_competences_page(self): - CompetencePageFactory() - - def test_create_competence(self): - CompetenceFactory(name='Boogie Woogie') - self.assertEqual(Competence.objects.filter(name='Boogie Woogie').count(), 1) - - def test_create_fullfillment_criteria(self): - FullfilmentCriteriaFactory(name='shuffle like ...') - self.assertEqual(FullfillmentCriteria.objects.filter(name='shuffle like ...').count(), 1) diff --git a/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py b/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py deleted file mode 100644 index d1b63399..00000000 --- a/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.test import TestCase - -from vbv_lernwelt.learnpath.tests.create_default_competences import create_default_competences - - -class TestCreateDefaultCompetences(TestCase): - def test_create_default_competeneces(self): - create_default_competences() - - - - diff --git a/server/vbv_lernwelt/learnpath/tests/test_create_default_learning_path.py b/server/vbv_lernwelt/learnpath/tests/test_create_default_learning_path.py deleted file mode 100644 index c58552f1..00000000 --- a/server/vbv_lernwelt/learnpath/tests/test_create_default_learning_path.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.conf import settings -from django.test import TestCase -from wagtail.models import Locale - -from vbv_lernwelt.core.create_default_users import create_default_users -from vbv_lernwelt.learnpath.models import LearningPath -from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path - - -class TestCreateDefaultLearningPaths(TestCase): - def setUp(self) -> None: - create_default_users() - create_locales_for_wagtail() - - def test_create_learning_path(self): - create_default_learning_path() - qs = LearningPath.objects.filter(title="Versicherungsvermittler/in") - self.assertTrue(qs.exists()) - - -def create_locales_for_wagtail(): - for language in settings.WAGTAIL_CONTENT_LANGUAGES: - Locale.objects.get_or_create(language_code=language[0]) diff --git a/server/vbv_lernwelt/learnpath/tests/test_factories.py b/server/vbv_lernwelt/learnpath/tests/test_factories.py deleted file mode 100644 index 33212a11..00000000 --- a/server/vbv_lernwelt/learnpath/tests/test_factories.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Iterativ GmbH -# http://www.iterativ.ch/ -# -# Copyright (c) 2015 Iterativ GmbH. All rights reserved. -# -# Created on 2022-03-29 -# @author: lorenz.padberg@iterativ.ch diff --git a/server/vbv_lernwelt/media_library/tests.py b/server/vbv_lernwelt/media_library/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/server/vbv_lernwelt/media_library/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/server/vbv_lernwelt/media_library/tests/test_create_default_documents.py b/server/vbv_lernwelt/media_library/tests/test_create_default_documents.py index 0d74e807..48750c54 100644 --- a/server/vbv_lernwelt/media_library/tests/test_create_default_documents.py +++ b/server/vbv_lernwelt/media_library/tests/test_create_default_documents.py @@ -1,9 +1,8 @@ -from django.conf import settings from django.test import TestCase from wagtail.core.models import Collection -from wagtail.models import Locale 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 @@ -24,8 +23,3 @@ class TestCreateDefaultDocuments(TestCase): create_default_documents() qs = LibraryDocument.objects.all() self.assertTrue(qs.exists()) - - -def create_locales_for_wagtail(): - for language in settings.WAGTAIL_CONTENT_LANGUAGES: - Locale.objects.get_or_create(language_code=language[0]) diff --git a/server/vbv_lernwelt/simpletodo/__init__.py b/server/vbv_lernwelt/simpletodo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/server/vbv_lernwelt/simpletodo/admin.py b/server/vbv_lernwelt/simpletodo/admin.py deleted file mode 100644 index e18c8a68..00000000 --- a/server/vbv_lernwelt/simpletodo/admin.py +++ /dev/null @@ -1,39 +0,0 @@ -# Register your models here. -from django.contrib import admin - -from .models import SimpleTask, SimpleList - - -@admin.register(SimpleList) -class SimpleListAdmin(admin.ModelAdmin): - list_display = [ - "title", - "user", - "created", - ] - list_filter = [ - "user", - ] - search_fields = [ - "title", - ] - - -@admin.register(SimpleTask) -class SimpleTaskAdmin(admin.ModelAdmin): - date_hierarchy = "deadline" - list_display = [ - "title", - "deadline", - "created", - "list", - "done", - ] - list_filter = [ - "list", - "done", - ] - search_fields = [ - "title", - "text", - ] diff --git a/server/vbv_lernwelt/simpletodo/apps.py b/server/vbv_lernwelt/simpletodo/apps.py deleted file mode 100644 index 45efffa1..00000000 --- a/server/vbv_lernwelt/simpletodo/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class SimpletodoConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "vbv_lernwelt.simpletodo" diff --git a/server/vbv_lernwelt/simpletodo/migrations/0001_initial.py b/server/vbv_lernwelt/simpletodo/migrations/0001_initial.py deleted file mode 100644 index e850a29e..00000000 --- a/server/vbv_lernwelt/simpletodo/migrations/0001_initial.py +++ /dev/null @@ -1,105 +0,0 @@ -# Generated by Django 3.2.12 on 2022-02-03 20:37 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name="SimpleList", - fields=[ - ( - "created", - model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, - editable=False, - verbose_name="created", - ), - ), - ( - "modified", - model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, - editable=False, - verbose_name="modified", - ), - ), - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("title", models.CharField(max_length=255)), - ( - "user", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to=settings.AUTH_USER_MODEL, - ), - ), - ], - options={ - "abstract": False, - }, - ), - migrations.CreateModel( - name="SimpleTask", - fields=[ - ( - "created", - model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, - editable=False, - verbose_name="created", - ), - ), - ( - "modified", - model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, - editable=False, - verbose_name="modified", - ), - ), - ( - "id", - models.UUIDField( - default=uuid.uuid4, - editable=False, - primary_key=True, - serialize=False, - ), - ), - ("title", models.CharField(max_length=255)), - ("text", models.TextField(blank=True, default="")), - ("done", models.BooleanField(default=False)), - ("deadline", models.DateTimeField(blank=True, null=True)), - ( - "list", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to="simpletodo.simplelist", - ), - ), - ], - options={ - "abstract": False, - }, - ), - ] diff --git a/server/vbv_lernwelt/simpletodo/migrations/__init__.py b/server/vbv_lernwelt/simpletodo/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/server/vbv_lernwelt/simpletodo/models.py b/server/vbv_lernwelt/simpletodo/models.py deleted file mode 100644 index 042b46b1..00000000 --- a/server/vbv_lernwelt/simpletodo/models.py +++ /dev/null @@ -1,24 +0,0 @@ -import uuid - -from django.conf import settings -from django.db import models -from model_utils.models import TimeStampedModel - - -class SimpleList(TimeStampedModel): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - title = models.CharField(max_length=255) - user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) - - def __str__(self): - return f"{self.title} ({self.user})" - - -class SimpleTask(TimeStampedModel): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) - title = models.CharField(max_length=255) - text = models.TextField(blank=True, default="") - done = models.BooleanField(default=False) - deadline = models.DateTimeField(blank=True, null=True) - - list = models.ForeignKey(SimpleList, on_delete=models.CASCADE) diff --git a/server/vbv_lernwelt/simpletodo/serializers.py b/server/vbv_lernwelt/simpletodo/serializers.py deleted file mode 100644 index d3c52c84..00000000 --- a/server/vbv_lernwelt/simpletodo/serializers.py +++ /dev/null @@ -1,41 +0,0 @@ -import structlog -from rest_framework import serializers -from rest_framework.serializers import ModelSerializer - -from vbv_lernwelt.simpletodo.models import SimpleTask, SimpleList - -logger = structlog.get_logger(__name__) - - -class SimpleTaskSerializer(ModelSerializer): - list_title = serializers.CharField(max_length=100) - - class Meta: - model = SimpleTask - fields = [ - "id", - "title", - "text", - "done", - "deadline", - "list_title", - ] - - def create(self, validated_data): - user = validated_data.pop("user", None) - if user is None: - raise serializers.ValidationError("User is required") - - list_title = validated_data.pop("list_title") - simple_list, _ = SimpleList.objects.get_or_create(title=list_title, user=user) - - validated_data["list"] = simple_list - - logger.debug( - "Creating task", - label="simpletodo", - dt={"s1": 3, "s2": 4}, - title=validated_data.get("title"), - list_title=list_title, - ) - return super().create(validated_data) diff --git a/server/vbv_lernwelt/simpletodo/templates/simpletodo/index.html b/server/vbv_lernwelt/simpletodo/templates/simpletodo/index.html deleted file mode 100644 index 75fd8ad3..00000000 --- a/server/vbv_lernwelt/simpletodo/templates/simpletodo/index.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} - - -{% block content %} - -
- {% for list in simple_lists %} - {% include "simpletodo/partials/simple_list.html" with list=list%} - {% endfor %} -
- - - - - - -{% endblock %} diff --git a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/add_task_form.html b/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/add_task_form.html deleted file mode 100644 index 0450e452..00000000 --- a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/add_task_form.html +++ /dev/null @@ -1,21 +0,0 @@ -
- {% csrf_token %} - - - - -
diff --git a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/simple_list.html b/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/simple_list.html deleted file mode 100644 index f997613d..00000000 --- a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/simple_list.html +++ /dev/null @@ -1,18 +0,0 @@ -
- -
-
-

- {{ list.title }} -

- {% include "simpletodo/partials/add_task_form.html" with task=task %} -
- {% for task in list.simpletask_set.all %} - {% include "simpletodo/partials/task.html" with task=task %} - {% endfor %} -
- -
diff --git a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/task.html b/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/task.html deleted file mode 100644 index 70d4371f..00000000 --- a/server/vbv_lernwelt/simpletodo/templates/simpletodo/partials/task.html +++ /dev/null @@ -1,35 +0,0 @@ -
-
- {% if task.done %} -

- {% else %} -

- {% endif %} - {{ task.title }} -

- - - -
-
diff --git a/server/vbv_lernwelt/simpletodo/tests/__init__.py b/server/vbv_lernwelt/simpletodo/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/server/vbv_lernwelt/simpletodo/tests/test_serializers.py b/server/vbv_lernwelt/simpletodo/tests/test_serializers.py deleted file mode 100644 index 40893365..00000000 --- a/server/vbv_lernwelt/simpletodo/tests/test_serializers.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.test import TestCase - -from vbv_lernwelt.core.tests.factories import UserFactory -from vbv_lernwelt.simpletodo.models import SimpleTask -from vbv_lernwelt.simpletodo.serializers import SimpleTaskSerializer - - -class SimpleTaskSerializerTestCase(TestCase): - def setUp(self) -> None: - self.user = UserFactory() - - def test_serializer(self): - serializer = SimpleTaskSerializer( - data={ - "title": "Test", - "list_title": "Todos", - } - ) - - serializer.is_valid(raise_exception=True) - serializer.save(user=self.user) - - task = SimpleTask.objects.first() - - self.assertEqual(task.title, "Test") - self.assertEqual(task.list.title, "Todos") diff --git a/server/vbv_lernwelt/simpletodo/urls.py b/server/vbv_lernwelt/simpletodo/urls.py deleted file mode 100644 index f4cafd9a..00000000 --- a/server/vbv_lernwelt/simpletodo/urls.py +++ /dev/null @@ -1,13 +0,0 @@ -from django.conf.urls import url, include -from django.urls import path -from rest_framework.routers import DefaultRouter - -from . import views - -router = DefaultRouter() -router.register(r"tasks", views.SimpleTaskViewSet, basename="tasks") - -urlpatterns = [ - path("", views.index, name="index"), - url(r"^api/", include(router.urls)), -] diff --git a/server/vbv_lernwelt/simpletodo/views.py b/server/vbv_lernwelt/simpletodo/views.py deleted file mode 100644 index 71b57b9d..00000000 --- a/server/vbv_lernwelt/simpletodo/views.py +++ /dev/null @@ -1,92 +0,0 @@ -from django.http import HttpResponse -from django.shortcuts import redirect, render -from rest_framework import viewsets, status -from rest_framework.decorators import action -from rest_framework.renderers import TemplateHTMLRenderer, JSONRenderer -from rest_framework.response import Response - -from vbv_lernwelt.simpletodo.models import SimpleList, SimpleTask -from vbv_lernwelt.simpletodo.serializers import SimpleTaskSerializer - - -def index(request): - simple_lists = SimpleList.objects.filter(user=request.user) - - if simple_lists.count() == 0: - simple_lists = [SimpleList.objects.create(user=request.user, title="Todos")] - - return render(request, "simpletodo/index.html", {"simple_lists": simple_lists}) - - -class SimpleTaskViewSet(viewsets.ModelViewSet): - serializer_class = SimpleTaskSerializer - renderer_classes = [TemplateHTMLRenderer, JSONRenderer] - - def get_queryset(self): - user = self.request.user - return SimpleTask.objects.filter(list__user=user) - - def create(self, request, *args, **kwargs): - serializer = self.get_serializer(data=request.data) - - if request.accepted_renderer.format == "html": - serializer.is_valid(raise_exception=True) - else: - serializer.is_valid(raise_exception=True) - - serializer.save(user=request.user) - - if request.accepted_renderer.format == "html": - return redirect("/todo/") - - headers = self.get_success_headers(serializer.data) - return Response( - serializer.data, status=status.HTTP_201_CREATED, headers=headers - ) - - def destroy(self, request, *args, **kwargs): - instance = self.get_object() - instance.delete() - - if request.htmx: - return HttpResponse(status=200, content="") - - return Response(status=status.HTTP_204_NO_CONTENT) - - @action( - detail=True, - methods=[ - "post", - ], - ) - def toggle_done(self, request, pk=None): - task = self.get_object() - task.done = not task.done - task.save() - - if request.htmx: - return render(request, "simpletodo/partials/task.html", {"task": task}) - - return Response(self.get_serializer(task), status=status.HTTP_200_OK) - - # - # def get_category_from_request(self, request): - # cat_name = request.query_params.get('cat_name') - # category_obj = None - # - # if cat_name: - # category_obj = VideoCategory.objects.filter(category__iexact=cat_name).first() - # if not category_obj: - # category_obj = VideoCategory.objects.first() - # - # return category_obj - # - # @action(detail=False, methods=['get']) - # def form(self, request): - # category_obj = self.get_category_from_request(request) - # return Response(template_name='videos/partials/video_form.html', data={'category': category_obj}) - # - # @action(detail=False, methods=['get']) - # def cancel(self, request): - # category_obj = self.get_category_from_request(request) - # return Response(template_name='videos/partials/show_add_form.html', data={'category': category_obj}) From 01ff7c2f79903c2a9c86e8b73a65bf26fa6710f3 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 26 Aug 2022 14:39:19 +0200 Subject: [PATCH 3/9] Fix trufflehog exclude patterns --- .../core/management/commands/cypress_reset.py | 11 +++++++---- trufflehog-exclude-patterns.txt | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index 96e5f9a7..79ac351f 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -5,9 +5,12 @@ from vbv_lernwelt.learnpath.create_default_learning_path import create_default_l @click.command() -@click.option("--customer_language", default="de") -def command(customer_language): +@click.option('--reset-learning-path', default=False) +def command(reset_learning_path): print("cypress reset data") - delete_default_learning_path() - create_default_learning_path(skip_locales=True) + if reset_learning_path: + delete_default_learning_path() + create_default_learning_path(skip_locales=True) + + diff --git a/trufflehog-exclude-patterns.txt b/trufflehog-exclude-patterns.txt index 195e619b..218a5cde 100644 --- a/trufflehog-exclude-patterns.txt +++ b/trufflehog-exclude-patterns.txt @@ -1,4 +1,8 @@ server/requirements/ env_secrets/ env/docker_local.env +server/vbv_lernwelt/media/ +server/vbv_lernwelt/simpletodo/ +supabase.md +scripts/supabase/init.sql .envs/ From 75a209e04fa26f195b1522ab3f79fa3ff2e4ab86 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 26 Aug 2022 15:06:22 +0200 Subject: [PATCH 4/9] Upgrade to Cypress 10, add first login test --- client/src/views/CockpitView.vue | 2 +- client/src/views/LoginView.vue | 1 + cypress.config.js | 23 +++ cypress.json | 14 -- cypress/e2e/login.cy.js | 17 ++ .../integration/simpletodo/simpletodo.spec.js | 148 ------------------ cypress/support/{index.js => e2e.js} | 0 package.json | 8 +- server/vbv_lernwelt/completion/models.py | 4 +- 9 files changed, 46 insertions(+), 171 deletions(-) create mode 100644 cypress.config.js delete mode 100644 cypress.json create mode 100644 cypress/e2e/login.cy.js delete mode 100644 cypress/integration/simpletodo/simpletodo.spec.js rename cypress/support/{index.js => e2e.js} (100%) diff --git a/client/src/views/CockpitView.vue b/client/src/views/CockpitView.vue index b0dd0a70..ff53dac3 100644 --- a/client/src/views/CockpitView.vue +++ b/client/src/views/CockpitView.vue @@ -10,7 +10,7 @@ const userStore = useUserStore();