def post_applicant_info(): address_form = request.form current_app.logger.info("Running validation") validation_error_builder = ApplicantInfoValidator.validate(address_form) if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'applicant_info.html', validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, submit_url=url_for('add_lon.post_applicant_info'), country_list=get_sorted_countries(), request_body=request.form), 400 applicant_address = AddressConverter.condense_address(address_form) applicant_name = address_form.get('applicant_name') current_app.logger.info("Updating session object") ReviewRouter.update_edited_field('applicant_name', applicant_name) ReviewRouter.update_edited_field('applicant_address', applicant_address) g.session.add_lon_charge_state.applicant_name = applicant_name g.session.add_lon_charge_state.applicant_address = applicant_address g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_lon.get_dominant_building_info'))
def post_servient_structure_position(): if g.session.add_lon_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_lon.new")) return redirect(url_for("add_lon.new")) extent = request.form.get('extent') part_extent_detail = request.form.get('part_extent_detail') validation_error_builder = ServientStructurePositionValidator.validate( extent, part_extent_detail) if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'servient_structure_position.html', validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, submit_url=url_for('add_lon.post_servient_structure_position'), request_body=request.form), 400 position_and_dimension = copy( g.session.add_lon_charge_state.structure_position_and_dimension) position_and_dimension['extent-covered'] = extent if extent == "Part of the extent": position_and_dimension["part-explanatory-text"] = part_extent_detail elif "part-explanatory-text" in position_and_dimension: del position_and_dimension["part-explanatory-text"] ReviewRouter.update_edited_height_or_position(position_and_dimension) g.session.add_lon_charge_state.structure_position_and_dimension = position_and_dimension g.session.commit() return redirect(ReviewRouter.get_redirect_url('add_lon.get_review'))
def test_update_edited_field_with_empty_session(self): """Should add an entry to the edited_fields if the given value does not match the value stored in session.""" with main.app.test_request_context(): self.build_session() g.session.redirect_route = REDIRECT_ROUTE ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE) self.assertTrue(len(g.session.edited_fields) == 1) self.assertIn('charge_type', g.session.edited_fields)
def test_update_edited_field_with_matching_field(self): """Should not add an entry to the edited_fields if the given value matches the value stored in session.""" with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.charge_type = CHARGE_TYPE g.session.redirect_route = REDIRECT_ROUTE ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE) self.assertTrue(len(g.session.edited_fields) == 0)
def test_update_update_edited_height_or_position_with_redirect_route_not_set( self): with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.structure_position_and_dimension = {} g.session.redirect_route = None ReviewRouter.update_edited_height_or_position({}) self.assertTrue(len(g.session.edited_fields) == 0)
def test_update_edited_field_with_redirect_route_not_set(self): """Should not update edited_fields if the redirect_route in session is not set.""" with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.charge_type = CHARGE_TYPE g.session.redirect_route = None ReviewRouter.update_edited_field('charge_type', CHARGE_TYPE) self.assertTrue(len(g.session.edited_fields) == 0)
def test_update_edited_dominant_address_with_redirect_route_not_set(self): """Should not update edited_fields if the redirect_route in session is not set.""" with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.charge_geographic_description = CHARGE_GEOGRAPHIC_DESCRIPTION g.session.redirect_route = None ReviewRouter.update_edited_dominant_address( 'charge_geographic_description', CHARGE_GEOGRAPHIC_DESCRIPTION) self.assertTrue(len(g.session.edited_fields) == 0)
def post_dominant_building(): address_form = request.form validation_error_builder = DominantAddressValidator.validate(address_form) if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'dominant_building.html', validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, submit_url=url_for('add_lon.post_dominant_building'), request_body=request.form), 400 current_app.logger.info("Updating session object") if address_form['have_address'] == 'Yes': charge_address = { 'unique-property-reference-number': int(address_form['uprn']), 'postcode': address_form['postcode'], 'line-1': address_form['address_line_1'] } if address_form['address_line_2']: charge_address['line-2'] = address_form['address_line_2'] if address_form['address_line_3']: charge_address['line-3'] = address_form['address_line_3'] if address_form['address_line_4']: charge_address['line-4'] = address_form['address_line_4'] if address_form['address_line_5']: charge_address['line-5'] = address_form['address_line_5'] if address_form['address_line_6']: charge_address['line-6'] = address_form['address_line_6'] ReviewRouter.update_edited_dominant_address('charge_address', charge_address) g.session.add_lon_charge_state.charge_address = charge_address g.session.add_lon_charge_state.charge_geographic_description = '' else: charge_geographic_description = address_form[ 'charge_geographic_description'] ReviewRouter.update_edited_dominant_address( 'charge_geographic_description', charge_geographic_description) g.session.add_lon_charge_state.charge_address = '' g.session.add_lon_charge_state.charge_geographic_description = charge_geographic_description g.session.commit() return redirect( ReviewRouter.get_redirect_url('add_lon.get_dominant_building_extent'))
def post_upload_lon_documents(): upload_lon_documents_form = request.form current_app.logger.info("Running validation") validation_error_builder = UploadLonDocumentsValidator.validate( upload_lon_documents_form, request.files) if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'upload_lon_documents.html', validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, request_body=request.form), 400 current_app.logger.info("Updating session object") update_lon_document_fields(upload_lon_documents_form) upload_response = upload_lon_docs(request.files, upload_lon_documents_form) if upload_response.status_code == 400: raise UploadDocumentError("Virus scan failed. Upload a new document.", url_for('add_lon.get_upload_lon_documents')) filenames = {"form_a": request.files.get('form-a-file-input').filename} if "Temporary LON certificate" in upload_lon_documents_form.getlist( 'certificate'): filenames["temporary_lon_cert"] = request.files.get( 'temporary-lon-cert-file-input').filename else: filenames["temporary_lon_cert"] = '' if "Definitive LON certificate" in upload_lon_documents_form.getlist( 'certificate'): filenames["definitive_lon_cert"] = request.files.get( 'definitive-lon-cert-file-input').filename else: filenames["definitive_lon_cert"] = '' ReviewRouter.update_edited_filename_field(filenames) g.session.filenames = filenames g.session.add_lon_charge_state.documents_filed = upload_response.json() g.session.commit() current_app.logger.info("Redirecting to: %s", url_for("add_lon.get_servient_structure_height")) return redirect( ReviewRouter.get_redirect_url('add_lon.get_servient_structure_height'))
def test_update_edited_dominant_address_with_old_address_new_description( self): """Should remove charge address if charge geo description is changed.""" with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.charge_geographic_description = CHARGE_GEOGRAPHIC_DESCRIPTION g.session.redirect_route = REDIRECT_ROUTE g.session.edited_fields = {'charge_address': 'charge_address'} ReviewRouter.update_edited_dominant_address( 'charge_geographic_description', 'new geographic description') self.assertTrue(len(g.session.edited_fields) == 1) self.assertIn('charge_geographic_description', g.session.edited_fields) self.assertNotIn('charge_address', g.session.edited_fields)
def test_update_edited_filename_field_with_redirect_route_not_set(self): """Should not update edited_fields if the redirect_route in session is not set.""" with main.app.test_request_context(): self.build_session() g.session.filenames = { 'form_a': '', 'temporary_lon_cert': '', 'definitive_lon_cert': '' } g.session.redirect_route = None ReviewRouter.update_edited_filename_field({ 'form_a': '', 'temporary_lon_cert': '', 'definitive_lon_cert': '' }) self.assertTrue(len(g.session.edited_fields) == 0)
def test_get_redirect_url(self): """Should return the URL of the redirect_route if the redirect_route is set in session.""" with main.app.test_request_context(): self.build_session() g.session.redirect_route = REDIRECT_ROUTE result = ReviewRouter.get_redirect_url(DEFAULT_ROUTE) self.assertEqual(result, REDIRECT_URL)
def post_land_interest(): if g.session.add_lon_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_lon.new")) return redirect(url_for("add_lon.new")) current_app.logger.info("Running validation") # Different validation and error messages are required for other instead of the existing options. land_interest = request.form.get("servient-land-interest-description") if land_interest == "Other": land_interest = request.form.get("servient-land-interest-detail") validation_error_builder = ValidationErrorBuilder() FieldValidator(land_interest, 'servient-land-interest-detail', 'Land Interest', validation_error_builder, summary_message="There are errors on the page. Describe the interest in land", inline_message="Explain how the person applying for the light obstruction notice " "owns or uses the land") \ .is_required() checked = "Other" else: validation_error_builder = ValidationErrorBuilder() FieldValidator(land_interest, 'servient-land-interest-description', 'Land Interest', validation_error_builder, summary_message="Choose one", inline_message="Choose one") \ .is_required() checked = request.form.get("servient-land-interest-description") if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'lon_land_interest.html', submit_url=url_for("add_lon.post_land_interest"), validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, checked=checked, request_body=land_interest), 400 current_app.logger.info("Updating session object") ReviewRouter.update_edited_field('servient_land_interest_description', land_interest) g.session.add_lon_charge_state.servient_land_interest_description = land_interest g.session.commit() return redirect( ReviewRouter.get_redirect_url("add_lon.get_upload_lon_documents"))
def test_get_redirect_url_with_redirect_route_not_set(self): """Should return the URL of the given route if the redirect_route is not set in session.""" with main.app.test_request_context(): self.build_session() g.session.redirect_route = None result = ReviewRouter.get_redirect_url(DEFAULT_ROUTE) self.assertEqual(result, DEFAULT_URL)
def post_servient_structure_height(): if g.session.add_lon_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_lon.new")) return redirect(url_for("add_lon.new")) servient_structure_height_form = request.form measurement = servient_structure_height_form.get('measurement') height = servient_structure_height_form.get('height') unit = servient_structure_height_form.get('unit') validation_error_builder = ServientStructureHeightValidator.validate( measurement, height, unit) if validation_error_builder.errors: current_app.logger.warning("Validation errors occurred") return render_template( 'servient_structure_height.html', validation_errors=validation_error_builder.errors, validation_summary_heading=validation_error_builder. summary_heading_text, submit_url=url_for('add_lon.post_servient_structure_height'), request_body=request.form), 400 current_app.logger.info("Updating session object") if g.session.add_lon_charge_state.structure_position_and_dimension: position_and_dimension = copy( g.session.add_lon_charge_state.structure_position_and_dimension) else: position_and_dimension = {"height": ""} if measurement == "Unlimited height": position_and_dimension["height"] = measurement if 'units' in position_and_dimension: del (position_and_dimension['units']) else: position_and_dimension["height"] = height position_and_dimension["units"] = unit ReviewRouter.update_edited_height_or_position(position_and_dimension) g.session.add_lon_charge_state.structure_position_and_dimension = position_and_dimension g.session.commit() return redirect( ReviewRouter.get_redirect_url( 'add_lon.get_servient_structure_position'))
def test_update_update_edited_height_or_position_change_extent_type_to_all( self): with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.structure_position_and_dimension = \ {'height': 'unlimited height', 'extent-covered': 'some of the extent', 'part-explanatory-text': 'test area coverage'} g.session.redirect_route = REDIRECT_ROUTE ReviewRouter.update_edited_height_or_position({ 'height': 'unlimited height', 'extent-covered': 'all of the extent' }) self.assertTrue(len(g.session.edited_fields) == 1) self.assertIn('servient_position', g.session.edited_fields)
def test_update_update_edited_height_or_position_change_height_and_units_type( self): with main.app.test_request_context(): self.build_session() g.session.add_lon_charge_state.structure_position_and_dimension = { 'height': '10', 'units': 'metres', 'extent-covered': 'all of the extent' } g.session.redirect_route = REDIRECT_ROUTE ReviewRouter.update_edited_height_or_position({ 'height': 'unlimited height', 'extent-covered': 'all of the extent' }) self.assertTrue(len(g.session.edited_fields) == 1) self.assertIn('servient_height', g.session.edited_fields)
def post_dominant_building_extent(): if g.session.add_lon_charge_state is None: current_app.logger.info("Redirecting to: %s", url_for("add_lon.new")) return redirect(url_for("add_lon.new")) information = None if 'saved-features' in request.form: information = json.loads(request.form['saved-features'].strip()) current_app.logger.info("Running validation") validation_errors = AddLocationMapValidator.validate(information, "Draw the extent", "Draw the extent") if validation_errors.errors: current_app.logger.warning("Validation errors occurred") postcode_to_zoom = '' if g.session.add_lon_charge_state.charge_address: postcode_to_zoom = g.session.add_lon_charge_state.charge_address['postcode'] return render_template( 'dominant_building_extent.html', validation_errors=validation_errors.errors, validation_summary_heading=validation_errors.summary_heading_text, submit_url=url_for("add_lon.post_dominant_building_extent"), information=information, postcode=postcode_to_zoom ), 400 current_app.logger.info("Updating session object") ReviewRouter.update_edited_field('geometry', information) g.session.add_lon_charge_state.geometry = information g.session.commit() return redirect(ReviewRouter.get_redirect_url("add_lon.get_land_interest"))
def update_lon_document_fields(upload_lon_documents_form): definitive_cert = "Definitive LON certificate" temporary_cert = "Temporary LON certificate" if definitive_cert in upload_lon_documents_form.getlist('certificate'): tribunal_definitive_certificate_date = datetime.date( int(upload_lon_documents_form.get('definitive_cert_year')), int(upload_lon_documents_form.get('definitive_cert_month')), int(upload_lon_documents_form.get('definitive_cert_day'))) if tribunal_definitive_certificate_date: current_app.logger.info( "Update tribunal_definitive_certificate_date in session object" ) ReviewRouter.update_edited_field( 'tribunal_definitive_certificate_date', tribunal_definitive_certificate_date) g.session.add_lon_charge_state.tribunal_definitive_certificate_date = tribunal_definitive_certificate_date g.session.add_lon_charge_state.expiry_date = datetime.date.today( ) + relativedelta(years=+21) else: # Need this in case they are coming from review page and are removing an existing date by un-checking box ReviewRouter.remove_from_edited_fields( 'tribunal_definitive_certificate_date') g.session.add_lon_charge_state.tribunal_definitive_certificate_date = None g.session.add_lon_charge_state.expiry_date = None if temporary_cert in upload_lon_documents_form.getlist('certificate'): tribunal_temporary_certificate_date = datetime.date( int(upload_lon_documents_form.get('temp_cert_year')), int(upload_lon_documents_form.get('temp_cert_month')), int(upload_lon_documents_form.get('temp_cert_day'))) if tribunal_temporary_certificate_date: current_app.logger.info( "Update tribunal_temporary_certificate_date in session object") ReviewRouter.update_edited_field( 'tribunal_temporary_certificate_date', tribunal_temporary_certificate_date) g.session.add_lon_charge_state.tribunal_temporary_certificate_date = tribunal_temporary_certificate_date tribunal_temporary_certificate_expiry_date = datetime.date( int(upload_lon_documents_form.get('temp_expiry_year')), int(upload_lon_documents_form.get('temp_expiry_month')), int(upload_lon_documents_form.get('temp_expiry_day'))) if tribunal_temporary_certificate_expiry_date: current_app.logger.info( "Update tribunal_temporary_certificate_expiry_date in session object" ) ReviewRouter.update_edited_field( 'tribunal_temporary_certificate_expiry_date', tribunal_temporary_certificate_expiry_date) g.session.add_lon_charge_state.tribunal_temporary_certificate_expiry_date = \ tribunal_temporary_certificate_expiry_date else: # Need this in case they are coming from review page and are removing an existing date by un-checking box ReviewRouter.remove_from_edited_fields( 'tribunal_temporary_certificate_date') ReviewRouter.remove_from_edited_fields( 'tribunal_temporary_certificate_expiry_date') g.session.add_lon_charge_state.tribunal_temporary_certificate_date = None g.session.add_lon_charge_state.tribunal_temporary_certificate_expiry_date = None