In order to do this, it was expedient to move the CLINFields Jinja macro into its own file and pass in all the data it requires.
138 lines
4.3 KiB
Python
138 lines
4.3 KiB
Python
import pytest
|
|
|
|
from bs4 import BeautifulSoup
|
|
from wtforms import Form, FormField
|
|
from wtforms.fields import StringField
|
|
from wtforms.validators import InputRequired
|
|
from wtforms.widgets import CheckboxInput
|
|
|
|
from atst.forms.task_order import CLINForm
|
|
from atst.forms.task_order import TaskOrderForm
|
|
from atst.models import Permissions
|
|
from atst.routes.task_orders.new import render_task_orders_edit
|
|
from atst.utils.context_processors import user_can_view
|
|
|
|
from tests import factories
|
|
|
|
|
|
class InitialValueForm(Form):
|
|
datafield = StringField(label="initialvalue value", default="initialvalue")
|
|
|
|
errorfield = StringField(
|
|
label="error", validators=[InputRequired(message="Test Error Message")]
|
|
)
|
|
|
|
|
|
class TaskOrderPdfForm(Form):
|
|
filename = StringField(default="filename")
|
|
object_name = StringField(default="objectName")
|
|
|
|
errorfield = StringField(
|
|
label="error", validators=[InputRequired(message="Test Error Message")]
|
|
)
|
|
|
|
|
|
class TaskOrderForm(Form):
|
|
pdf = FormField(TaskOrderPdfForm, label="task_order_pdf")
|
|
|
|
|
|
@pytest.fixture
|
|
def env(app, scope="function"):
|
|
return app.jinja_env
|
|
|
|
|
|
@pytest.fixture
|
|
def upload_input_macro(env):
|
|
# override tojson as identity function to prevent
|
|
# wrapping strings in extra quotes
|
|
env.filters["tojson"] = lambda x: x
|
|
upload_template = env.get_template("components/upload_input.html")
|
|
return getattr(upload_template.module, "UploadInput")
|
|
|
|
|
|
@pytest.fixture
|
|
def checkbox_input_macro(env):
|
|
checkbox_template = env.get_template("components/checkbox_input.html")
|
|
return getattr(checkbox_template.module, "CheckboxInput")
|
|
|
|
|
|
@pytest.fixture
|
|
def initial_value_form(scope="function"):
|
|
return InitialValueForm()
|
|
|
|
|
|
@pytest.fixture
|
|
def task_order_form(scope="function"):
|
|
return TaskOrderForm()
|
|
|
|
|
|
@pytest.fixture
|
|
def error_task_order_form(scope="function"):
|
|
return ErrorTaskOrderForm()
|
|
|
|
|
|
def write_template(content, name):
|
|
with open("js/test_templates/{}".format(name), "w") as fh:
|
|
fh.write(content)
|
|
|
|
|
|
def test_make_checkbox_input_template(checkbox_input_macro, initial_value_form):
|
|
initial_value_form.datafield.widget = CheckboxInput()
|
|
rendered_checkbox_macro = checkbox_input_macro(initial_value_form.datafield)
|
|
write_template(rendered_checkbox_macro, "checkbox_input_template.html")
|
|
|
|
|
|
def test_make_upload_input_template(upload_input_macro, task_order_form):
|
|
rendered_upload_macro = upload_input_macro(task_order_form.pdf)
|
|
write_template(rendered_upload_macro, "upload_input_template.html")
|
|
|
|
|
|
def test_make_upload_input_error_template(upload_input_macro, task_order_form):
|
|
task_order_form.validate()
|
|
rendered_upload_macro = upload_input_macro(task_order_form.pdf)
|
|
write_template(rendered_upload_macro, "upload_input_error_template.html")
|
|
|
|
|
|
def test_make_task_order_with_clin_form_template(app, request_ctx):
|
|
request_ctx.g.current_user = factories.UserFactory.create()
|
|
request_ctx.g.application = None
|
|
request_ctx.g.portfolio = None
|
|
# hard-code the portfolio ID so it does not change the fragment every time
|
|
# this is run
|
|
portfolio = factories.PortfolioFactory.create(
|
|
id="e4edf994-04f4-4aaa-ba30-39507e1068a8"
|
|
)
|
|
# hard-code the TO number for the same reason
|
|
task_order = factories.TaskOrderFactory.create(
|
|
portfolio=portfolio, number="1234567890123"
|
|
)
|
|
task_order_form = TaskOrderForm(obj=task_order)
|
|
step3 = render_task_orders_edit(
|
|
"task_orders/step_3.html",
|
|
form=task_order_form,
|
|
portfolio_id=task_order.portfolio_id,
|
|
extra_args={
|
|
"portfolio": task_order.portfolio,
|
|
"permissions": Permissions,
|
|
"user_can": user_can_view,
|
|
"task_order": task_order,
|
|
"contract_start": app.config.get("CONTRACT_START_DATE"),
|
|
"contract_end": app.config.get("CONTRACT_END_DATE"),
|
|
},
|
|
)
|
|
dom = BeautifulSoup(step3, "html.parser")
|
|
to_form = dom.find("to-form")
|
|
write_template(str(to_form), "to_form.html")
|
|
|
|
|
|
def test_make_clin_fields(env, app):
|
|
step3_template = env.get_template("components/clin_fields.html")
|
|
clin_fields_macro = getattr(step3_template.module, "CLINFields")
|
|
clin_fields = clin_fields_macro(
|
|
app.config.get("CONTRACT_START_DATE"),
|
|
app.config.get("CONTRACT_END_DATE"),
|
|
CLINForm(),
|
|
0,
|
|
)
|
|
write_template(clin_fields, "clin_fields.html")
|