Files
CheckInCare/tests/test_vcard_export.py

66 lines
1.9 KiB
Python

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