import pytest from pathlib import Path from app import app, db, Frage @pytest.fixture def client(tmp_path): # Use a temporary directory for vcards and a temporary sqlite db # temp DB file db_file = tmp_path / "test.db" # Configure app for testing app.config['TESTING'] = True app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_file}' # Use temp vcards dir by setting app.BASE_DIR app.BASE_DIR = str(tmp_path) # ensure clean DB and create tables with app.app_context(): db.drop_all() db.create_all() # create a sample question so POST processing loops over it q = Frage(text='Testfrage?') db.session.add(q) db.session.commit() # record question id for use in test POST data app.config['TEST_QUESTION_ID'] = q.id with app.test_client() as test_client: yield test_client def test_vcard_created_after_submit(client): data = { 'vorname': 'Max', 'nachname': 'Mustermann', 'strasse': 'Musterstraße', 'hausnummer': '1', 'plz': '12345', 'ort': 'Musterstadt', 'land': 'Deutschland', 'telefon_vorwahl': '49', 'telefon_nummer': '1234567', 'email': 'max@example.com', # question id set in fixture f'frage_{app.config.get("TEST_QUESTION_ID")}': 'Antwort' } # Submit the form res = client.post('/', data=data, follow_redirects=True) assert res.status_code == 200 # find vcards dir under tmp_path (app.BASE_DIR) vcards_dir = Path(app.BASE_DIR) / 'vcards' files = list(vcards_dir.glob('*.vcf')) assert len(files) == 1 content = files[0].read_text(encoding='utf-8') assert 'BEGIN:VCARD' in content assert 'VERSION:4.0' in content assert 'FN:Max Mustermann' in content assert 'EMAIL;TYPE=internet:max@example.com' in content assert 'ADR:' in content