66 lines
1.9 KiB
Python
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
|