Merge pull request #584 from dod-ccpo/edit-to-officer

Edit Task Order Officer Info
This commit is contained in:
patricksmithdds
2019-01-29 16:25:57 -05:00
committed by GitHub
9 changed files with 413 additions and 64 deletions

View File

@@ -0,0 +1,56 @@
from werkzeug.datastructures import ImmutableMultiDict
from atst.forms.officers import EditTaskOrderOfficersForm
from tests.factories import TaskOrderFactory, UserFactory
class TestEditTaskOrderOfficersForm:
def _assert_officer_info_matches(self, form, task_order, officer):
prefix = form.OFFICER_PREFIXES[officer]
for field in form.OFFICER_INFO_FIELD_NAMES:
assert form[officer][field].data == getattr(
task_order, "{}_{}".format(prefix, field)
)
def test_processing_with_existing_task_order(self):
task_order = TaskOrderFactory.create()
form = EditTaskOrderOfficersForm(obj=task_order)
for officer in form.OFFICER_PREFIXES.keys():
self._assert_officer_info_matches(form, task_order, officer)
def test_processing_form_with_formdata(self):
data = {
"contracting_officer-first_name": "Han",
"contracting_officer-last_name": "Solo",
}
formdata = ImmutableMultiDict(data)
task_order = TaskOrderFactory.create()
form = EditTaskOrderOfficersForm(formdata=formdata, obj=task_order)
for officer in ["contracting_officer_representative", "security_officer"]:
self._assert_officer_info_matches(form, task_order, officer)
prefix = "ko"
officer = "contracting_officer"
for field in form.OFFICER_INFO_FIELD_NAMES:
data_field = "{}-{}".format(officer, field)
if data_field in formdata:
assert form[officer][field].data == formdata[data_field]
else:
assert form[officer][field].data == getattr(
task_order, "{}_{}".format(prefix, field)
)
def test_populate_obj(self):
data = {
"security_officer-first_name": "Luke",
"security_officer-last_name": "Skywalker",
}
formdata = ImmutableMultiDict(data)
task_order = TaskOrderFactory.create()
form = EditTaskOrderOfficersForm(formdata=formdata, obj=task_order)
form.populate_obj(task_order)
assert task_order.so_first_name == data["security_officer-first_name"]
assert task_order.so_last_name == data["security_officer-last_name"]

View File

@@ -2,6 +2,7 @@ from flask import url_for
import pytest
from atst.domain.roles import Roles
from atst.domain.task_orders import TaskOrders
from atst.models.portfolio_role import Status as PortfolioStatus
from tests.factories import (
@@ -100,3 +101,53 @@ def test_can_view_task_order_invitations(client, user_session):
)
)
assert response.status_code == 200
class TestTaskOrderInvitations:
def setup(self):
self.portfolio = PortfolioFactory.create()
self.task_order = TaskOrderFactory.create(portfolio=self.portfolio)
def _post(self, client, updates):
return client.post(
url_for(
"portfolios.edit_task_order_invitations",
portfolio_id=self.portfolio.id,
task_order_id=self.task_order.id,
),
headers={"Content-Type": "application/x-www-form-urlencoded"},
data=updates,
)
def test_editing_with_partial_data(self, user_session, client):
user_session(self.portfolio.owner)
response = self._post(
client,
{
"contracting_officer-first_name": "Luke",
"contracting_officer-last_name": "Skywalker",
"security_officer-first_name": "Boba",
"security_officer-last_name": "Fett",
},
)
updated_task_order = TaskOrders.get(self.portfolio.owner, self.task_order.id)
assert updated_task_order.ko_first_name == "Luke"
assert updated_task_order.ko_last_name == "Skywalker"
assert updated_task_order.so_first_name == "Boba"
assert updated_task_order.so_last_name == "Fett"
def test_editing_with_invalid_data(self, user_session, client):
user_session(self.portfolio.owner)
response = self._post(
client,
{
"contracting_officer-phone_number": "invalid input",
"security_officer-first_name": "Boba",
"security_officer-last_name": "Fett",
},
)
assert "There were some errors" in response.data.decode()
updated_task_order = TaskOrders.get(self.portfolio.owner, self.task_order.id)
assert updated_task_order.so_first_name != "Boba"