diff --git a/.gitignore b/.gitignore
index 1f9e5551..3fa6450e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -283,3 +283,5 @@ cypress/screenshots
cypress/test-reports
/server/vbv_lernwelt/static/css/tailwind.css
+/server/vbv_lernwelt/static/vue/
+/server/vbv_lernwelt/templates/vue/index.html
diff --git a/caprover_create_app.py b/caprover_create_app.py
index 652f1d88..2306907f 100644
--- a/caprover_create_app.py
+++ b/caprover_create_app.py
@@ -28,7 +28,7 @@ cap.deploy_one_click_app(
namespace='vbv-lernwelt',
# check https://github.com/caprover/one-click-apps/blob/master/public/v4/apps/postgres.yml
app_variables={
- '$$cap_postgres_version': '14.1',
+ '$$cap_postgres_version': '14.2',
'$$cap_pg_user': db_user,
'$$cap_pg_pass': db_pass,
'$$cap_pg_db': db_name,
diff --git a/caprover_deploy.sh b/caprover_deploy.sh
index 292cf0d7..aa996df9 100755
--- a/caprover_deploy.sh
+++ b/caprover_deploy.sh
@@ -1,5 +1,8 @@
#!/bin/bash
+# create client
+npm run build
+
# create and push new docker container
docker build -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django .
docker push iterativ/vbv-lernwelt-django
diff --git a/client/package.json b/client/package.json
index bbdae473..b69a742a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"scripts": {
"dev": "vite",
- "build": "vue-tsc --noEmit && vite build",
+ "build": "vue-tsc --noEmit && vite build && cp ./dist/index.html ../server/vbv_lernwelt/templates/vue/index.html && cp -r ./dist/static/vue ../server/vbv_lernwelt/static/",
"preview": "vite preview --port 5050",
"test:unit": "vitest --environment jsdom",
"test:e2e": "start-server-and-test preview http://127.0.0.1:5050/ 'cypress open'",
diff --git a/client/src/main.ts b/client/src/main.ts
index 52412ad1..b0b3f535 100644
--- a/client/src/main.ts
+++ b/client/src/main.ts
@@ -1,7 +1,7 @@
-import { createApp } from 'vue'
-import { createPinia } from 'pinia'
+import {createApp} from 'vue'
+import {createPinia} from 'pinia'
-import {setupI18n, loadLocaleMessages} from './i18n'
+import {setupI18n} from './i18n'
import App from './App.vue'
import router from './router'
@@ -11,7 +11,7 @@ const i18n = setupI18n()
const app = createApp(App)
// todo: define lang setup
-await loadLocaleMessages(i18n, 'de')
+// await loadLocaleMessages(i18n, 'de')
app.use(createPinia())
app.use(router)
diff --git a/client/src/router/index.ts b/client/src/router/index.ts
index 3b072d4c..4dfb3c49 100644
--- a/client/src/router/index.ts
+++ b/client/src/router/index.ts
@@ -36,8 +36,8 @@ const router = createRouter({
component: () => import('../views/ProfileView.vue'),
},
{
- path: '/learningpath/:learningPathId',
- component: () => import('../views/LearningPathOverview.vue'),
+ path: '/:pathMatch(.*)*',
+ component: () => import('../views/404View.vue'),
},
]
})
diff --git a/client/src/views/404View.vue b/client/src/views/404View.vue
new file mode 100644
index 00000000..4437a8d1
--- /dev/null
+++ b/client/src/views/404View.vue
@@ -0,0 +1,11 @@
+
+
+ 404 - Not Found as Vue view...
+
+
+
+
+
+
diff --git a/client/src/views/LearningPathOverview.vue b/client/src/views/LearningPathOverview.vue
deleted file mode 100644
index 197c1a8c..00000000
--- a/client/src/views/LearningPathOverview.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
- Lernpfad Overview
-
-
-
-
-
-
diff --git a/client/vite.config.ts b/client/vite.config.ts
index 6fcf6971..0420dde0 100644
--- a/client/vite.config.ts
+++ b/client/vite.config.ts
@@ -1,9 +1,8 @@
-import path from 'path'
import {fileURLToPath, URL} from 'url'
import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
-import vueI18n from '@intlify/vite-plugin-vue-i18n'
+// import vueI18n from '@intlify/vite-plugin-vue-i18n'
import alias from '@rollup/plugin-alias'
// https://vitejs.dev/config/
@@ -12,17 +11,18 @@ export default ({mode}) => {
return defineConfig({
plugins: [
vue(),
- vueI18n({
- include: path.resolve(__dirname, './locales/**')
- }),
+ // vueI18n({
+ // include: path.resolve(__dirname, './locales/**')
+ // }),
// won't work in vite's resolve.alias, so we'll make the alias here
alias({
- entries: [
- {
- find: 'vue-i18n',
- replacement: path.resolve(__dirname, './node_modules/vue-i18n/dist/vue-i18n.runtime.esm-bundler.js')
- }
- ]
+ // TODO: why is that used?
+ // entries: [
+ // {
+ // find: 'vue-i18n',
+ // replacement: path.resolve(__dirname, './node_modules/vue-i18n/dist/vue-i18n.runtime.esm-bundler.js')
+ // }
+ // ]
})
],
resolve: {
@@ -30,5 +30,8 @@ export default ({mode}) => {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
+ build: {
+ assetsDir: 'static/vue',
+ }
})
}
diff --git a/compose/django/Dockerfile b/compose/django/Dockerfile
index dbd61353..c437b663 100644
--- a/compose/django/Dockerfile
+++ b/compose/django/Dockerfile
@@ -13,10 +13,7 @@ FROM node:16-bullseye-slim as client-builder
ARG APP_HOME=/app
WORKDIR ${APP_HOME}
-COPY ./server/package.json ${APP_HOME}
-RUN npm install && npm cache clean --force
COPY ./server ${APP_HOME}
-RUN npm run build
# define an alias for the specfic python version used in this file.
FROM python:${PYTHON_VERSION} as python
diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh
index ddc94453..9c06873f 100644
--- a/compose/django/docker_start.sh
+++ b/compose/django/docker_start.sh
@@ -4,9 +4,8 @@ set -o errexit
set -o pipefail
set -o nounset
-
python /app/manage.py collectstatic --noinput
-python /app/manage.py migrate
python /app/manage.py createcachetable
+python /app/manage.py migrate
/usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:80 --chdir=/app -k uvicorn.workers.UvicornWorker
diff --git a/package.json b/package.json
index e648cbdd..6f79d5ff 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,8 @@
"name": "vbv_lernwelt_cypress",
"version": "1.0.0",
"scripts": {
+ "build": "npm install --prefix client && npm run build --prefix client && npm run build:tailwind",
+ "build:tailwind": "tailwindcss -i ./tailwind/input.css -o ./server/vbv_lernwelt/static/css/tailwind.css --minify",
"test": "echo \"Error: no test specified\" && exit 1",
"cypress:open": "cypress open",
"cypress:run": "cypress run",
diff --git a/prepare_server.sh b/prepare_server.sh
index 09d92220..81a13cf0 100755
--- a/prepare_server.sh
+++ b/prepare_server.sh
@@ -57,7 +57,7 @@ if [ "$SKIP_SETUP" = false ]; then
python3 server/manage.py createcachetable --settings="$DJANGO_SETTINGS_MODULE"
python3 server/manage.py migrate --settings="$DJANGO_SETTINGS_MODULE"
python3 server/manage.py create_default_users --settings="$DJANGO_SETTINGS_MODULE"
- python3 server/manage.py create_default_learningpath --settings="$DJANGO_SETTINGS_MODULE"
+ python3 server/manage.py create_default_learning_path --settings="$DJANGO_SETTINGS_MODULE"
# make django translations
(cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE")
diff --git a/production.yml b/production.yml
deleted file mode 100644
index f04b1f56..00000000
--- a/production.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-version: '3'
-
-volumes:
- production_postgres_data: {}
- production_postgres_data_backups: {}
- production_traefik: {}
-
-services:
- django:
- build:
- context: .
- dockerfile: ./compose/production/django/Dockerfile
- image: vbv_lernwelt_production_django
- depends_on:
- - postgres
- - redis
- env_file:
- - env_secrets/production.env
- command: /start
-
- postgres:
- build:
- context: .
- dockerfile: ./compose/production/postgres/Dockerfile
- image: vbv_lernwelt_production_postgres
- volumes:
- - production_postgres_data:/var/lib/postgresql/data:Z
- - production_postgres_data_backups:/backups:z
- env_file:
- - env_secrets/production.env
-
- traefik:
- build:
- context: .
- dockerfile: ./compose/production/traefik/Dockerfile
- image: vbv_lernwelt_production_traefik
- depends_on:
- - django
- volumes:
- - production_traefik:/etc/traefik/acme:z
- ports:
- - "0.0.0.0:80:80"
- - "0.0.0.0:443:443"
-
- redis:
- image: redis:6
diff --git a/server/config/urls.py b/server/config/urls.py
index efb530e4..209ba4bf 100644
--- a/server/config/urls.py
+++ b/server/config/urls.py
@@ -1,4 +1,3 @@
-
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
@@ -19,7 +18,7 @@ from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt
from vbv_lernwelt.core.views import (
rate_limit_exceeded_view,
permission_denied_view,
- check_rate_limit, vue_home,
+ check_rate_limit, vue_home, cypress_reset_view,
)
from .wagtail_api import api_router
@@ -65,6 +64,11 @@ urlpatterns += [
path("api/docs/", SpectacularSwaggerView.as_view(url_name="api-schema"), name="api-docs",),
path("", include(grapple_urls)),
]
+
+if settings.APP_ENVIRONMENT != 'production':
+ urlpatterns += [
+ re_path(r'cypressreset/$', cypress_reset_view, name='cypress_reset_view'),
+ ]
# fmt: on
diff --git a/server/setup_test_data.sh b/server/setup_test_data.sh
deleted file mode 100644
index 7a1dd173..00000000
--- a/server/setup_test_data.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-python manage.py migrate
-python manage.py createcachetable
-python manage.py create_default_users
-#python manage.py create_default_learingpath
-
diff --git a/server/vbv_lernwelt/core/create_default_users.py b/server/vbv_lernwelt/core/create_default_users.py
index 5cd12ce7..886e736f 100644
--- a/server/vbv_lernwelt/core/create_default_users.py
+++ b/server/vbv_lernwelt/core/create_default_users.py
@@ -4,17 +4,24 @@ from django.contrib.auth.models import Group
from vbv_lernwelt.core.models import User
-def create_default_users(user_model=User, group_model=Group):
+def create_default_users(user_model=User, group_model=Group, default_password=None):
admin_group, created = group_model.objects.get_or_create(name='admin_group')
content_creator_grop, created = group_model.objects.get_or_create(name='content_creator_grop')
student_group, created = group_model.objects.get_or_create(name='student_group')
- admin_user, created = _get_or_create_user(user_model=user_model, username='admin', password='admin')
+ admin_password = default_password
+ if not admin_password:
+ admin_password = 'admin'
+ admin_user, created = _get_or_create_user(user_model=user_model, username='admin', password=admin_password)
admin_user.is_superuser = True
+ admin_user.is_staff = True
admin_user.groups.add(admin_group)
admin_user.save()
- student_user, created = _get_or_create_user(user_model=user_model, username='student', password='student')
+ student_user_password = default_password
+ if not student_user_password:
+ student_user_password = 'student'
+ student_user, created = _get_or_create_user(user_model=user_model, username='student', password=student_user_password)
student_user.groups.add(student_group)
student_user.save()
diff --git a/server/vbv_lernwelt/core/management/commands/create_default_users.py b/server/vbv_lernwelt/core/management/commands/create_default_users.py
index 2d7c365d..2053c336 100644
--- a/server/vbv_lernwelt/core/management/commands/create_default_users.py
+++ b/server/vbv_lernwelt/core/management/commands/create_default_users.py
@@ -1,8 +1,7 @@
-from vbv_lernwelt.core.create_default_users import create_default_users
-
-
import djclick as click
+from vbv_lernwelt.core.create_default_users import create_default_users
+
@click.command()
def command():
diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py
index 76dbf7cb..934dc1f2 100644
--- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py
+++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py
@@ -1,7 +1,7 @@
-# pylint: disable=import-outside-toplevel
-
import djclick as click
-from django.contrib.auth import get_user_model
+
+from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path, \
+ delete_default_learning_path
@click.command()
@@ -9,17 +9,5 @@ from django.contrib.auth import get_user_model
def command(customer_language):
print("cypress reset data")
- User = get_user_model()
-
- users = [
- "cypress@example.com",
- ]
- for user in users:
- User.objects.filter(username=user).delete()
-
- user = User.objects.create(
- username=user,
- email=user,
- )
- user.set_password("test")
- user.save()
+ delete_default_learning_path()
+ create_default_learning_path()
diff --git a/server/vbv_lernwelt/core/migrations/0002_create_users.py b/server/vbv_lernwelt/core/migrations/0002_create_users.py
index 0d19f917..e5d92cfa 100644
--- a/server/vbv_lernwelt/core/migrations/0002_create_users.py
+++ b/server/vbv_lernwelt/core/migrations/0002_create_users.py
@@ -1,20 +1,16 @@
+from django.conf import settings
+from django.contrib.auth.models import Group
from django.db import migrations
+from vbv_lernwelt.core.create_default_users import create_default_users
from vbv_lernwelt.core.models import User
-def create_iterativ_users(apps, schema_editor):
- for username in [
- "info@iterativ.ch",
- ]:
- user = User.objects.create(
- username=username,
- email=username,
- is_superuser=True,
- is_staff=True,
- )
- user.set_password("ACEEs0DCmNaPxdoNV8vhccuCTRl9b")
- user.save()
+def create_users(apps, schema_editor):
+ default_password = 'ACEEs0DCmNaPxdoNV8vhccuCTRl9b'
+ if settings.APP_ENVIRONMENT == 'development':
+ default_password = None
+ create_default_users(user_model=User, group_model=Group, default_password=default_password)
class Migration(migrations.Migration):
@@ -23,5 +19,5 @@ class Migration(migrations.Migration):
]
operations = [
- migrations.RunPython(create_iterativ_users),
+ migrations.RunPython(create_users),
]
diff --git a/server/vbv_lernwelt/core/views.py b/server/vbv_lernwelt/core/views.py
index 50597690..52d37736 100644
--- a/server/vbv_lernwelt/core/views.py
+++ b/server/vbv_lernwelt/core/views.py
@@ -1,10 +1,14 @@
# Create your views here.
import requests
from django.conf import settings
-from django.http import JsonResponse, HttpResponse
+from django.core.management import call_command
+from django.http import JsonResponse, HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.views.decorators.csrf import ensure_csrf_cookie
from ratelimit.decorators import ratelimit
+from rest_framework import authentication
+from rest_framework.decorators import api_view, authentication_classes, permission_classes
+from rest_framework.permissions import IsAdminUser
from vbv_lernwelt.core.middleware.auth import django_view_authentication_exempt
@@ -24,7 +28,7 @@ def vue_home(request):
)
# render index.html from `npm run build`
- return render(request, 'index.html', {})
+ return render(request, 'vue/index.html', {})
def permission_denied_view(request, exception):
@@ -51,3 +55,13 @@ def server_json_error(request, *args, **kwargs):
@django_view_authentication_exempt
def check_rate_limit(request):
return HttpResponse(content=b"Hello")
+
+
+@api_view(['POST'])
+@authentication_classes((authentication.SessionAuthentication,))
+@permission_classes((IsAdminUser,))
+def cypress_reset_view(request):
+ if settings.APP_ENVIRONMENT != 'production':
+ call_command('cypress_reset')
+
+ return HttpResponseRedirect('/admin/')
diff --git a/server/vbv_lernwelt/learnpath/management/commands/create_default_learningpath.py b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py
similarity index 81%
rename from server/vbv_lernwelt/learnpath/management/commands/create_default_learningpath.py
rename to server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py
index 1f5702fb..7df9caaf 100644
--- a/server/vbv_lernwelt/learnpath/management/commands/create_default_learningpath.py
+++ b/server/vbv_lernwelt/learnpath/management/commands/create_default_learning_path.py
@@ -1,5 +1,3 @@
-# pylint: disable=import-outside-toplevel
-
import djclick as click
from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path
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
new file mode 100644
index 00000000..c07106f5
--- /dev/null
+++ b/server/vbv_lernwelt/learnpath/management/commands/delete_default_learning_path.py
@@ -0,0 +1,8 @@
+import djclick as click
+
+from vbv_lernwelt.learnpath.tests.create_default_learning_path import delete_default_learning_path
+
+
+@click.command()
+def command():
+ delete_default_learning_path()
diff --git a/server/vbv_lernwelt/learnpath/management/commands/delete_default_learningpath.py b/server/vbv_lernwelt/learnpath/management/commands/delete_default_learningpath.py
deleted file mode 100644
index 2da68a66..00000000
--- a/server/vbv_lernwelt/learnpath/management/commands/delete_default_learningpath.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# pylint: disable=import-outside-toplevel
-
-import djclick as click
-from django.contrib.auth import get_user_model
-
-from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path, \
- delete_default_learning_path
-
-import djclick as click
-
-
-@click.command()
-def command():
- delete_default_learning_path()
diff --git a/server/vbv_lernwelt/learnpath/migrations/0001_initial.py b/server/vbv_lernwelt/learnpath/migrations/0001_initial.py
index 6b3a574a..5d2b7871 100644
--- a/server/vbv_lernwelt/learnpath/migrations/0001_initial.py
+++ b/server/vbv_lernwelt/learnpath/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 3.2.12 on 2022-05-04 15:52
+# Generated by Django 3.2.12 on 2022-05-30 13:51
from django.db import migrations, models
import django.db.models.deletion
@@ -51,6 +51,18 @@ class Migration(migrations.Migration):
},
bases=('wagtailcore.page',),
),
+ migrations.CreateModel(
+ name='LearningPackage',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
+ ('title', models.CharField(default='', max_length=256)),
+ ],
+ options={
+ 'ordering': ['sort_order'],
+ 'abstract': False,
+ },
+ ),
migrations.CreateModel(
name='LearningPath',
fields=[
@@ -61,19 +73,6 @@ class Migration(migrations.Migration):
},
bases=('wagtailcore.page',),
),
- migrations.CreateModel(
- name='LearningSequence',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
- ('title', models.CharField(default='', max_length=256)),
- ('category', models.CharField(choices=[('INCIRCLE', 'In Circle'), ('START', 'Start'), ('END', 'End')], default='INCIRCLE', max_length=16)),
- ('circle', modelcluster.fields.ParentalKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_sequences', to='learnpath.circle')),
- ],
- options={
- 'verbose_name': 'Learning Sequence',
- },
- ),
migrations.CreateModel(
name='Topic',
fields=[
@@ -93,17 +92,36 @@ class Migration(migrations.Migration):
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('contents', wagtail.core.fields.StreamField([('web_based_training', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())])), ('video', wagtail.core.blocks.StructBlock([('url', wagtail.core.blocks.URLBlock())]))], blank=True, null=True)),
- ('learning_sequence', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_units', to='learnpath.learningsequence')),
+ ('learning_package', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_units', to='learnpath.learningpackage')),
],
options={
'verbose_name': 'Learning Unit',
},
bases=('wagtailcore.page', models.Model),
),
+ migrations.CreateModel(
+ name='LearningSequence',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
+ ('title', models.CharField(default='', max_length=256)),
+ ('category', models.CharField(choices=[('INCIRCLE', 'In Circle'), ('START', 'Start'), ('END', 'End')], default='INCIRCLE', max_length=16)),
+ ('circle', modelcluster.fields.ParentalKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_sequences', to='learnpath.circle')),
+ ],
+ options={
+ 'verbose_name': 'Learning Sequence',
+ },
+ ),
+ migrations.AddField(
+ model_name='learningpackage',
+ name='learning_sequence',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_packages', to='learnpath.learningsequence'),
+ ),
migrations.CreateModel(
name='FullfillmentCriteria',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
('name', models.CharField(max_length=2048)),
('competence', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='learnpath.competence')),
],
diff --git a/server/vbv_lernwelt/learnpath/migrations/0002_fullfillmentcriteria_sort_order.py b/server/vbv_lernwelt/learnpath/migrations/0002_fullfillmentcriteria_sort_order.py
deleted file mode 100644
index 5fe74a62..00000000
--- a/server/vbv_lernwelt/learnpath/migrations/0002_fullfillmentcriteria_sort_order.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.2.12 on 2022-05-04 16:00
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('learnpath', '0001_initial'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='fullfillmentcriteria',
- name='sort_order',
- field=models.IntegerField(blank=True, editable=False, null=True),
- ),
- ]
diff --git a/server/vbv_lernwelt/learnpath/migrations/0003_auto_20220512_1456.py b/server/vbv_lernwelt/learnpath/migrations/0003_auto_20220512_1456.py
deleted file mode 100644
index 6e3dd602..00000000
--- a/server/vbv_lernwelt/learnpath/migrations/0003_auto_20220512_1456.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Generated by Django 3.2.12 on 2022-05-12 12:56
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('learnpath', '0002_fullfillmentcriteria_sort_order'),
- ]
-
- operations = [
- migrations.RemoveField(
- model_name='learningunit',
- name='learning_sequence',
- ),
- migrations.CreateModel(
- name='LearningPackage',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('sort_order', models.IntegerField(blank=True, editable=False, null=True)),
- ('title', models.CharField(default='', max_length=256)),
- ('learning_sequence', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_packages', to='learnpath.learningsequence')),
- ],
- options={
- 'ordering': ['sort_order'],
- 'abstract': False,
- },
- ),
- migrations.AddField(
- model_name='learningunit',
- name='learning_package',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='learning_units', to='learnpath.learningpackage'),
- ),
- ]
diff --git a/server/vbv_lernwelt/learnpath/migrations/0004_alter_learningpackage_learning_sequence.py b/server/vbv_lernwelt/learnpath/migrations/0004_alter_learningpackage_learning_sequence.py
deleted file mode 100644
index fd4b51c7..00000000
--- a/server/vbv_lernwelt/learnpath/migrations/0004_alter_learningpackage_learning_sequence.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by Django 3.2.12 on 2022-05-12 12:56
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('learnpath', '0003_auto_20220512_1456'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='learningpackage',
- name='learning_sequence',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_packages', to='learnpath.learningsequence'),
- ),
- ]
diff --git a/server/vbv_lernwelt/learnpath/migrations/0005_alter_learningunit_learning_package.py b/server/vbv_lernwelt/learnpath/migrations/0005_alter_learningunit_learning_package.py
deleted file mode 100644
index 6a1128a7..00000000
--- a/server/vbv_lernwelt/learnpath/migrations/0005_alter_learningunit_learning_package.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by Django 3.2.12 on 2022-05-12 12:56
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('learnpath', '0004_alter_learningpackage_learning_sequence'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='learningunit',
- name='learning_package',
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='learning_units', to='learnpath.learningpackage'),
- ),
- ]
diff --git a/server/vbv_lernwelt/learnpath/tests/competences_factories.py b/server/vbv_lernwelt/learnpath/tests/competences_factories.py
index 6a043add..fd6ed29e 100644
--- a/server/vbv_lernwelt/learnpath/tests/competences_factories.py
+++ b/server/vbv_lernwelt/learnpath/tests/competences_factories.py
@@ -2,7 +2,7 @@ import factory
import wagtail_factories
from vbv_lernwelt.learnpath.models_competences import Competence, FullfillmentCriteria, CompetencePage
-from vbv_lernwelt.learnpath.tests.learningpath_factories import LearningPathFactory
+from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory
class CompetencePageFactory(wagtail_factories.PageFactory):
diff --git a/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py
index 06946978..a9ae001c 100644
--- a/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py
+++ b/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py
@@ -1,8 +1,9 @@
import wagtail_factories
+from django.conf import settings
from wagtail.core.models import Site
from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit
-from vbv_lernwelt.learnpath.tests.learningpath_factories import LearningPathFactory, TopicFactory, CircleFactory, \
+from vbv_lernwelt.learnpath.tests.learning_path_factories import LearningPathFactory, TopicFactory, CircleFactory, \
LearningSequenceFactory, LearningUnitFactory, VideoBlockFactory, WebBasedTrainingBlockFactory, \
LearningPackageFactory
@@ -13,8 +14,9 @@ def create_default_learning_path():
if not site:
site = wagtail_factories.SiteFactory(is_default_site=True)
- site.port = 8000
- site.save()
+ if settings.APP_ENVIRONMENT == 'development':
+ site.port = 8000
+ site.save()
# create_default_competences()
diff --git a/server/vbv_lernwelt/learnpath/tests/learningpath_factories.py b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
similarity index 99%
rename from server/vbv_lernwelt/learnpath/tests/learningpath_factories.py
rename to server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
index 3e9ff9c8..1df771da 100644
--- a/server/vbv_lernwelt/learnpath/tests/learningpath_factories.py
+++ b/server/vbv_lernwelt/learnpath/tests/learning_path_factories.py
@@ -1,5 +1,6 @@
-import wagtail_factories
import factory
+import wagtail_factories
+
from vbv_lernwelt.learnpath.models import LearningPath, Topic, Circle, LearningSequence, LearningUnit, LearningPackage
from vbv_lernwelt.learnpath.models_learning_unit_content import VideoBlock, WebBasedTrainingBlock
diff --git a/server/vbv_lernwelt/learnpath/tests/test_api.py b/server/vbv_lernwelt/learnpath/tests/test_api.py
index 05f08641..8b412f7e 100644
--- a/server/vbv_lernwelt/learnpath/tests/test_api.py
+++ b/server/vbv_lernwelt/learnpath/tests/test_api.py
@@ -1,5 +1,3 @@
-from django.test import TestCase
-
from rest_framework.test import APITestCase
from vbv_lernwelt.core.admin import User
@@ -14,8 +12,8 @@ class TestRetrieveLearingPathContents(APITestCase):
def setUpClass(cls) -> None:
super(TestRetrieveLearingPathContents, cls).setUpClass()
create_locales_for_wagtail()
- create_default_learning_path()
create_default_users()
+ create_default_learning_path()
def setUp(self) -> None:
qs = LearningPath.objects.filter(title="Versicherungsvermittler/in")
diff --git a/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py b/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py
index 714dc179..64cdd3c5 100644
--- a/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py
+++ b/server/vbv_lernwelt/learnpath/tests/test_create_default_competences.py
@@ -1,10 +1,6 @@
-from django.conf import settings
from django.test import TestCase
-from wagtail.core.models import Locale
-from vbv_lernwelt.learnpath.models import LearningPath
from vbv_lernwelt.learnpath.tests.create_default_competences import create_default_competences
-from vbv_lernwelt.learnpath.tests.create_default_learning_path import create_default_learning_path
class TestCreateDefaultCompetences(TestCase):
diff --git a/server/vbv_lernwelt/static/vue/.gitkeep b/server/vbv_lernwelt/static/vue/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/server/vbv_lernwelt/templates/admin/index.html b/server/vbv_lernwelt/templates/admin/index.html
new file mode 100644
index 00000000..61e80fee
--- /dev/null
+++ b/server/vbv_lernwelt/templates/admin/index.html
@@ -0,0 +1,15 @@
+{% extends "admin/index.html" %}
+
+{% block content %}
+
+ {% include "admin/app_list.html" with app_list=app_list show_changelinks=True %}
+
+
+
+
+
+
+{% endblock %}
diff --git a/server/vbv_lernwelt/templates/base.html b/server/vbv_lernwelt/templates/base.html
index d6cf109e..a9d781d5 100644
--- a/server/vbv_lernwelt/templates/base.html
+++ b/server/vbv_lernwelt/templates/base.html
@@ -8,29 +8,22 @@
-
-
{% block css %}
+
-
-
{% endblock %}
{# Placed at the top of the document so pages load faster with defer #}
-
{% block javascript %}
-
-
-
{% endblock javascript %}
diff --git a/server/vbv_lernwelt/templates/vue/.gitkeep b/server/vbv_lernwelt/templates/vue/.gitkeep
new file mode 100644
index 00000000..e69de29b