Added function to create testdata and DB
This commit is contained in:
parent
3496a20489
commit
cd4276a7a5
Binary file not shown.
|
|
@ -1,16 +1,45 @@
|
|||
#!/bin/bash
|
||||
source ./setup-for-tests.sh
|
||||
|
||||
export DATABASE_HOST=postgres
|
||||
export DATABASE_PORT=5432
|
||||
export DATABASE_URL=postgres://$DATABASE_USER:$PG_PASSWORD@$DATABASE_HOST:$DATABASE_PORT/$DATABASE_NAME
|
||||
psql -U $DATABASE_USER -h $DATABASE_HOST -c "drop database $DATABASE_NAME"
|
||||
#export DATABASE_HOST=postgres
|
||||
#export DATABASE_PORT=5432
|
||||
#export DATABASE_URL=postgres://$DATABASE_USER:$PG_PASSWORD@$DATABASE_HOST:$DATABASE_PORT/$DATABASE_NAME
|
||||
#
|
||||
#echo $DATABASE_URL
|
||||
#DJANGO_SETTINGS_MODULE=config.settings.base
|
||||
#DATABASE_NAME=vbv_lernwelt
|
||||
SKIP_SETUP=false
|
||||
##
|
||||
|
||||
echo "Setting up VBV Project for Local usage"
|
||||
if [ "$SKIP_SETUP" = false ]; then
|
||||
if [ -z "$PG_PORT" ]; then # if the port is set in the env, use iterg
|
||||
DB_PORT="";
|
||||
else
|
||||
DB_PORT="-p $PG_PORT";
|
||||
fi
|
||||
if [ -z "$PG_USER" ]; then # if the user is set in the env, use it
|
||||
DB_USER="";
|
||||
else
|
||||
DB_USER="-U $PG_USER";
|
||||
fi
|
||||
echo "psql -h localhost --port=$DB_PORT --username=$DB_USER -c 'drop database if exists' $DATABASE_NAME;"
|
||||
|
||||
echo "Drop all connections to the database"
|
||||
psql -h localhost --port=$DB_PORT --username=$DB_USER -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$DATABASE_NAME' AND pid <> pg_backend_pid();"
|
||||
|
||||
echo "Drop database: $DATABASE_NAME"
|
||||
psql -h localhost --port=$DB_PORT --username=$DB_USER -c "drop database if exists $DATABASE_NAME;"
|
||||
|
||||
echo "Create database: $DATABASE_NAME"
|
||||
psql -h localhost --port=$DB_PORT --username=$DB_USER -c "create database $DATABASE_NAME;"
|
||||
|
||||
# reset data
|
||||
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"
|
||||
#
|
||||
# # make django translations
|
||||
(cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE")
|
||||
fi
|
||||
|
||||
npm install --prefix client
|
||||
#npm run "install:cypress" --prefix client
|
||||
psql -U $DATABASE_USER -h $DATABASE_HOST -c "create database $DATABASE_NAME"
|
||||
python server/manage.py dummy_data
|
||||
python server/manage.py runserver &
|
||||
npm run dev --prefix client &
|
||||
cd client
|
||||
/node_modules/.bin/cypress run
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ DJANGO_SETTINGS_MODULE=config.settings.test_cypress
|
|||
CYPRESS_DB=vbv_lernwelt_cypress
|
||||
|
||||
if [ "$SKIP_SETUP" = false ]; then
|
||||
if [ -z "$PG_PORT" ]; then # if the port is set in the env, use it
|
||||
if [ -z "$PG_PORT" ]; then # if the port is set in the env, use iterg
|
||||
DB_PORT="";
|
||||
else
|
||||
DB_PORT="-p $PG_PORT";
|
||||
|
|
@ -66,12 +66,7 @@ if [ "$SKIP_SETUP" = false ]; then
|
|||
# make django translations
|
||||
(cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE")
|
||||
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set API_WFM_BACKEND_ENABLED true
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set TIBCO_SOAP_CUSTOMER_INTERACTION_CLIENT_ENABLED true
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set API_EMAIL_MESSAGING_ENABLED true
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set C4_NOTIFICATIONS_ENABLED true
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set SFTP_POSTFINANCE_ENABLED true
|
||||
# python3 src/manage.py constance --settings="$DJANGO_SETTINGS_MODULE" set EASY_INSURANCE_AGENT_CAN_CREATE true
|
||||
|
||||
else
|
||||
echo "else"
|
||||
# python3 src/manage.py recreate_customer_data_for_integration_tests --settings="$DJANGO_SETTINGS_MODULE"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
# pylint: disable=unused-wildcard-import,wildcard-import,wrong-import-position
|
||||
import getpass
|
||||
import os
|
||||
|
||||
from .base import * # noqa
|
||||
from .base import env
|
||||
|
||||
# GENERAL
|
||||
# ------------------------------------------------------------------------------
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#secret-key
|
||||
SECRET_KEY = env(
|
||||
"VBV_DJANGO_SECRET_KEY",
|
||||
default="1NpUCSvAKLpDZL9e3tqDaUesdfsadfasdfasdfMD3UjB72ZS",
|
||||
)
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#test-runner
|
||||
TEST_RUNNER = "django.test.runner.DiscoverRunner"
|
||||
|
||||
# PASSWORDS
|
||||
# ------------------------------------------------------------------------------
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#password-hashers
|
||||
PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
|
||||
|
||||
# EMAIL
|
||||
# ------------------------------------------------------------------------------
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
|
||||
EMAIL_BACKEND = "django.core.mail.backends.locmem.EmailBackend"
|
||||
|
||||
|
||||
class DisableMigrations(dict):
|
||||
def __contains__(self, item):
|
||||
return True
|
||||
|
||||
def __getitem__(self, item):
|
||||
return None
|
||||
|
||||
#MIGRATION_MODULES = DisableMigrations()
|
||||
|
||||
|
||||
|
||||
|
||||
# Your stuff...
|
||||
# ------------------------------------------------------------------------------
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
from django.contrib.auth.hashers import make_password
|
||||
from django.contrib.auth.models import Group
|
||||
|
||||
from models import User
|
||||
from vbv_lernwelt.core.models import User
|
||||
|
||||
|
||||
def create_test_users(user_model=User, group_model=Group):
|
||||
def create_default_users(user_model=User, group_model=Group):
|
||||
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')
|
||||
|
|
@ -12,9 +12,10 @@ def create_test_users(user_model=User, group_model=Group):
|
|||
admin_user, created = _get_or_create_user(user_model=user_model,
|
||||
username='admin',
|
||||
password='admin')
|
||||
admin_user.is_superuser=True
|
||||
admin_user.groups.add(admin_group)
|
||||
admin_user.save()
|
||||
|
||||
admin_user.save()
|
||||
student_user, created = _get_or_create_user(user_model=user_model, username='student', password='student')
|
||||
student_user.groups.add(student_group)
|
||||
student_user.save()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Iterativ GmbH
|
||||
# http://www.iterativ.ch/
|
||||
#
|
||||
# Copyright (c) 2015 Iterativ GmbH. All rights reserved.
|
||||
#
|
||||
# Created on 2022-04-05
|
||||
# @author: lorenz.padberg@iterativ.ch
|
||||
from vbv_lernwelt.core.create_default_users import create_default_users
|
||||
|
||||
|
||||
import djclick as click
|
||||
|
||||
|
||||
@click.command()
|
||||
def command():
|
||||
print("Creating default users.")
|
||||
create_default_users()
|
||||
|
|
|
|||
|
|
@ -1,117 +0,0 @@
|
|||
import os
|
||||
import random
|
||||
import shutil
|
||||
from uuid import uuid1
|
||||
|
||||
import wagtail_factories
|
||||
from django.conf import settings
|
||||
from django.core import management
|
||||
from django.core.management import BaseCommand
|
||||
from django.db import connection
|
||||
from wagtail.core.models import Page
|
||||
|
||||
from books.factories import BookFactory, TopicFactory, ModuleFactory, ChapterFactory, ContentBlockFactory
|
||||
from core.factories import UserFactory
|
||||
from objectives.factories import ObjectiveGroupFactory, ObjectiveFactory
|
||||
from users.services import create_users, create_student
|
||||
|
||||
from .data.module_data import data
|
||||
from .data.user_data import user_data
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
||||
def ensure_clean_dir(self, folder):
|
||||
path = os.path.join(settings.MEDIA_ROOT, folder)
|
||||
if os.path.exists(path):
|
||||
shutil.rmtree(path)
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
|
||||
def filter_data(self, input_data, filter_keyword):
|
||||
filters = [filter_keyword] if not isinstance(filter_keyword, list) else filter_keyword
|
||||
return {k: v for (k, v) in input_data.items() if not (k in filters)}
|
||||
|
||||
def handle(self, *args, **options):
|
||||
with connection.cursor() as cursor:
|
||||
cursor.execute("DROP SCHEMA IF EXISTS public CASCADE;")
|
||||
cursor.execute(
|
||||
"CREATE SCHEMA IF NOT EXISTS public AUTHORIZATION {};".format(settings.DATABASES['default']['USER']))
|
||||
cursor.execute("GRANT ALL ON SCHEMA public TO {};".format(settings.DATABASES['default']['USER']))
|
||||
management.call_command('migrate', verbosity=0, interactive=False)
|
||||
|
||||
self.ensure_clean_dir('images')
|
||||
self.ensure_clean_dir('original_images')
|
||||
self.ensure_clean_dir('documents')
|
||||
|
||||
site = wagtail_factories.SiteFactory.create(is_default_site=True)
|
||||
|
||||
Page.objects.get(title='Root').delete()
|
||||
|
||||
UserFactory(
|
||||
username='test',
|
||||
is_staff=True,
|
||||
is_superuser=True,
|
||||
first_name='Nicol',
|
||||
last_name='Bolas',
|
||||
onboarding_visited=True
|
||||
)
|
||||
|
||||
create_users(user_data)
|
||||
|
||||
# create student without class
|
||||
create_student(
|
||||
username='hansli',
|
||||
first_name='Hansli',
|
||||
last_name='Alleini'
|
||||
)
|
||||
|
||||
for book_idx, book_data in enumerate(data):
|
||||
book = BookFactory.create(parent=site.root_page, **self.filter_data(book_data, 'topics'))
|
||||
|
||||
default_topics = [{} for _ in range(0, random.randint(5, 8))]
|
||||
topics_data = book_data.get('topics', default_topics)
|
||||
|
||||
for topic_idx, topic_data in enumerate(topics_data):
|
||||
topic = TopicFactory.create(parent=book, **self.filter_data(topic_data, 'modules'))
|
||||
|
||||
default_modules = [{} for _ in range(0, random.randint(3, 6))]
|
||||
modules_data = topic_data.get('modules', default_modules)
|
||||
|
||||
for module_idx, module_data in enumerate(modules_data):
|
||||
module = ModuleFactory.create(parent=topic,
|
||||
**self.filter_data(module_data, ['objective_groups', 'chapters']))
|
||||
|
||||
default_objective_groups = [{} for _ in range(0, 2)]
|
||||
objective_group_data = module_data.get('objective_groups', default_objective_groups)
|
||||
|
||||
for objective_group_idx, objective_group_entry in enumerate(objective_group_data):
|
||||
factory_params = self.filter_data(objective_group_entry, 'objectives')
|
||||
objective_group = ObjectiveGroupFactory.create(module=module,
|
||||
|
||||
**factory_params)
|
||||
|
||||
default_objectives = [{} for _ in range(0, 4)]
|
||||
objectives_data = objective_group_entry.get('objectives', default_objectives)
|
||||
|
||||
for objective_idx, objective_data in enumerate(objectives_data):
|
||||
ObjectiveFactory.create(group=objective_group, **objective_data)
|
||||
|
||||
default_chapters = [{} for _ in range(0, 2)]
|
||||
chapters_data = module_data.get('chapters', default_chapters)
|
||||
|
||||
for chapter_idx, chapter_data in enumerate(chapters_data):
|
||||
chapter = ChapterFactory.create(parent=module,
|
||||
**self.filter_data(chapter_data, 'content_blocks'))
|
||||
|
||||
default_content_blocks = [{} for _ in range(0, 4)]
|
||||
content_blocks_data = chapter_data.get('content_blocks', default_content_blocks)
|
||||
|
||||
for content_block_idx, content_block_data in enumerate(content_blocks_data):
|
||||
# ContentBlockFactory.create(parent=chapter, **self.filter_data(content_block_data, 'contents'))
|
||||
ContentBlockFactory.create(parent=chapter, module=module, slug=f'{uuid1()}', **content_block_data)
|
||||
|
||||
# now create all and rooms
|
||||
management.call_command('dummy_rooms', verbosity=0)
|
||||
management.call_command('dummy_news', verbosity=0)
|
||||
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
# 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
|
||||
from django.conf import settings
|
||||
from wagtail.core.models import Locale
|
||||
|
||||
|
||||
@click.command()
|
||||
def command():
|
||||
delete_default_learning_path()
|
||||
for language in settings.WAGTAIL_CONTENT_LANGUAGES:
|
||||
Locale.objects.create(language_code=language[0])
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import structlog
|
|||
from django.conf import settings
|
||||
from rest_framework.throttling import UserRateThrottle
|
||||
from structlog.types import EventDict
|
||||
|
||||
#from .models import User
|
||||
|
||||
def structlog_add_app_info(
|
||||
logger: logging.Logger, method_name: str, event_dict: EventDict
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 3.2.12 on 2022-04-12 12:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('learnpath', '0002_alter_circle_description'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='circle',
|
||||
name='goals',
|
||||
field=models.TextField(blank=True, default=''),
|
||||
),
|
||||
]
|
||||
|
|
@ -50,10 +50,16 @@ class Topic(Page):
|
|||
|
||||
class Circle(Page):
|
||||
description = models.TextField(default="", blank=True)
|
||||
goals = models.TextField(default="", blank=True)
|
||||
|
||||
parent_page_types = ['learnpath.Topic']
|
||||
subpage_types = ['learnpath.LearningSequence']
|
||||
|
||||
content_panels = Page.content_panels + [
|
||||
FieldPanel('description'),
|
||||
FieldPanel('goals'),
|
||||
]
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Circle"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@ import wagtail_factories
|
|||
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, LearningSequenceFactory, LearningUnitFactory
|
||||
from vbv_lernwelt.learnpath.tests.learningpath_factories import LearningPathFactory, TopicFactory, CircleFactory, \
|
||||
LearningSequenceFactory, LearningUnitFactory
|
||||
|
||||
|
||||
def create_default_learning_path():
|
||||
|
|
@ -26,13 +27,51 @@ def create_default_learning_path():
|
|||
lu_1 = LearningUnitFactory.create(title="Herzlich Willkommmen", parent=ls_2)
|
||||
|
||||
tp = TopicFactory.create(title="Gewinnen von Kunden", parent=lp)
|
||||
circle_2 = CircleFactory.create(title="Gewinnen", parent=tp)
|
||||
circle_2 = CircleFactory.create(title="Gewinnen", parent=tp, description="""Versicherungsvermittlerinnen und -vermittler verfügen über
|
||||
ein starkes Netzwerk, das sie gezielt pflegen und ausbauen. Sie beraten und betreuen ihre bestehenden Kundinnen und Kunden professionell und gewinnen so ihr Vertrauen. Dadurch schaffen sie die Basis für das Gewinnen
|
||||
von neuen Kundinnen und Kunden. Versicherungsvermittlerinnen und -vermittler sprechen ihre bestehenden Kundinnen
|
||||
und Kunden auf Weiterempfehlung an. So nutzen sie ihre
|
||||
bestehenden Kontakte geschickt für das Anwerben von
|
||||
Neukundinnen und -kunden.
|
||||
""", goals="""— Bestehende Kunden so zu beraten, dass
|
||||
sie von diesen weiterempfohlen werden
|
||||
— Geeignete Personen wie z.B. Garagisten, Architekten, Treuhänder auf die
|
||||
Vermittlung/Zusammenarbeit anzusprechen
|
||||
— Verschiedene Datenquellen wie Internet, Telefonbuch, Handelszeitung, Baugesuche etc. Gezielt für die Gewinnung
|
||||
von Neukunden zu benützen
|
||||
— Ein beliebiges Gespräch resp. Einen bestehenden Kontakt in die Richtung
|
||||
«Versicherung» zu lenken
|
||||
— Das Thema Risiko und Sicherheit in einem Gespräch gezielt und auf die Situation des jeweiligen Gesprächspartners bezogen einfliessen zu lassen
|
||||
— Im täglichen Kontakt potenzielle Kundinnen und Kunden zu erkennen""")
|
||||
|
||||
tp = TopicFactory.create(title="Beraten der Kunden", parent=lp)
|
||||
circle_3 = CircleFactory.create(title="Einstieg", parent=tp)
|
||||
circle_4 = CircleFactory.create(title="Analyse", parent=tp)
|
||||
circle_5 = CircleFactory.create(title="Lösung", parent=tp)
|
||||
circle_6 = CircleFactory.create(title="Abschluss", parent=tp)
|
||||
circle_4 = CircleFactory.create(title="Analyse", parent=tp,
|
||||
description="""Nach dem Gespräch werten sie die Analyse aus und erstellen mit den
|
||||
zur Verfügung stehenden Systemen formal korrekte Lösungsvorschläge bzw.
|
||||
Ausschreibungen. Je nach Komplexität der Situation ziehen sie die nötigen
|
||||
Fachspezialisten bei.""",
|
||||
goals="""
|
||||
— Aus dem IST-Zustand (aus der durchgeführten Analyse) individuelle, risikogewichtete und finanzierbare Lösungsvorschläge zu erarbeiten
|
||||
— Eine Unterversicherung, eine Doppeloder Überversicherung oder einen fehlenden Versicherungsschutz festzustellen
|
||||
— Mögliches Optimierungspotential unter Berücksichtigung der finanziellen
|
||||
Situation des Kunden zu erkennen
|
||||
— Lösungsvorschläge zu skizzieren und
|
||||
zu visualisieren""")
|
||||
|
||||
circle_5 = CircleFactory.create(title="Lösung",
|
||||
parent=tp,
|
||||
goals="""— Die Daten des Kunden korrekt in die notwendigen Systeme einzutragen
|
||||
— Fachspezialisten beizuziehen, falls dies angezeigt ist
|
||||
— Mit den zur Verfügung stehenden Systemen korrekte Lösungsvorschläge
|
||||
(z.B. Offerten oder Ausschreibungen) zu verfassen
|
||||
— Falls nötig die Lösungsvorschläge dem Underwriting weiterzuleiten und
|
||||
Unklarheiten zu bereinigen """)
|
||||
|
||||
circle_6 = CircleFactory.create(title="Abschluss",
|
||||
parent=tp,
|
||||
goals="""— Je nach Komplexität der Lösungsvorschläge (z.B. Offerten oder Offertvergleich) einen Fachspezialisten aufzubieten
|
||||
— Sich kundenorientiert auf das Gespräch vorzubereiten und sich passend zu präsentieren""")
|
||||
|
||||
tp = TopicFactory.create(title="Betreuen und Ausbauen des Kundenstamms", parent=lp)
|
||||
circle_7 = CircleFactory.create(title="Betreuen", parent=tp)
|
||||
|
|
@ -47,4 +86,3 @@ def delete_default_learning_path():
|
|||
Circle.objects.all().delete()
|
||||
Topic.objects.all().delete()
|
||||
LearningPath.objects.all().delete()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue