Validate PoP dates against contract dates config on the backend
This commit is contained in:
parent
e4ca027065
commit
d7b86491ae
@ -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):
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user