From 9a9a6ecc9441d9bcdb0fb17d7b9757dfc5001e2a Mon Sep 17 00:00:00 2001 From: richard-dds Date: Mon, 5 Nov 2018 16:57:08 -0500 Subject: [PATCH 1/3] Fix json serialization bug in finver form --- atst/filters.py | 8 ++++-- atst/forms/financial.py | 1 + tests/routes/test_financial_verification.py | 32 +++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/atst/filters.py b/atst/filters.py index 217b9e2f..426b9651 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -2,6 +2,7 @@ import re import datetime from flask import current_app as app from werkzeug.datastructures import FileStorage +from atst.models.attachment import Attachment def iconSvg(name): @@ -47,9 +48,12 @@ def mixedContentToJson(value): if ( isinstance(value, dict) and "task_order" in value - and isinstance(value["task_order"], FileStorage) + and ( + isinstance(value["task_order"]["pdf"], FileStorage) + or isinstance(value["task_order"]["pdf"], Attachment) + ) ): - value["task_order"] = value["task_order"].filename + value["task_order"]["pdf"] = value["task_order"]["pdf"].filename return app.jinja_env.filters["tojson"](value) diff --git a/atst/forms/financial.py b/atst/forms/financial.py index 15ddb955..b4e0ad99 100644 --- a/atst/forms/financial.py +++ b/atst/forms/financial.py @@ -244,3 +244,4 @@ class FinancialVerificationForm(ValidatedForm): @property def is_only_missing_task_order_number(self): return "task_order_number" in self.errors and len(self.errors) == 1 + diff --git a/tests/routes/test_financial_verification.py b/tests/routes/test_financial_verification.py index 3c0241dc..8c1f3da4 100644 --- a/tests/routes/test_financial_verification.py +++ b/tests/routes/test_financial_verification.py @@ -487,3 +487,35 @@ def test_can_submit_once_to_details_are_entered(fv_data, e_fv_data): assert UpdateFinancialVerification( TrueValidator, TrueValidator, user, request, data, is_extended=True ).execute() + + +def test_existing_task_order_with_pdf(fv_data, e_fv_data, client, user_session): + # Use finver route to create initial TO #1, complete with PDF + user = UserFactory.create() + request = RequestFactory.create(creator=user) + data = {**fv_data, **e_fv_data, "task_order-number": MANUAL_TO_NUMBER} + UpdateFinancialVerification( + TrueValidator, TaskOrderNumberValidator(), user, request, data, is_extended=True + ).execute() + + # Save draft on a new finver form, but with same number as TO #1 + user = UserFactory.create() + request = RequestFactory.create(creator=user) + data = {"task_order-number": MANUAL_TO_NUMBER} + SaveFinancialVerificationDraft( + TrueValidator, + TaskOrderNumberValidator(), + user, + request, + data, + is_extended=False, + ).execute() + + # Get finver form + user_session(user) + response = client.get( + url_for("requests.financial_verification", request_id=request.id), + follow_redirects=True, + ) + + assert response.status_code == 200 From c48c8304838b9993156ba060d9bd62becf580884 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Wed, 7 Nov 2018 10:27:29 -0500 Subject: [PATCH 2/3] Formatting --- atst/forms/financial.py | 1 - 1 file changed, 1 deletion(-) diff --git a/atst/forms/financial.py b/atst/forms/financial.py index b4e0ad99..15ddb955 100644 --- a/atst/forms/financial.py +++ b/atst/forms/financial.py @@ -244,4 +244,3 @@ class FinancialVerificationForm(ValidatedForm): @property def is_only_missing_task_order_number(self): return "task_order_number" in self.errors and len(self.errors) == 1 - From 35ef339f8f17ca6d8e7343c3b3ccbad58feb5fcc Mon Sep 17 00:00:00 2001 From: richard-dds Date: Thu, 8 Nov 2018 14:44:00 -0500 Subject: [PATCH 3/3] Check for attr rather than classname --- atst/filters.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/atst/filters.py b/atst/filters.py index 426b9651..c9aa682f 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -1,8 +1,6 @@ import re import datetime from flask import current_app as app -from werkzeug.datastructures import FileStorage -from atst.models.attachment import Attachment def iconSvg(name): @@ -48,10 +46,7 @@ def mixedContentToJson(value): if ( isinstance(value, dict) and "task_order" in value - and ( - isinstance(value["task_order"]["pdf"], FileStorage) - or isinstance(value["task_order"]["pdf"], Attachment) - ) + and hasattr(value["task_order"]["pdf"], "filename") ): value["task_order"]["pdf"] = value["task_order"]["pdf"].filename return app.jinja_env.filters["tojson"](value)