from flask import Flask, Response, request from multiprocessing import Process import json import os import shutil import logging from .jform_data import mock_jform_data from ..routine import sync_jform, process_overdue from ..umbrellas import Umbrellas from ..jform import JForm from ..admin_log import AdminLog from ..config import config """Spin up a simple Flask app to mimic jForm.""" jform = Flask(__name__) takeaway, giveback = mock_jform_data() EMPTY_RESPONSE = Response( json.dumps( { "success": True, "message": "ok", "data": { "rows": [], "total": 0, }, "code": 0, }, ), content_type="application/json", ) @jform.route("/") def api(endpoint): params = request.args.get("params") if ( params and "current" in json.loads(params) and json.loads(params)["current"] != 1 ): return EMPTY_RESPONSE if endpoint == "takeaway": return Response(takeaway, content_type="application/json") elif endpoint == "giveback": return Response(giveback, content_type="application/json") TEST_DATABASE_PATH = "/tmp/jimbrella.db" TEST_ADMIN_LOG_PATH = "/tmp/jimbrella.admin.log" if __name__ == "__main__": logging.info("----- BEGIN ROUTINE TEST -----") mock_jform = Process(target=jform.run, kwargs={"port": 5001}) mock_jform.start() """Initialize Database and JForm.""" shutil.copyfile(config.get("general", "db_path"), TEST_DATABASE_PATH) db = Umbrellas(TEST_DATABASE_PATH) takeaway_jform = JForm("takeaway", "http://localhost:5001/takeaway", "/tmp") giveback_jform = JForm("giveback", "http://localhost:5001/giveback", "/tmp") admin = AdminLog(TEST_ADMIN_LOG_PATH) """Simulate routine.""" sync_jform(takeaway_jform, giveback_jform, db, admin) process_overdue(db, admin) """Cleanup""" os.remove(takeaway_jform._bookmark_fp) os.remove(giveback_jform._bookmark_fp) mock_jform.terminate() logging.info("----- END ROUTINE TEST -----")