generate vCard in utils.py; added Tests
This commit is contained in:
62
tests/test_vcard_export.py
Normal file
62
tests/test_vcard_export.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
|
||||
from app import app, db, Frage
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client(tmp_path, monkeypatch):
|
||||
# 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()
|
||||
|
||||
with app.test_client() as test_client:
|
||||
yield test_client
|
||||
|
||||
|
||||
def test_vcard_created_after_submit(client, tmp_path):
|
||||
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',
|
||||
'frage_1': '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
|
||||
Reference in New Issue
Block a user