Test for Snippet Link Handler
This commit is contained in:
parent
2266946165
commit
399ebd1d6f
14 changed files with 175 additions and 8 deletions
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -1 +1,12 @@
|
||||||
.venv
|
.venv
|
||||||
|
.idea/
|
||||||
|
MANIFEST
|
||||||
|
*.pyc
|
||||||
|
*.egg-info
|
||||||
|
dist/
|
||||||
|
*.egg
|
||||||
|
*.tar.gz
|
||||||
|
.eggs/
|
||||||
|
.DS_Store
|
||||||
|
.cache/
|
||||||
|
.pytest_cache/
|
||||||
|
|
|
@ -10,7 +10,7 @@ env:
|
||||||
install:
|
install:
|
||||||
- pip install -U pip
|
- pip install -U pip
|
||||||
- pip install .
|
- pip install .
|
||||||
- pip install pytest
|
- pip install pytest pytest-django pytest-pythonpath wagtail-factories
|
||||||
script:
|
script:
|
||||||
- pytest
|
- pytest
|
||||||
deploy:
|
deploy:
|
||||||
|
|
4
pytest.ini
Normal file
4
pytest.ini
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[pytest]
|
||||||
|
django_find_project = false
|
||||||
|
DJANGO_SETTINGS_MODULE = tests.test_settings
|
||||||
|
python_paths = tests
|
3
tests/conftest.py
Normal file
3
tests/conftest.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
pytest_plugins = [
|
||||||
|
'tests.fixtures'
|
||||||
|
]
|
8
tests/fixtures.py
Normal file
8
tests/fixtures.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def site():
|
||||||
|
from wagtail.core.models import Site
|
||||||
|
site = Site.objects.get(is_default_site=True)
|
||||||
|
return site
|
86
tests/test_settings.py
Normal file
86
tests/test_settings.py
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
|
||||||
|
ADMINS = (
|
||||||
|
('test@example.com', 'TEST-R'),
|
||||||
|
)
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
'NAME': 'tests.db',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
SECRET_KEY = '_uobce43e5osp8xgsffssffsds2_16%y$sf*5(12vfg25hpnxik_*'
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
'wagtail.contrib.forms',
|
||||||
|
'wagtail.contrib.redirects',
|
||||||
|
'wagtail.embeds',
|
||||||
|
'wagtail.sites',
|
||||||
|
'wagtail.users',
|
||||||
|
'wagtail.snippets',
|
||||||
|
'wagtail.documents',
|
||||||
|
'wagtail.images',
|
||||||
|
'wagtail.search',
|
||||||
|
'wagtail.admin',
|
||||||
|
'wagtail.core',
|
||||||
|
'modelcluster',
|
||||||
|
'taggit',
|
||||||
|
|
||||||
|
'django.contrib.admin',
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.staticfiles',
|
||||||
|
|
||||||
|
# App Under test
|
||||||
|
'wagtail_draftail_snippet',
|
||||||
|
# Test app
|
||||||
|
'tests.testapp'
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = (
|
||||||
|
'django.middleware.security.SecurityMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.locale.LocaleMiddleware',
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
|
'wagtail.core.middleware.SiteMiddleware',
|
||||||
|
'wagtail.contrib.redirects.middleware.RedirectMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
'DIRS': [
|
||||||
|
os.path.join(BASE_DIR, 'templates'),
|
||||||
|
],
|
||||||
|
'OPTIONS': {
|
||||||
|
'context_processors': [
|
||||||
|
'django.template.context_processors.debug',
|
||||||
|
'django.template.context_processors.request',
|
||||||
|
'django.contrib.auth.context_processors.auth',
|
||||||
|
'django.contrib.messages.context_processors.messages',
|
||||||
|
],
|
||||||
|
'loaders': [
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
ROOT_URLCONF = 'tests.urls'
|
||||||
|
|
||||||
|
WAGTAIL_SITE_NAME = "Test Site",
|
||||||
|
SITE_ID = 1
|
22
tests/test_snippet_link_handler.py
Normal file
22
tests/test_snippet_link_handler.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from tests.testapp import factories
|
||||||
|
from wagtail_draftail_snippet.richtext import SnippetLinkHandler
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_snippet_link_handler():
|
||||||
|
advert = factories.AdvertFactory(text='advert', url='https://www.example.com')
|
||||||
|
advert.save()
|
||||||
|
|
||||||
|
assert advert.text == 'advert'
|
||||||
|
assert advert.url == 'https://www.example.com'
|
||||||
|
|
||||||
|
# Empty link created in case of exception
|
||||||
|
result = SnippetLinkHandler.expand_db_attributes({'id': 0})
|
||||||
|
assert result == "<a>"
|
||||||
|
|
||||||
|
# Test snippet template render correctly
|
||||||
|
attrs = {'id': 1, 'data-app-name': 'testapp', 'data-model-name': 'Advert'}
|
||||||
|
result = SnippetLinkHandler.expand_db_attributes(attrs)
|
||||||
|
assert result == f'<a href="{ advert.url }/{ advert.id }">'
|
|
@ -1,5 +0,0 @@
|
||||||
from wagtail_draftail_snippet import __version__
|
|
||||||
|
|
||||||
|
|
||||||
def test_version():
|
|
||||||
assert __version__ == '0.1.0'
|
|
0
tests/testapp/__init__.py
Normal file
0
tests/testapp/__init__.py
Normal file
11
tests/testapp/factories.py
Normal file
11
tests/testapp/factories.py
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import factory
|
||||||
|
|
||||||
|
from .models import Advert
|
||||||
|
|
||||||
|
|
||||||
|
class AdvertFactory(factory.Factory):
|
||||||
|
class Meta:
|
||||||
|
model = Advert
|
||||||
|
|
||||||
|
url = "https://www.example.com"
|
||||||
|
text = "Example"
|
18
tests/testapp/models.py
Normal file
18
tests/testapp/models.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
from wagtail.admin.edit_handlers import FieldPanel
|
||||||
|
from wagtail.snippets.models import register_snippet
|
||||||
|
|
||||||
|
|
||||||
|
@register_snippet
|
||||||
|
class Advert(models.Model):
|
||||||
|
url = models.URLField(null=True, blank=True)
|
||||||
|
text = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
panels = [
|
||||||
|
FieldPanel('url'),
|
||||||
|
FieldPanel('text'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.text
|
1
tests/testapp/templates/testapp/advert_snippet.html
Normal file
1
tests/testapp/templates/testapp/advert_snippet.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<a href="{{ object.url }}/{{ object.id }}">
|
9
tests/urls.py
Normal file
9
tests/urls.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from django.conf.urls import include, url
|
||||||
|
|
||||||
|
from wagtail.admin import urls as wagtailadmin_urls
|
||||||
|
from wagtail.core import urls as wagtail_urls
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(r'^admin/', include(wagtailadmin_urls)),
|
||||||
|
url(r'', include(wagtail_urls)),
|
||||||
|
]
|
|
@ -1 +0,0 @@
|
||||||
__version__ = '0.1.0'
|
|
Reference in a new issue