Skip to content

Commit

Permalink
poleno.timewarp unittests
Browse files Browse the repository at this point in the history
  • Loading branch information
martinmacko47 committed Oct 21, 2014
1 parent a4e7636 commit 5de0129
Show file tree
Hide file tree
Showing 10 changed files with 700 additions and 117 deletions.
4 changes: 0 additions & 4 deletions manage.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chcemvediet.settings")

# Timewarp is automaticaly disabled if settings.DEBUG is not True.
from poleno.timewarp import timewarp
timewarp.init()

from django.core.management import execute_from_command_line

execute_from_command_line(sys.argv)
9 changes: 9 additions & 0 deletions poleno/timewarp/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# vim: expandtab
# -*- coding: utf-8 -*-
from django.core.exceptions import ImproperlyConfigured
from django.conf import settings

from .timewarp import timewarp

assert settings.DEBUG, u'Timewarp may NOT be enabled if settings.DEBUG is False.'
timewarp.enable()
5 changes: 4 additions & 1 deletion poleno/timewarp/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,12 @@ def index(request):
timewarp.jump(jumpto, speedup)
return HttpResponseRedirect(reverse(u'admin:timewarp'))

if button == u'reset':
elif button == u'reset':
timewarp.reset()
return HttpResponseRedirect(reverse(u'admin:timewarp'))

else: # invalid button
form = forms.WarpForm()
else:
form = forms.WarpForm()

Expand Down
2 changes: 1 addition & 1 deletion poleno/timewarp/management/commands/timewarp.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def handle(self, *args, **options):
else:
raise CommandError(u'Invalid date: "%s".' % joined)
else:
# Notice that this datetime may already be warped.
# Remember this datetime may already be warped.
date = datetime.datetime.now()

delta = relativedelta(**delta_options)
Expand Down
Empty file.
98 changes: 98 additions & 0 deletions poleno/timewarp/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# vim: expandtab
# -*- coding: utf-8 -*-
import datetime

from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from django.test import TestCase

from ..timewarp import timewarp

class TimewarpAdminTest(TestCase):
u"""
Tests timewarp admin views. Only checks if the views retrieve and update ``timewarp``
attributes correctly. Timewarp functionality is tested in ``test_timewarp.py``.
"""

def setUp(self):
timewarp.enable()
timewarp.reset()

self.admin = User.objects.create_superuser(username=u'admin', email=u'[email protected]', password=u'top_secret')
self.client.login(username=u'admin', password=u'top_secret')

def tearDown(self):
timewarp.reset()


def _parse_dt(self, value):
dt = datetime.datetime.strptime(value, u'%Y-%m-%d %H:%M:%S')
return dt

def _check_dt(self, value, expected):
self.assertEqual(repr(type(value)), u"<type 'datetime.datetime'>")
self.assertRegexpMatches(value.strftime(u'%Y-%m-%d %H:%M:%S.%f'), expected)

def _check_ts(self, value, expected):
dt = datetime.datetime.fromtimestamp(value)
self._check_dt(dt, expected)

def _check_response(self, response, template, klass=HttpResponse, status_code=200):
self.assertIs(type(response), klass)
self.assertEqual(response.status_code, status_code)
self.assertTemplateUsed(response, template)


def test_head(self):
response = self.client.head(reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')

def test_get(self):
response = self.client.get(reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')

def test_post_reset(self):
timewarp.jump(self._parse_dt(u'2014-10-03 14:40:05'), speed=2)
self.assertTrue(timewarp.is_warped)
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'reset'}, follow=True)
self.assertRedirects(response, reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')
self.assertFalse(timewarp.is_warped)

def test_post_jump_with_jumpto_and_speedup(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'jump', u'jumpto': u'2014-10-03', u'speedup': 3}, follow=True)
self.assertRedirects(response, reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')
self._check_ts(timewarp.warped_to, u'2014-10-03 00:00:00.000000')
self.assertEqual(timewarp.speedup, 3)

def test_post_jump_with_speedup_only(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'jump', u'speedup': 3}, follow=True)
self.assertRedirects(response, reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')
self.assertAlmostEqual(timewarp.warped_from, timewarp.warped_to, places=2)
self.assertEqual(timewarp.speedup, 3)

def test_post_jump_without_jumpto_nor_speedup(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'jump'}, follow=True)
self.assertRedirects(response, reverse(u'admin:timewarp'))
self._check_response(response, u'timewarp/timewarp.html')
self.assertFalse(timewarp.is_warped)

