176 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from flask import url_for
 | |
| 
 | |
| from atst.domain.task_orders import TaskOrders
 | |
| from tests.factories import (
 | |
|     UserFactory,
 | |
|     TaskOrderFactory,
 | |
|     PortfolioFactory,
 | |
|     DD254Factory,
 | |
| )
 | |
| 
 | |
| 
 | |
| def create_ko_task_order(user_session, contracting_officer):
 | |
|     portfolio = PortfolioFactory.create(owner=contracting_officer)
 | |
|     user_session(contracting_officer)
 | |
| 
 | |
|     task_order = TaskOrderFactory.create(
 | |
|         portfolio=portfolio, contracting_officer=contracting_officer
 | |
|     )
 | |
| 
 | |
|     TaskOrders.add_officer(
 | |
|         task_order, "contracting_officer", contracting_officer.to_dictionary()
 | |
|     )
 | |
| 
 | |
|     dd_254 = DD254Factory.create()
 | |
|     TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
 | |
| 
 | |
|     return task_order
 | |
| 
 | |
| 
 | |
| def test_show_signature_requested_not_ko(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
|     TaskOrders.update(task_order, contracting_officer=None)
 | |
| 
 | |
|     response = client.get(
 | |
|         url_for("task_orders.signature_requested", task_order_id=task_order.id)
 | |
|     )
 | |
| 
 | |
|     assert response.status_code == 404
 | |
| 
 | |
| 
 | |
| def test_show_signature_requested(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     portfolio = PortfolioFactory.create(owner=contracting_officer)
 | |
|     user_session(contracting_officer)
 | |
| 
 | |
|     # create unfinished TO
 | |
|     task_order = TaskOrderFactory.create(portfolio=portfolio, clin_01=None)
 | |
|     TaskOrders.add_officer(
 | |
|         task_order, "contracting_officer", contracting_officer.to_dictionary()
 | |
|     )
 | |
|     response = client.get(
 | |
|         url_for("task_orders.signature_requested", task_order_id=task_order.id)
 | |
|     )
 | |
|     assert response.status_code == 404
 | |
| 
 | |
|     # Finish TO
 | |
|     TaskOrders.update(task_order, clin_01=100)
 | |
|     response = client.get(
 | |
|         url_for("task_orders.signature_requested", task_order_id=task_order.id)
 | |
|     )
 | |
|     assert response.status_code == 404
 | |
| 
 | |
|     # Complete DD 254
 | |
|     dd_254 = DD254Factory.create()
 | |
|     TaskOrders.add_dd_254(task_order, dd_254.to_dictionary())
 | |
|     response = client.get(
 | |
|         url_for("task_orders.signature_requested", task_order_id=task_order.id)
 | |
|     )
 | |
|     assert response.status_code == 200
 | |
| 
 | |
| 
 | |
| def test_show_signature_requested_already_signed(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
|     TaskOrders.update(task_order, signer_dod_id=contracting_officer.dod_id)
 | |
| 
 | |
|     response = client.get(
 | |
|         url_for("task_orders.signature_requested", task_order_id=task_order.id)
 | |
|     )
 | |
| 
 | |
|     assert response.status_code == 404
 | |
| 
 | |
| 
 | |
| def test_signing_task_order_not_ko(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
|     TaskOrders.update(task_order, contracting_officer=None)
 | |
| 
 | |
|     response = client.post(
 | |
|         url_for("task_orders.record_signature", task_order_id=task_order.id), data={}
 | |
|     )
 | |
| 
 | |
|     assert response.status_code == 404
 | |
| 
 | |
| 
 | |
| def test_singing_an_already_signed_task_order(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
|     TaskOrders.update(task_order, signer_dod_id=contracting_officer.dod_id)
 | |
| 
 | |
|     response = client.post(
 | |
|         url_for("task_orders.record_signature", task_order_id=task_order.id),
 | |
|         data={"signature": "y", "level_of_warrant": "33.33"},
 | |
|     )
 | |
| 
 | |
|     assert response.status_code == 404
 | |
| 
 | |
| 
 | |
| def test_signing_a_task_order(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
| 
 | |
|     assert task_order.signed_at is None
 | |
|     assert task_order.signer_dod_id is None
 | |
| 
 | |
|     response = client.post(
 | |
|         url_for("task_orders.record_signature", task_order_id=task_order.id),
 | |
|         data={"signature": "y", "level_of_warrant": "33.33"},
 | |
|     )
 | |
| 
 | |
|     assert (
 | |
|         url_for(
 | |
|             "portfolios.view_task_order",
 | |
|             portfolio_id=task_order.portfolio_id,
 | |
|             task_order_id=task_order.id,
 | |
|         )
 | |
|         in response.headers["Location"]
 | |
|     )
 | |
| 
 | |
|     assert task_order.signer_dod_id == contracting_officer.dod_id
 | |
|     assert task_order.signed_at is not None
 | |
| 
 | |
| 
 | |
| def test_signing_a_task_order_failure(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
| 
 | |
|     response = client.post(
 | |
|         url_for("task_orders.record_signature", task_order_id=task_order.id),
 | |
|         data={"level_of_warrant": "33.33"},
 | |
|     )
 | |
| 
 | |
|     assert response.status_code == 400
 | |
| 
 | |
| 
 | |
| def test_signing_a_task_order_unlimited_level_of_warrant(client, user_session):
 | |
|     contracting_officer = UserFactory.create()
 | |
|     task_order = create_ko_task_order(user_session, contracting_officer)
 | |
| 
 | |
|     assert task_order.signed_at is None
 | |
|     assert task_order.signer_dod_id is None
 | |
| 
 | |
|     response = client.post(
 | |
|         url_for("task_orders.record_signature", task_order_id=task_order.id),
 | |
|         data={
 | |
|             "signature": "y",
 | |
|             "level_of_warrant": "33.33",
 | |
|             "unlimited_level_of_warrant": "y",
 | |
|         },
 | |
|     )
 | |
| 
 | |
|     assert (
 | |
|         url_for(
 | |
|             "portfolios.view_task_order",
 | |
|             portfolio_id=task_order.portfolio_id,
 | |
|             task_order_id=task_order.id,
 | |
|         )
 | |
|         in response.headers["Location"]
 | |
|     )
 | |
| 
 | |
|     assert task_order.signed_at is not None
 | |
|     assert task_order.signer_dod_id == contracting_officer.dod_id
 | |
|     assert task_order.unlimited_level_of_warrant == True
 | |
|     assert task_order.level_of_warrant == None
 |