from unittest.mock import patch import pytest from flask_login.test_client import FlaskLoginClient from htmx_contact import create_app from htmx_contact.config import ContactSettings from htmx_contact.models import Contact from htmx_contact.models import User @pytest.fixture() def test_config(): return ContactSettings(SECRET_KEY=b"secrettestingvalue") @pytest.fixture() def test_user(): return User(id=1, primary_email="test", password="test", username="test") @pytest.fixture() def test_contacts(test_user): return [ Contact( id=1, user_id=test_user.id, first_name="Mark", last_name="Zuckerberg", email="zuck@facebook.com", phone="555-777-1337", ), Contact( id=2, user_id=test_user.id, first_name="Shaan", last_name="Puri", email="shaan@twitter.com", phone="666-777-1337", ), Contact( id=3, user_id=test_user.id, first_name="Sam", last_name="Par", email="sam@thesampar.com", phone="587-343-1337", ), ] @pytest.fixture() def app(test_config): app = create_app(config=test_config) app.test_client_class = FlaskLoginClient app.config.update( { "TESTING": True, # disbale session protection or session "freshness" will cause failures. "SESSION_PROTECTION": None, } ) # other setup can go here yield app # clean up / reset resources here @pytest.fixture() def anynomous_client(app): return app.test_client() @pytest.fixture() def client(app, test_user): with app.test_client(user=test_user) as client: yield client @pytest.fixture() def runner(app): return app.test_cli_runner() @pytest.fixture() def sqla_session(): with patch("htmx_contact.Session") as ms: yield ms