diff --git a/pwa/urls.py b/pwa/urls.py
index fe26e7d..55460f2 100644
--- a/pwa/urls.py
+++ b/pwa/urls.py
@@ -3,6 +3,6 @@ from .views import manifest, service_worker
# Serve up serviceworker.js and manifest.json at the root
urlpatterns = [
- url('^serviceworker.js$', service_worker),
- url('^manifest.json$', manifest)
+ url('^serviceworker.js$', service_worker, name='serviceworker'),
+ url('^manifest.json$', manifest, name='manifest')
]
diff --git a/runtests.py b/runtests.py
new file mode 100644
index 0000000..88f3ea6
--- /dev/null
+++ b/runtests.py
@@ -0,0 +1,14 @@
+import os
+import sys
+
+import django
+from django.conf import settings
+from django.test.utils import get_runner
+
+if __name__ == "__main__":
+ os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.settings'
+ django.setup()
+ TestRunner = get_runner(settings)
+ test_runner = TestRunner()
+ failures = test_runner.run_tests(["tests"])
+ sys.exit(bool(failures))
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/settings.py b/tests/settings.py
new file mode 100644
index 0000000..3a1df21
--- /dev/null
+++ b/tests/settings.py
@@ -0,0 +1,36 @@
+
+SECRET_KEY = 'fake-key'
+INSTALLED_APPS = [
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ "pwa",
+]
+
+ROOT_URLCONF = 'pwa.urls'
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [],
+ 'APP_DIRS': True,
+ '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',
+ ],
+ },
+ },
+]
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': 'mydatabase',
+ }
+}
\ No newline at end of file
diff --git a/tests/test_settings_attr.py b/tests/test_settings_attr.py
new file mode 100644
index 0000000..191d382
--- /dev/null
+++ b/tests/test_settings_attr.py
@@ -0,0 +1,21 @@
+from django.test import TestCase
+from pwa import app_settings
+
+
+class AppSettingsTest(TestCase):
+ def test_has_defined(self):
+ """Must have the attributes defined in app_settings.py"""
+ attributes = [
+ 'PWA_SERVICE_WORKER_PATH',
+ 'PWA_APP_NAME',
+ 'PWA_APP_DESCRIPTION',
+ 'PWA_APP_ROOT_URL',
+ 'PWA_APP_THEME_COLOR',
+ 'PWA_APP_BACKGROUND_COLOR',
+ 'PWA_APP_DISPLAY',
+ 'PWA_APP_START_URL',
+ 'PWA_APP_ICONS'
+ ]
+ for attr in attributes:
+ with self.subTest():
+ self.assertTrue(hasattr(app_settings, attr))
diff --git a/tests/test_template_tag_meta.py b/tests/test_template_tag_meta.py
new file mode 100644
index 0000000..ba8465a
--- /dev/null
+++ b/tests/test_template_tag_meta.py
@@ -0,0 +1,45 @@
+from django.test import TestCase
+from django.template import Context, Template
+
+
+class CreateMetaTemplateTagTest(TestCase):
+ def setUp(self):
+ context = Context({})
+ template_to_render = Template(
+ '{% load pwa %}'
+ '{% progressive_web_app_meta %}'
+ )
+ self.rendered_template = template_to_render.render(context)
+
+ def test_has_tags(self):
+ """Must contains the tags in HTML"""
+ tags = [
+ '',
+ '',
+ '',
+ '',
+ '',
+ ''
+ ]
+ for text in tags:
+ with self.subTest():
+ self.assertInHTML(text, self.rendered_template)
+
+ def test_has_serviceworker(self):
+ """Must have the script tag with serviceworker registration"""
+ contents = [
+ '"
+ ]
+
+ for expected in contents:
+ with self.subTest():
+ self.assertIn(expected, self.rendered_template)
diff --git a/tests/test_view.py b/tests/test_view.py
new file mode 100644
index 0000000..72bd6c4
--- /dev/null
+++ b/tests/test_view.py
@@ -0,0 +1,40 @@
+from django.test import TestCase
+from django.shortcuts import resolve_url as r
+
+
+class ServiceWorkerTest(TestCase):
+ def setUp(self):
+ self.response = self.client.get(r('serviceworker'))
+
+ def test_get(self):
+ """GET /serviceworker.js Should return status code 200"""
+ self.assertEqual(200, self.response.status_code)
+
+
+class ManifestTest(TestCase):
+ def setUp(self):
+ self.response = self.client.get(r('manifest'), format='json')
+
+ def test_get(self):
+ """GET /manifest.json Should return status code 200"""
+ self.assertEqual(self.response.status_code, 200)
+
+ def test_template(self):
+ """Must have the template manifest.json"""
+ self.assertTemplateUsed(self.response, 'manifest.json')
+
+ def test_manifest_contains(self):
+ """Must be the attributes to manitesf.json"""
+ contents = [
+ '"name":',
+ '"short_name":',
+ '"description":',
+ '"start_url":',
+ '"display":',
+ '"background_color":',
+ '"theme_color":',
+ '"icons":',
+ ]
+ for expected in contents:
+ with self.subTest():
+ self.assertContains(self.response, expected)