def test_post_jump_with_invalid_jumpto(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'jump', u'jumpto': u'2014-10-xx'}, follow=True)
self._check_response(response, u'timewarp/timewarp.html')
self.assertFormError(response, u'form', u'jumpto', u'Enter a valid date/time.')
self.assertFalse(timewarp.is_warped)

def test_post_jump_with_invalid_speedup(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'jump', u'speedup': u'invalid'}, follow=True)
self._check_response(response, u'timewarp/timewarp.html')
self.assertFormError(response, u'form', u'speedup', u'Enter a number.')
self.assertFalse(timewarp.is_warped)

def test_post_with_invalid_button(self):
response = self.client.post(reverse(u'admin:timewarp'), data={u'button': u'invalid'}, follow=True)
self._check_response(response, u'timewarp/timewarp.html')
self.assertFalse(timewarp.is_warped)
99 changes: 99 additions & 0 deletions poleno/timewarp/tests/test_management.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# vim: expandtab
# -*- coding: utf-8 -*-
import sys
import datetime
from StringIO import StringIO

from django.core import management
from django.core.management.base import CommandError
from django.test import TestCase

from ..timewarp import timewarp

class TimewarpManagementTest(TestCase):
u"""
Tests timewarp management command ``timewarp``. Only checks if the management command sets all
``timewarp`` attributes correctly. Timewarp functionality is tested in ``test_timewarp.py``.
"""

def setUp(self):
timewarp.enable()
timewarp.reset()

def tearDown(self):
timewarp.reset()


def _parse_dt(self, value):
dt = datetime.datetime.strptime(value, u'%Y-%m-%d %H:%M:%S')
return dt

def _check_dt(self, value, expected):
self.assertEqual(repr(type(value)), u"<type 'datetime.datetime'>")
self.assertRegexpMatches(value.strftime(u'%Y-%m-%d %H:%M:%S.%f'), expected)

def _check_ts(self, value, expected):
dt = datetime.datetime.fromtimestamp(value)
self._check_dt(dt, expected)


def _call_timewarp(self, *args, **kwargs):
try:
orig_stdout = sys.stdout
sys.stdout = StringIO()
management.call_command(u'timewarp', *args, **kwargs)
sys.stdout.seek(0)
return sys.stdout.read()
finally:
sys.stdout = orig_stdout


def test_without_arguments(self):
self._call_timewarp()
self.assertFalse(timewarp.is_warped)

def test_reset(self):
timewarp.jump(self._parse_dt(u'2014-10-03 14:40:05'), speed=2)
self.assertTrue(timewarp.is_warped)
self._call_timewarp(reset=True)
self.assertFalse(timewarp.is_warped)

def test_jump_yyyy_mm_dd_hh_mm_ss(self):
self._call_timewarp(u'2014-10-03 14:40:05')
self._check_ts(timewarp.warped_to, u'2014-10-03 14:40:05.000000')

def test_jump_yyyy_mm_dd_hh_mm(self):
self._call_timewarp(u'2014-10-03 14:40')
self._check_ts(timewarp.warped_to, u'2014-10-03 14:40:00.000000')

def test_jump_yyyy_mm_dd(self):
self._call_timewarp(u'2014-10-03')
self._check_ts(timewarp.warped_to, u'2014-10-03 00:00:00.000000')

def test_jump_yyyy_mm_dd_and_hh_mm_ss(self):
self._call_timewarp(u'2014-10-03', u'14:40:05')
self._check_ts(timewarp.warped_to, u'2014-10-03 14:40:05.000000')

def test_jump_invalid_date(self):
with self.assertRaisesMessage(CommandError, u'Invalid date: "2014-10-03 :40:05".'):
self._call_timewarp(u'2014-10-03 :40:05')

def test_only_delta_options(self):
self._call_timewarp(
year=2014, month=10, day=6, hour=10, minute=34, second=44,
years=-3, months=-5, weeks=+1, days=+3, hours=-3, minutes=-10, seconds=+5,
weekday=3)
self._check_ts(timewarp.warped_to, u'2011-05-19 07:24:49.000000')

def test_delta_options_with_date(self):
self._call_timewarp(u'2014-10-03', weekday=1, hours=10)
self._check_ts(timewarp.warped_to, u'2014-10-07 10:00:00.000000')

def test_speedup(self):
self._call_timewarp(speedup=4)
self.assertEqual(timewarp.speedup, 4)

def test_jump_with_delta_options_and_speedup_together(self):
self._call_timewarp(u'2014-10-03', weekday=1, hours=10, speedup=4)
self._check_ts(timewarp.warped_to, u'2014-10-07 10:00:00.000000')
self.assertEqual(timewarp.speedup, 4)
Loading

0 comments on commit 5de0129

Please sign in to comment.