Add tests and linter
This commit is contained in:
parent
438c7b5ae1
commit
1bb710cd29
13 changed files with 128 additions and 9 deletions
|
@ -18,7 +18,7 @@ WORKDIR /app
|
|||
|
||||
COPY Pipfile Pipfile
|
||||
COPY Pipfile.lock Pipfile.lock
|
||||
RUN pipenv install --deploy --system
|
||||
RUN pipenv install --deploy --system --dev
|
||||
|
||||
COPY package.json package.json
|
||||
COPY package-lock.json package-lock.json
|
||||
|
@ -30,6 +30,6 @@ COPY static/ /app/static/
|
|||
COPY scripts/ /app/scripts/
|
||||
COPY templates/ /app/templates/
|
||||
|
||||
RUN ./scripts/build-static.sh
|
||||
RUN BASE_URL= ./scripts/build-static.sh
|
||||
|
||||
EXPOSE 8000
|
||||
|
|
1
Pipfile
1
Pipfile
|
@ -20,6 +20,7 @@ wagtail-metadata = "*"
|
|||
[dev-packages]
|
||||
mypy = "*"
|
||||
"flake8" = "*"
|
||||
coverage = "*"
|
||||
|
||||
[requires]
|
||||
python_version = "3.6"
|
||||
|
|
39
Pipfile.lock
generated
39
Pipfile.lock
generated
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"_meta": {
|
||||
"hash": {
|
||||
"sha256": "6398b48732255dbfe41aeaace62f3f4e09fd282f2521716bdb43d388cee0e928"
|
||||
"sha256": "2065b3b947b0a7713aba72b55493723789062834628c34bff544e3ef72f184df"
|
||||
},
|
||||
"pipfile-spec": 6,
|
||||
"requires": {
|
||||
|
@ -358,6 +358,43 @@
|
|||
}
|
||||
},
|
||||
"develop": {
|
||||
"coverage": {
|
||||
"hashes": [
|
||||
"sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba",
|
||||
"sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed",
|
||||
"sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95",
|
||||
"sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640",
|
||||
"sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd",
|
||||
"sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162",
|
||||
"sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1",
|
||||
"sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508",
|
||||
"sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249",
|
||||
"sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694",
|
||||
"sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a",
|
||||
"sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287",
|
||||
"sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1",
|
||||
"sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000",
|
||||
"sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1",
|
||||
"sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e",
|
||||
"sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5",
|
||||
"sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062",
|
||||
"sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba",
|
||||
"sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc",
|
||||
"sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc",
|
||||
"sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99",
|
||||
"sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653",
|
||||
"sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c",
|
||||
"sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558",
|
||||
"sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f",
|
||||
"sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9",
|
||||
"sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd",
|
||||
"sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d",
|
||||
"sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6",
|
||||
"sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80"
|
||||
],
|
||||
"index": "pypi",
|
||||
"version": "==4.5.1"
|
||||
},
|
||||
"flake8": {
|
||||
"hashes": [
|
||||
"sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0",
|
||||
|
|
0
project/__init__.py
Normal file
0
project/__init__.py
Normal file
0
project/common/__init__.py
Normal file
0
project/common/__init__.py
Normal file
|
@ -36,4 +36,4 @@ def build_stream_field():
|
|||
('raw_html', blocks.RawHTMLBlock(label="Raw HTML")),
|
||||
('ul', blocks.ListBlock(blocks.CharBlock(label="List Item"), icon="list-ul", label="Unordered List")),
|
||||
('video', VideoBlock())
|
||||
])
|
||||
])
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from django.conf import settings
|
||||
from project.home.models import HomePage
|
||||
|
||||
|
||||
SETTINGS_KEYS = [
|
||||
'BASE_URL',
|
||||
'STATIC_URL',
|
||||
|
@ -17,6 +18,7 @@ def settings_injector(request):
|
|||
setting: getattr(settings, setting) for setting in SETTINGS_KEYS
|
||||
}}
|
||||
|
||||
|
||||
def get_home_page(request):
|
||||
return {
|
||||
'homepage': HomePage.objects.live().first()
|
||||
|
|
68
project/common/tests.py
Normal file
68
project/common/tests.py
Normal file
|
@ -0,0 +1,68 @@
|
|||
from wagtail.tests.utils import WagtailPageTests
|
||||
from .context import SETTINGS_KEYS
|
||||
from django.conf import settings
|
||||
from project.home.models import HomePage
|
||||
from wagtail.core.models import Site, Page
|
||||
from django.urls import reverse
|
||||
from rest_framework.test import APIClient
|
||||
from django.utils.text import slugify
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
class BaseTestCase(WagtailPageTests):
|
||||
client = APIClient()
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
self.root = self.create_initial_homepage()
|
||||
|
||||
def create_model(self, model, data={}):
|
||||
add_url = reverse('wagtailadmin_pages:add', args=[
|
||||
model._meta.app_label, model._meta.model_name, self.root.pk
|
||||
])
|
||||
data.update({
|
||||
'action-publish': 'action-publish',
|
||||
'body-count': 1,
|
||||
'body-0-deleted': '',
|
||||
'body-0-order': 0,
|
||||
'body-0-type': 'raw_html',
|
||||
'body-0-value': data['body'],
|
||||
'slug': slugify(data['title'])
|
||||
})
|
||||
return self.client.post(add_url, data)
|
||||
|
||||
def create_test_user(self):
|
||||
self.user = super().create_test_user()
|
||||
return self.user
|
||||
|
||||
def parse_content(self, content):
|
||||
return BeautifulSoup(content, 'html.parser')
|
||||
|
||||
def create_initial_homepage(self):
|
||||
"""
|
||||
from https://github.com/wagtail/wagtail/blob/master/wagtail/project_template/home/migrations/0002_create_homepage.py
|
||||
"""
|
||||
Page.objects.filter(id=2).delete()
|
||||
HomePage.objects.all().delete()
|
||||
|
||||
# Create a new homepage
|
||||
homepage = HomePage.objects.create(
|
||||
title="Homepage",
|
||||
body="Home Page",
|
||||
slug='home',
|
||||
path='00010001',
|
||||
depth=2,
|
||||
numchild=0,
|
||||
url_path='/',
|
||||
)
|
||||
Site.objects.create(hostname='localhost', root_page=homepage, is_default_site=True)
|
||||
return homepage
|
||||
|
||||
|
||||
class ContextInjectorTestCase(BaseTestCase):
|
||||
def test_has_keys(self):
|
||||
response = self.client.get('/')
|
||||
for key in SETTINGS_KEYS:
|
||||
self.assertIn(key, response.context['settings'])
|
||||
self.assertEqual(response.context['settings'][key], getattr(settings, key))
|
|
@ -1,5 +1,3 @@
|
|||
from wagtail.core.models import Page
|
||||
from wagtail.core.fields import RichTextField
|
||||
from wagtail.admin.edit_handlers import FieldPanel
|
||||
from project.common.models import Entity
|
||||
from django.db import models
|
||||
|
|
|
@ -19,4 +19,4 @@ class SectionIndexPage(Entity):
|
|||
content_panels = Entity.content_panels + [
|
||||
StreamFieldPanel('body'),
|
||||
FieldPanel('hide_list')
|
||||
]
|
||||
]
|
||||
|
|
|
@ -119,7 +119,6 @@ if not DEBUG:
|
|||
del TEMPLATES[0]['APP_DIRS']
|
||||
|
||||
|
||||
|
||||
WSGI_APPLICATION = 'project.wsgi.application'
|
||||
|
||||
|
||||
|
|
14
scripts/tests.sh
Executable file
14
scripts/tests.sh
Executable file
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
source ./scripts/common.sh
|
||||
|
||||
export IN_TEST=true
|
||||
|
||||
echo ">> Running flake8..."
|
||||
flake8 project --ignore=E128,E501 --exclude=migrations,wsgi.py
|
||||
|
||||
echo ">> Running backend unit tests..."
|
||||
coverage run --source=project --omit='*/wsgi.py,*/settings.py,*/migrations/*.py,*__init__.py' manage.py test $@
|
||||
coverage report
|
Reference in a new issue