Files

224 lines
8.5 KiB
Python
Raw Permalink Normal View History

2025-12-27 16:49:52 +01:00
"""
Tests for data storage (YAML files and file system operations).
"""
import pytest
import os
import yaml
from pathlib import Path
from app.models import (
2025-12-27 16:49:52 +01:00
save_application_data,
load_application_data,
get_application_path,
get_data_file_path,
get_attachments_path
)
class TestYAMLStorage:
"""Tests for YAML data storage."""
def test_save_application_data(self, app, sample_application_data):
"""Test saving application data to YAML file."""
with app.app_context():
session_id = sample_application_data['session_id']
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
# Verify file was created
data_file = get_data_file_path(session_id)
assert os.path.exists(data_file)
2025-12-27 16:49:52 +01:00
# Verify content
with open(data_file, 'r', encoding='utf-8') as f:
loaded_data = yaml.safe_load(f)
2025-12-27 16:49:52 +01:00
assert loaded_data['session_id'] == session_id
assert loaded_data['email'] == sample_application_data['email']
assert loaded_data['job_name'] == sample_application_data['job_name']
2025-12-27 16:49:52 +01:00
def test_load_application_data(self, app, sample_application_data):
"""Test loading application data from YAML file."""
with app.app_context():
session_id = sample_application_data['session_id']
2025-12-27 16:49:52 +01:00
# Save data first
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
# Load and verify
loaded_data = load_application_data(session_id)
assert loaded_data is not None
assert loaded_data['session_id'] == session_id
assert loaded_data['email'] == sample_application_data['email']
assert loaded_data['personal_info']['name'] == 'Müller'
2025-12-27 16:49:52 +01:00
def test_load_nonexistent_application(self, app):
"""Test loading data for non-existent application."""
with app.app_context():
loaded_data = load_application_data('nonexistent-session')
assert loaded_data is None
2025-12-27 16:49:52 +01:00
def test_unicode_characters_in_yaml(self, app):
"""Test that German umlauts and special characters are preserved."""
with app.app_context():
session_id = 'test-unicode-123'
data = {
'session_id': session_id,
'email': 'test@example.com',
'job_name': 'Test Job',
'current_page': 2,
'personal_info': {
'name': 'Müller',
'firstname': 'Jürgen',
'city': 'München',
'notes': 'Grüße aus Zürich'
}
2025-12-27 16:49:52 +01:00
}
save_application_data(session_id, data)
loaded_data = load_application_data(session_id)
2025-12-27 16:49:52 +01:00
assert loaded_data['personal_info']['name'] == 'Müller'
assert loaded_data['personal_info']['firstname'] == 'Jürgen'
assert loaded_data['personal_info']['city'] == 'München'
assert loaded_data['personal_info']['notes'] == 'Grüße aus Zürich'
2025-12-27 16:49:52 +01:00
def test_update_existing_application(self, app, sample_application_data):
"""Test updating existing application data."""
with app.app_context():
session_id = sample_application_data['session_id']
2025-12-27 16:49:52 +01:00
# Save initial data
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
# Update data
sample_application_data['current_page'] = 3
sample_application_data['motivation_answers'] = {
'current_job': 'Developer',
'motivation': 'Great company'
}
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
# Verify update
loaded_data = load_application_data(session_id)
assert loaded_data['current_page'] == 3
assert 'motivation_answers' in loaded_data
assert loaded_data['motivation_answers']['current_job'] == 'Developer'
2025-12-27 16:49:52 +01:00
class TestFolderStructure:
"""Tests for application folder structure."""
def test_application_folder_created(self, app, sample_application_data):
"""Test that application folder is created when saving data."""
with app.app_context():
session_id = sample_application_data['session_id']
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
app_path = get_application_path(session_id)
assert os.path.exists(app_path)
assert os.path.isdir(app_path)
2025-12-27 16:49:52 +01:00
def test_data_yaml_created(self, app, sample_application_data):
"""Test that data.yaml file is created."""
with app.app_context():
session_id = sample_application_data['session_id']
save_application_data(session_id, sample_application_data)
2025-12-27 16:49:52 +01:00
data_file = get_data_file_path(session_id)
assert os.path.exists(data_file)
assert os.path.isfile(data_file)
assert data_file.endswith('data.yaml')
2025-12-27 16:49:52 +01:00
def test_attachments_folder_path(self, app):
"""Test that attachments folder path is correct."""
with app.app_context():
session_id = 'test-attachments-123'
attachments_path = get_attachments_path(session_id)
2025-12-27 16:49:52 +01:00
assert 'attachments' in attachments_path
assert session_id in attachments_path
2025-12-27 16:49:52 +01:00
class TestDataPersistence:
"""Tests for data persistence across workflow."""
def test_data_persists_across_pages(self, app, client):
"""Test that data persists as user progresses through pages."""
# Submit email
response = client.post('/apply/submit-email', data={
'email': 'persist@example.com',
'job_name': 'Persistence Test'
}, follow_redirects=True)
# Extract session ID from response
# For testing, we'll create a known session
from app.models import save_application_data
2025-12-27 16:49:52 +01:00
session_id = 'test-persist-123'
save_application_data(session_id, {
'session_id': session_id,
'email': 'persist@example.com',
'job_name': 'Persistence Test',
'current_page': 2,
'personal_info': {},
'motivation_answers': {},
'uploaded_files': []
})
# Submit personal info
client.post(f'/apply/{session_id}/submit-personal', data={
'name': 'Test',
'firstname': 'User',
'address': 'Street 1',
'zip_code': '12345',
'city': 'City',
'phone': '+41 79 123 45 67',
'birth_year': '1990'
})
# Load and verify personal info was saved
loaded_data = load_application_data(session_id)
assert loaded_data is not None
assert loaded_data['personal_info']['name'] == 'Test'
assert loaded_data['personal_info']['firstname'] == 'User'
assert loaded_data['current_page'] == 3 # Should be updated
# Submit motivation
client.post(f'/apply/{session_id}/submit-motivation', data={
'current_job': 'Developer',
'motivation': 'Love coding',
'qualifications': 'Python expert',
'salary': '100000'
})
# Load and verify motivation was saved
loaded_data = load_application_data(session_id)
assert loaded_data['motivation_answers']['current_job'] == 'Developer'
assert loaded_data['motivation_answers']['motivation'] == 'Love coding'
assert loaded_data['current_page'] == 4
def test_empty_optional_fields_preserved(self, app):
"""Test that empty optional fields are preserved correctly."""
with app.app_context():
session_id = 'test-empty-fields'
data = {
'session_id': session_id,
'email': 'test@example.com',
'job_name': 'Test',
'current_page': 3,
'personal_info': {
'civil_status': '' # Optional, empty
},
'motivation_answers': {
'current_job': '', # Optional, empty
'motivation': 'Some text',
'qualifications': '',
'salary': ''
}
2025-12-27 16:49:52 +01:00
}
save_application_data(session_id, data)
loaded_data = load_application_data(session_id)
2025-12-27 16:49:52 +01:00
assert loaded_data['personal_info']['civil_status'] == ''
assert loaded_data['motivation_answers']['current_job'] == ''
assert loaded_data['motivation_answers']['motivation'] == 'Some text'