Newer
Older
from datetime import date, timedelta
from django.core.exceptions import ValidationError
from django.test import TestCase
from opentech.apply.funds.workflow import SingleStage
from .factories import FundTypeFactory, RoundFactory
class TestFundModel(TestCase):
def test_can_access_workflow_class(self):
fund = FundTypeFactory(parent=None)
self.assertEqual(fund.workflow, 'single')
self.assertEqual(fund.workflow_class, SingleStage)
class TestRoundModel(TestCase):
def setUp(self):
self.fund = FundTypeFactory(parent=None)
def make_round(self, **kwargs):
data = {'parent': self.fund}
data.update(kwargs)
return RoundFactory(**data)
def test_normal_start_end_doesnt_error(self):
self.make_round()
def test_end_before_start(self):
yesterday = date.today() - timedelta(days=1)
with self.assertRaises(ValidationError):
self.make_round(end_date=yesterday)
def test_end_overlaps(self):
existing_round = self.make_round()
overlapping_end = existing_round.end_date - timedelta(1)
start = existing_round.start_date - timedelta(1)
with self.assertRaises(ValidationError):
self.make_round(start_date=start, end_date=overlapping_end)
def test_start_overlaps(self):
existing_round = self.make_round()
overlapping_start = existing_round.start_date + timedelta(1)
end = existing_round.end_date + timedelta(1)
with self.assertRaises(ValidationError):
self.make_round(start_date=overlapping_start, end_date=end)
def test_inside_overlaps(self):
existing_round = self.make_round()
overlapping_start = existing_round.start_date + timedelta(1)
overlapping_end = existing_round.end_date - timedelta(1)
with self.assertRaises(ValidationError):
self.make_round(start_date=overlapping_start, end_date=overlapping_end)
def test_other_fund_not_impacting(self):
self.make_round()
new_fund = FundTypeFactory(parent=None)
# Will share the same start and end dates
self.make_round(parent=new_fund)
def test_can_create_without_end_date(self):
self.make_round(end_date=None)
def test_can_not_create_with_other_open_end_date(self):
existing_round = self.make_round(end_date=None)
start = existing_round.start_date + timedelta(1)
with self.assertRaises(ValidationError):
self.make_round(start_date=start, end_date=None)
def test_can_not_overlap_with_normal_round(self):
existing_round = self.make_round()
overlapping_start = existing_round.end_date - timedelta(1)
with self.assertRaises(ValidationError):
self.make_round(start_date=overlapping_start, end_date=None)