import os
import signal
import subprocess
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.exceptions import ObjectDoesNotExist
from django.core.management import call_command
from .constants import (
FOBI_TEST_USER_PASSWORD,
FOBI_TEST_USER_USERNAME,
TEST_FORM_NAME,
TEST_FORM_SLUG,
)
from .core import is_app_setup_completed, mark_app_setup_as_completed
from fobi.contrib.plugins.form_elements.content.content_image.fobi_form_elements import (
ContentImagePlugin,
)
from fobi.contrib.plugins.form_elements.content.content_text.fobi_form_elements import (
ContentTextPlugin,
)
from fobi.contrib.plugins.form_elements.fields.boolean.fobi_form_elements import (
BooleanSelectPlugin,
)
from fobi.contrib.plugins.form_elements.fields.email.fobi_form_elements import (
EmailInputPlugin,
)
from fobi.contrib.plugins.form_elements.fields.hidden.fobi_form_elements import (
HiddenInputPlugin,
)
from fobi.contrib.plugins.form_elements.fields.integer.fobi_form_elements import (
IntegerInputPlugin,
)
from fobi.contrib.plugins.form_elements.fields.text.fobi_form_elements import (
TextInputPlugin,
)
from fobi.contrib.plugins.form_elements.fields.textarea.fobi_form_elements import (
TextareaPlugin,
)
from fobi.contrib.plugins.form_handlers.db_store.fobi_form_handlers import (
DBStoreHandlerPlugin,
)
from fobi.contrib.plugins.form_handlers.mail.fobi_form_handlers import (
MailHandlerPlugin,
)
from fobi.models import FormElementEntry, FormEntry, FormHandlerEntry
__title__ = "fobi.tests.helpers"
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2014-2019 Artur Barseghyan"
__license__ = "GPL 2.0/LGPL 2.1"
__all__ = (
"create_form_with_entries",
"db_clean_up",
"get_or_create_admin_user",
"get_or_create_admin_user",
"phantom_js_clean_up",
"setup_app",
)
# ****************************************************************************
# **************** Safe User import for Django > 1.5, < 1.8 ******************
# ****************************************************************************
AUTH_USER_MODEL = settings.AUTH_USER_MODEL
# ****************************************************************************
# ****************************************************************************
# ****************************************************************************
[docs]def get_or_create_admin_user():
"""Create a user for testing the fobi.
TODO: At the moment an admin account is being tested. Automated tests
with diverse accounts are to be implemented.
"""
User = get_user_model()
try:
kwargs = {
User.USERNAME_FIELD: FOBI_TEST_USER_USERNAME,
}
u = User._default_manager.get(**kwargs)
return u
except ObjectDoesNotExist as e:
u = User()
setattr(u, User.USERNAME_FIELD, FOBI_TEST_USER_USERNAME)
u.email = "admin@dev.django-fobi.example.com"
u.is_superuser = True
u.is_staff = True
u.set_password(FOBI_TEST_USER_PASSWORD)
try:
u.save()
return u
except Exception as err:
pass
[docs]def setup_app(collectstatic=False, fobi_sync_plugins=False):
"""Set up fobi."""
if is_app_setup_completed():
return False
if collectstatic:
call_command("collectstatic", verbosity=3, interactive=False)
if fobi_sync_plugins:
call_command("fobi_sync_plugins", verbosity=3, interactive=False)
# call_command('loaddata', 'dash', verbosity=3, interactive=False)
mark_app_setup_as_completed()
[docs]def db_clean_up(clean_form=False, clean_elements=True, clean_handlers=True):
"""Clean up the database.
Clean up the database by removing all form element and form handler
entries.
"""
if clean_form:
FormEntry._default_manager.all().delete()
if clean_elements:
FormElementEntry._default_manager.all().delete()
if clean_handlers:
FormHandlerEntry._default_manager.all().delete()
[docs]def phantom_js_clean_up():
"""Clean up Phantom JS.
Kills all phantomjs instances, disregard of their origin.
"""
processes = subprocess.Popen(["ps", "-A"], stdout=subprocess.PIPE)
out, err = processes.communicate()
for line in out.splitlines():
if "phantomjs" in line:
pid = int(line.split(None, 1)[0])
os.kill(pid, signal.SIGKILL)