def test_gpx_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] timestamp = datetime.date(2017, 4, 13) # Act gpx_xml = MappingService.generate_gpx(1, None, timestamp) # Convert XML into a hash that should be identical every time gpx_xml_str = gpx_xml.decode("utf-8") gpx_hash = hashlib.md5(gpx_xml_str.encode("utf-8")).hexdigest() # Assert self.assertEqual(gpx_hash, "b91f7361cc1d6d9433cf393609103272")
def get(self, project_id): """ Get all tasks for a project as GPX --- 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 for all default: 1,2 - in: query name: as_file type: boolean description: Set to true if file download preferred default: False responses: 200: description: GPX XML 400: description: Client error 404: description: No mapped tasks 500: description: Internal Server Error """ try: current_app.logger.debug("GPX Called") tasks = request.args.get("tasks") as_file = ( strtobool(request.args.get("as_file")) if request.args.get("as_file") else False ) xml = MappingService.generate_gpx(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}.gpx", ) 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"TasksQueriesGpxAPI - unhandled error: {str(e)}" current_app.logger.critical(error_msg) return {"Error": "Unable to fetch task GPX"}, 500