Update TO form to account for new TO rules: alpha numeric, between 13 and 17 characters, dashes should be stripped, and coerce to uppercase
This commit is contained in:
parent
204bf49ff4
commit
84d0a32694
@ -10,11 +10,13 @@ from wtforms.fields.html5 import DateField
|
||||
from wtforms.validators import (
|
||||
Required,
|
||||
Length,
|
||||
Optional,
|
||||
NumberRange,
|
||||
ValidationError,
|
||||
)
|
||||
from flask_wtf import FlaskForm
|
||||
import numbers
|
||||
|
||||
from atst.forms.validators import Number, AlphaNumeric
|
||||
|
||||
from .data import JEDI_CLIN_TYPES
|
||||
@ -60,6 +62,20 @@ def validate_date_in_range(form, field):
|
||||
)
|
||||
|
||||
|
||||
def remove_dashes(value):
|
||||
if value:
|
||||
return value.replace("-", "")
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def coerce_upper(value):
|
||||
if value:
|
||||
return value.upper()
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
class CLINForm(FlaskForm):
|
||||
jedi_clin_type = SelectField(
|
||||
translate("task_orders.form.clin_type_label"),
|
||||
@ -149,8 +165,8 @@ class AttachmentForm(BaseForm):
|
||||
class TaskOrderForm(BaseForm):
|
||||
number = StringField(
|
||||
label=translate("forms.task_order.number_description"),
|
||||
filters=[remove_empty_string],
|
||||
validators=[Number(), Length(max=13)],
|
||||
filters=[remove_empty_string, remove_dashes, coerce_upper],
|
||||
validators=[AlphaNumeric(), Length(min=13, max=17), Optional()],
|
||||
)
|
||||
pdf = FormField(
|
||||
AttachmentForm,
|
||||
|
@ -71,7 +71,7 @@ def test_update_adds_clins():
|
||||
|
||||
def test_update_does_not_duplicate_clins():
|
||||
task_order = TaskOrderFactory.create(
|
||||
number="3453453456", create_clins=[{"number": "123"}, {"number": "456"}]
|
||||
number="3453453456123", create_clins=[{"number": "123"}, {"number": "456"}]
|
||||
)
|
||||
clins = [
|
||||
{
|
||||
@ -93,7 +93,7 @@ def test_update_does_not_duplicate_clins():
|
||||
]
|
||||
task_order = TaskOrders.update(
|
||||
task_order_id=task_order.id,
|
||||
number="0000000000",
|
||||
number="0000000000000",
|
||||
clins=clins,
|
||||
pdf={"filename": "sample.pdf", "object_name": "1234567"},
|
||||
)
|
||||
@ -170,3 +170,11 @@ def test_update_enforces_unique_number():
|
||||
dupe_task_order = TaskOrderFactory.create()
|
||||
with pytest.raises(AlreadyExistsError):
|
||||
TaskOrders.update(dupe_task_order.id, task_order.number, [], None)
|
||||
|
||||
|
||||
def test_allows_alphanumeric_number():
|
||||
portfolio = PortfolioFactory.create()
|
||||
valid_to_numbers = ["1234567890123", "ABC1234567890"]
|
||||
|
||||
for number in valid_to_numbers:
|
||||
assert TaskOrders.create(portfolio.id, number, [], None)
|
||||
|
@ -112,3 +112,37 @@ def test_no_number():
|
||||
http_request_form_data = {}
|
||||
form = TaskOrderForm(http_request_form_data)
|
||||
assert form.data["number"] is None
|
||||
|
||||
|
||||
def test_number_allows_alphanumeric():
|
||||
valid_to_numbers = ["1234567890123", "ABC1234567890"]
|
||||
|
||||
for number in valid_to_numbers:
|
||||
form = TaskOrderForm({"number": number})
|
||||
assert form.validate()
|
||||
|
||||
|
||||
def test_number_allows_between_13_and_17_characters():
|
||||
valid_to_numbers = ["123456789012345", "ABCDEFG1234567890"]
|
||||
|
||||
for number in valid_to_numbers:
|
||||
form = TaskOrderForm({"number": number})
|
||||
assert form.validate()
|
||||
|
||||
|
||||
def test_number_strips_dashes():
|
||||
valid_to_numbers = ["123-456789-012345", "ABCD-EFG12345-67890"]
|
||||
|
||||
for number in valid_to_numbers:
|
||||
form = TaskOrderForm({"number": number})
|
||||
assert form.validate()
|
||||
assert not "-" in form.number.data
|
||||
|
||||
|
||||
def test_number_case_coerces_all_caps():
|
||||
valid_to_numbers = ["12345678012345", "AbcEFg1234567890"]
|
||||
|
||||
for number in valid_to_numbers:
|
||||
form = TaskOrderForm({"number": number})
|
||||
assert form.validate()
|
||||
assert form.number.data == number.upper()
|
||||
|
@ -158,7 +158,7 @@ def test_task_orders_form_step_two_add_number(client, user_session, task_order):
|
||||
|
||||
def test_task_orders_submit_form_step_two_add_number(client, user_session, task_order):
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {"number": "1234567890"}
|
||||
form_data = {"number": "abc-1234567890"}
|
||||
response = client.post(
|
||||
url_for(
|
||||
"task_orders.submit_form_step_two_add_number", task_order_id=task_order.id
|
||||
@ -167,7 +167,7 @@ def test_task_orders_submit_form_step_two_add_number(client, user_session, task_
|
||||
)
|
||||
|
||||
assert response.status_code == 302
|
||||
assert task_order.number == "1234567890"
|
||||
assert task_order.number == "ABC1234567890" # pragma: allowlist secret
|
||||
|
||||
|
||||
def test_task_orders_submit_form_step_two_enforces_unique_number(
|
||||
@ -194,7 +194,7 @@ def test_task_orders_submit_form_step_two_add_number_existing_to(
|
||||
client, user_session, task_order
|
||||
):
|
||||
user_session(task_order.portfolio.owner)
|
||||
form_data = {"number": "0000000000"}
|
||||
form_data = {"number": "0000000000000"}
|
||||
original_number = task_order.number
|
||||
response = client.post(
|
||||
url_for(
|
||||
@ -203,7 +203,7 @@ def test_task_orders_submit_form_step_two_add_number_existing_to(
|
||||
data=form_data,
|
||||
)
|
||||
assert response.status_code == 302
|
||||
assert task_order.number == "0000000000"
|
||||
assert task_order.number == "0000000000000"
|
||||
assert task_order.number != original_number
|
||||
|
||||
|
||||
|
@ -663,7 +663,7 @@ def test_task_orders_new_get_routes(get_url_assert_status):
|
||||
def test_task_orders_new_post_routes(post_url_assert_status):
|
||||
post_routes = [
|
||||
("task_orders.submit_form_step_one_add_pdf", {"pdf": ""}),
|
||||
("task_orders.submit_form_step_two_add_number", {"number": "1234567890"}),
|
||||
("task_orders.submit_form_step_two_add_number", {"number": "1234567890123"}),
|
||||
(
|
||||
"task_orders.submit_form_step_three_add_clins",
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user