Skip to content

Commit

Permalink
Merge pull request #19 from dstegelman/feature/tests
Browse files Browse the repository at this point in the history
Tests
  • Loading branch information
dstegelman committed Apr 4, 2015
2 parents b9a55ce + 290e04c commit 0d4ed90
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 0 deletions.
18 changes: 18 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
language: python

python:
- "2.7"

env:
- DJANGO_VERSION=Django==1.4.2
- DJANGO_VERSION=Django==1.5
- DJANGO_VERSION=Django==1.6

# command to install dependencies
install:
- pip install $DJANGO_VERSION south factory_boy mock

# command to run tests

script:
- python runtests.py
3 changes: 3 additions & 0 deletions downtime/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from downtime.tests.test_models import *
from downtime.tests.test_smoke import *
from downtime.tests.test_middleware import *
13 changes: 13 additions & 0 deletions downtime/tests/factories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import factory
import datetime

from downtime.models import Period


class PeriodFactory(factory.DjangoModelFactory):
start_time = datetime.datetime.now()
end_time = datetime.datetime.now() + datetime.timedelta(days=2)
enabled = True

class Meta:
model = Period
24 changes: 24 additions & 0 deletions downtime/tests/test_middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from mock import Mock
from django.test import TestCase


from downtime.middleware import DowntimeMiddleware
from downtime.tests.factories import PeriodFactory


class DowntimeMiddlewareTest(TestCase):

def setUp(self):
self.dm = DowntimeMiddleware()
self.request = Mock()
self.request.session = {}
self.period = PeriodFactory.create()

def test_exempt_paths(self):
self.request.path = '/admin'
self.assertIsNone(self.dm.process_request(self.request))

def test_render(self):
self.request.path = '/'
response = self.dm.process_request(self.request)
self.assertEqual(response.status_code, 503)
38 changes: 38 additions & 0 deletions downtime/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import datetime


from django.test import TestCase

from downtime.tests.factories import PeriodFactory
from downtime.models import Period


class DowntimeModelTest(TestCase):

def setUp(self):
self.period = PeriodFactory.create()

def test_unicode(self):
self.assertEqual(self.period.__unicode__(), 'Scheduled downtime')

def test_active(self):
self.assertTrue(Period.objects.active().count())

def test_inactive(self):
self.period.enabled = False
self.period.save()

self.assertFalse(Period.objects.active().count())

def test_is_down(self):
self.assertTrue(Period.objects.is_down().count())

def test_is_not_down(self):
self.period.start_time = datetime.datetime.now() - datetime.timedelta(days=4)
self.period.end_time = datetime.datetime.now() - datetime.timedelta(days=1)
self.period.save()

self.assertFalse(Period.objects.is_down().count())



4 changes: 4 additions & 0 deletions downtime/tests/test_smoke.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from downtime.admin import *
from downtime.managers import *
from downtime.models import *
from downtime.middleware import *
49 changes: 49 additions & 0 deletions runtests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env python

import os, sys
from django.conf import settings
import django

DIRNAME = os.path.dirname(__file__)

if django.VERSION[1] < 4:
# If the version is NOT django 4 or greater
# then remove the TZ setting.

settings.configure(DEBUG=True,
DATABASES={
'default': {
'ENGINE': 'django.db.backends.sqlite3',
}
},
INSTALLED_APPS=('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'downtime',))
else:
settings.configure(DEBUG=True,
DATABASES={
'default': {
'ENGINE': 'django.db.backends.sqlite3',
}
},
INSTALLED_APPS=('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'downtime',),
USE_TZ=True)


try:
# Django 1.7 needs this, but other versions dont.
django.setup()
except AttributeError:
pass

from django.test.simple import DjangoTestSuiteRunner
test_runner = DjangoTestSuiteRunner(verbosity=1)
failures = test_runner.run_tests(['downtime', ])
if failures:
sys.exit(failures)
3 changes: 3 additions & 0 deletions test-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
south
factory_boy
mock

0 comments on commit 0d4ed90

Please sign in to comment.