def test_osm_xml_file_generated_correctly_all_tasks(self, mock_task): if self.skip_tests: return # Arrange task = Task.get(1, self.test_project.id) mock_task.return_value = [task] # Act osm_xml = MappingService.generate_osm_xml(1, None) # Convert XML into a hash that should be identical every time osm_xml_str = osm_xml.decode("utf-8") osm_hash = hashlib.md5(osm_xml_str.encode("utf-8")).hexdigest() # Assert self.assertEqual(osm_hash, "eafd0760a0d372e2ab139e25a2d300f1")
def get(self, project_id): """ Get all tasks for a project as OSM XML --- tags: - tasks produces: - application/xml parameters: - name: project_id in: path description: Project ID the task is associated with required: true type: integer default: 1 - in: query name: tasks type: string description: List of tasks; leave blank to retrieve all default: 1,2 - in: query name: as_file type: boolean description: Set to true if file download preferred default: False responses: 200: description: OSM XML 400: description: Client Error 404: description: No mapped tasks 500: description: Internal Server Error """ try: tasks = request.args.get("tasks") if request.args.get("tasks") else None as_file = ( strtobool(request.args.get("as_file")) if request.args.get("as_file") else False ) xml = MappingService.generate_osm_xml(project_id, tasks) if as_file: return send_file( io.BytesIO(xml), mimetype="text.xml", as_attachment=True, attachment_filename=f"HOT-project-{project_id}.osm", ) return Response(xml, mimetype="text/xml", status=200) except NotFound: return ( {"Error": "Not found; please check the project and task numbers."}, 404, ) except Exception as e: error_msg = f"TasksQueriesXmlAPI - unhandled error: {str(e)}" current_app.logger.critical(error_msg) return {"Error": "Unable to fetch task XML"}, 500