Skip to content

Commit

Permalink
Adds some tests for the models and forms
Browse files Browse the repository at this point in the history
  • Loading branch information
DerGut committed May 28, 2018
1 parent 178ca73 commit 9a57410
Show file tree
Hide file tree
Showing 5 changed files with 154 additions and 14 deletions.
4 changes: 2 additions & 2 deletions creator/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
)


class DetailsForm(forms.Form):
class TimesheetDetailsForm(forms.Form):
# Important details
surname = forms.CharField(
widget=forms.TextInput(attrs={'placeholder': '<your name>'})
Expand Down Expand Up @@ -135,5 +135,5 @@ def _post_clean(self):
return data


class SubscriptionForm(DetailsForm):
class SubscriptionForm(TimesheetDetailsForm):
email = forms.EmailField(required=True)
4 changes: 2 additions & 2 deletions creator/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
from django.views.generic.edit import FormView
from easy_pdf.views import PDFTemplateView

from creator.forms import DetailsForm, SubscriptionForm
from creator.forms import TimesheetDetailsForm, SubscriptionForm
from creator.models import Subscription

logger = logging.getLogger(__name__)


class DetailsFormView(FormView):
template_name = 'creator/home.html'
form_class = DetailsForm
form_class = TimesheetDetailsForm
success_url = '/result/'

def form_valid(self, form):
Expand Down
119 changes: 119 additions & 0 deletions tests/creator/test_forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
from django.test import TestCase

from creator.forms import TimesheetDetailsForm, SubscriptionForm


class TimesheetDetailsFormTestCase(TestCase):
def setUp(self):
self.valid_data = {
'surname': 'Test',
'first_name': 'Test',
'unit_of_organisation': 'Test',
'hours': 23,
'days_worked': '2018-05-01 to 2018-05-30'
}

def test_valid_input_data(self):
form = TimesheetDetailsForm(data=self.valid_data)

self.assertTrue(form.is_valid())

def test_no_surname_provided(self):
del self.valid_data['surname']
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('surname'))

def test_no_first_name_provided(self):
del self.valid_data['first_name']
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('first_name'))

def test_negative_hours(self):
self.valid_data['hours'] = -23
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('hours'))
self.assertEqual(
form.errors['hours'],
['Please provide a positive number of hours to work']
)

def test_too_many_hours_for_days_worked(self):
self.valid_data['hours'] = 1000
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
non_form_errors = form.non_field_errors()
self.assertTrue(len(non_form_errors))
self.assertEqual(
non_form_errors[0],
'Too many hours for specified range of month'
)

def test_working_days_range_not_in_same_month(self):
self.valid_data['days_worked'] = '2018-05-15 to 2018-06-15'
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('days_worked'))
self.assertEqual(
form.errors['days_worked'],
['First day and last day are not within the same month']
)

def test_working_days_range_not_in_same_year(self):
self.valid_data['days_worked'] = '2018-05-01 to 2019-05-30'
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('days_worked'))
self.assertEqual(
form.errors['days_worked'],
['First day and last day are not within the same year']
)

def test_working_days_range_not_in_same_year_and_month(self):
self.valid_data['days_worked'] = '2018-12-15 to 2019-01-15'
form = TimesheetDetailsForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('days_worked'))
self.assertEqual(
form.errors['days_worked'],
['First day and last day are not within the same year']
)


class SubscriptionFormTestCase(TestCase):
def setUp(self):
self.valid_data = self.valid_data = {
'surname': 'Test',
'first_name': 'Test',
'unit_of_organisation': 'Test',
'hours': 23,
'days_worked': '2018-05-01 to 2018-05-30'
}

def test_valid_email(self):
self.valid_data['email'] = 'test@bestemailaddressintheworld.com'
form = SubscriptionForm(data=self.valid_data)

self.assertTrue(form.is_valid())

def test_invalid_email(self):
self.valid_data['email'] = 'this_should_be_invalid'
form = SubscriptionForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('email'))

def test_no_email(self):
form = SubscriptionForm(data=self.valid_data)

self.assertFalse(form.is_valid())
self.assertTrue(form.has_error('email'))
39 changes: 31 additions & 8 deletions tests/creator/test_models.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import datetime

from django.test import TestCase
from freezegun import freeze_time

from creator.exceptions import TimesheetCreationError
from creator.models import Subscription

TEST_DATE1 = "2018-04-30"


class SubscriptionTestCase(TestCase):
class SubscriptionManagerTestCase(TestCase):
def setUp(self):
with freeze_time("2018-04-15"):
self.subscription_today = Subscription.objects.create(
Expand All @@ -19,9 +16,6 @@ def setUp(self):
unit_of_organisation='Test'
)

def tearDown(self):
Subscription.objects.all().delete()

def test_due_subscriptions_at_end_of_month(self):
with freeze_time("2018-04-29"):
subscriptions = Subscription.objects.due_subscriptions()
Expand All @@ -34,3 +28,32 @@ def test_due_subscriptions_within_month(self):
subscriptions = Subscription.objects.due_subscriptions()

self.assertEqual(len(subscriptions), 0)


class SubscriptionTestCase(TestCase):
def test_generate_pdf_with_valid_data(self):
with freeze_time("2018-04-15"):
subscription = Subscription.objects.create(
email='test@test.com',
first_name='test',
surname='test',
hours=5,
unit_of_organisation='Test'
)
pdf = subscription.generate_pdf()
self.assertIsInstance(pdf, bytes)

def test_generate_pdf_with_invalid_data(self):
with freeze_time("2018-04-15"):
subscription = Subscription.objects.create(
email='test@test.com',
first_name='test',
surname='test',
hours=500,
unit_of_organisation='Test'
)
self.assertRaisesMessage(
TimesheetCreationError,
"Too many hours for specified range of month",
subscription.generate_pdf
)
2 changes: 0 additions & 2 deletions tests/creator/test_unsubscribe.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ class UnsubscribeClientTestCase(TestCase):
class UnsubscribeTestCase(TestCase):
@freeze_time(TEST_DATE)
def setUp(self):
today = datetime.datetime.today()

self.subscription = Subscription.objects.create(
email='test@test.com',
first_name='test',
Expand Down

0 comments on commit 9a57410

Please sign in to comment.