conftest.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import json
  2. import os
  3. import sys
  4. import pytest
  5. # sources/ doit être dans le path pour les imports
  6. sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
  7. @pytest.fixture(scope="session")
  8. def app():
  9. from flask import Flask
  10. from db import db as _db
  11. flask_app = Flask(
  12. __name__,
  13. template_folder=os.path.join(os.path.dirname(os.path.dirname(__file__)), "templates"),
  14. )
  15. flask_app.config.update({
  16. "TESTING": True,
  17. "SQLALCHEMY_DATABASE_URI": "sqlite:///:memory:",
  18. "SQLALCHEMY_TRACK_MODIFICATIONS": False,
  19. "SECRET_KEY": "test-secret",
  20. "INSTANCE_NAME": "test",
  21. "YUNOHOST_BACKUP_DIR": "/tmp/bm_test_backups",
  22. "DATA_DIR": "/tmp/bm_test_data",
  23. "API_TOKEN": "test-token",
  24. "INSTANCE_URL": "http://localhost",
  25. "LOG_PATH": "/tmp/bm_test.log",
  26. })
  27. flask_app.jinja_env.filters["fromjson"] = json.loads
  28. _db.init_app(flask_app)
  29. from blueprints.settings import bp as bp_cfg
  30. from blueprints.jobs import bp as bp_jobs
  31. from blueprints.destinations import bp as bp_dest
  32. from blueprints.network import bp as bp_net
  33. from blueprints.api import bp as bp_api
  34. flask_app.register_blueprint(bp_cfg)
  35. flask_app.register_blueprint(bp_jobs)
  36. flask_app.register_blueprint(bp_dest)
  37. flask_app.register_blueprint(bp_net)
  38. flask_app.register_blueprint(bp_api)
  39. @flask_app.context_processor
  40. def _inject():
  41. from datetime import datetime as _dt
  42. return {
  43. "instance_name": flask_app.config.get("INSTANCE_NAME", ""),
  44. "instance_url": flask_app.config.get("INSTANCE_URL", ""),
  45. "api_token": flask_app.config.get("API_TOKEN", ""),
  46. "now": _dt.utcnow(),
  47. }
  48. with flask_app.app_context():
  49. _db.create_all()
  50. return flask_app
  51. @pytest.fixture
  52. def client(app):
  53. return app.test_client()
  54. @pytest.fixture(autouse=True)
  55. def clean_db(app):
  56. with app.app_context():
  57. yield
  58. from db import db as _db
  59. _db.session.remove()
  60. for table in reversed(_db.metadata.sorted_tables):
  61. _db.session.execute(table.delete())
  62. _db.session.commit()