Skip to content
Snippets Groups Projects
test_models.py 2.76 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)