Validate PoP dates against contract dates config on the backend

This commit is contained in:
leigh-mil 2019-09-05 11:53:25 -04:00
parent e4ca027065
commit d7b86491ae
2 changed files with 57 additions and 3 deletions

View File

@ -9,11 +9,13 @@ from wtforms.fields import (
from wtforms.fields.html5 import DateField
from wtforms.validators import Required, Optional, Length
from flask_wtf import FlaskForm
from datetime import datetime
from .data import JEDI_CLIN_TYPES
from .fields import SelectField
from .forms import BaseForm
from atst.utils.localization import translate
from flask import current_app as app
def coerce_enum(enum_inst):
@ -52,6 +54,13 @@ class CLINForm(FlaskForm):
def validate(self, *args, **kwargs):
valid = super().validate(*args, **kwargs)
CONTRACT_START_DATE = datetime.strptime(
app.config.get("CONTRACT_START_DATE"), "%Y-%m-%d"
).date()
CONTRACT_END_DATE = datetime.strptime(
app.config.get("CONTRACT_END_DATE"), "%Y-%m-%d"
).date()
if (
self.start_date.data
and self.end_date.data
@ -60,9 +69,21 @@ class CLINForm(FlaskForm):
self.start_date.errors.append(
translate("forms.task_order.start_date_error")
)
return False
else:
return valid
valid = False
if self.start_date.data and self.start_date.data <= CONTRACT_START_DATE:
self.start_date.errors.append(
"PoP start date must be on or after {}.".format(CONTRACT_START_DATE)
)
valid = False
if self.end_date.data and self.end_date.data >= CONTRACT_END_DATE:
self.end_date.errors.append(
"PoP end date must be before or on {}.".format(CONTRACT_END_DATE)
)
valid = False
return valid
class AttachmentForm(BaseForm):

View File

@ -1,4 +1,6 @@
import datetime
from dateutil.relativedelta import relativedelta
from flask import current_app as app
from atst.forms.task_order import CLINForm
from atst.models import JEDICLINType
@ -30,3 +32,34 @@ def test_clin_form_start_date_before_end_date():
)
valid_clin_form = CLINForm(obj=valid_clin)
assert valid_clin_form.validate()
def test_clin_form_pop_dates_within_contract_dates():
CONTRACT_START_DATE = datetime.datetime.strptime(
app.config.get("CONTRACT_START_DATE"), "%Y-%m-%d"
).date()
CONTRACT_END_DATE = datetime.datetime.strptime(
app.config.get("CONTRACT_END_DATE"), "%Y-%m-%d"
).date()
invalid_start = CONTRACT_START_DATE - relativedelta(months=1)
invalid_end = CONTRACT_END_DATE + relativedelta(months=1)
invalid_clin = factories.CLINFactory.create(
start_date=invalid_start, end_date=invalid_end
)
clin_form = CLINForm(obj=invalid_clin)
assert not clin_form.validate()
assert (
"PoP start date must be on or after {}.".format(CONTRACT_START_DATE)
) in clin_form.start_date.errors
assert (
"PoP end date must be before or on {}.".format(CONTRACT_END_DATE)
) in clin_form.end_date.errors
valid_start = CONTRACT_START_DATE + relativedelta(months=1)
valid_end = CONTRACT_END_DATE - relativedelta(months=1)
valid_clin = factories.CLINFactory.create(
start_date=valid_start, end_date=valid_end
)
valid_clin_form = CLINForm(obj=valid_clin)
assert valid_clin_form.validate()