Tests added
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
"""
|
||||
Tests for data storage (YAML files and file system operations).
|
||||
"""
|
||||
import pytest
|
||||
import os
|
||||
import yaml
|
||||
from pathlib import Path
|
||||
from app import (
|
||||
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."""
|
||||
session_id = sample_application_data['session_id']
|
||||
save_application_data(session_id, sample_application_data)
|
||||
|
||||
# Verify file was created
|
||||
data_file = get_data_file_path(session_id)
|
||||
assert os.path.exists(data_file)
|
||||
|
||||
# Verify content
|
||||
with open(data_file, 'r', encoding='utf-8') as f:
|
||||
loaded_data = yaml.safe_load(f)
|
||||
|
||||
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']
|
||||
|
||||
def test_load_application_data(self, app, sample_application_data):
|
||||
"""Test loading application data from YAML file."""
|
||||
session_id = sample_application_data['session_id']
|
||||
|
||||
# Save data first
|
||||
save_application_data(session_id, sample_application_data)
|
||||
|
||||
# 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'
|
||||
|
||||
def test_load_nonexistent_application(self, app):
|
||||
"""Test loading data for non-existent application."""
|
||||
loaded_data = load_application_data('nonexistent-session')
|
||||
assert loaded_data is None
|
||||
|
||||
def test_unicode_characters_in_yaml(self, app):
|
||||
"""Test that German umlauts and special characters are preserved."""
|
||||
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'
|
||||
}
|
||||
}
|
||||
|
||||
save_application_data(session_id, data)
|
||||
loaded_data = load_application_data(session_id)
|
||||
|
||||
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'
|
||||
|
||||
def test_update_existing_application(self, app, sample_application_data):
|
||||
"""Test updating existing application data."""
|
||||
session_id = sample_application_data['session_id']
|
||||
|
||||
# Save initial data
|
||||
save_application_data(session_id, sample_application_data)
|
||||
|
||||
# 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)
|
||||
|
||||
# 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'
|
||||
|
||||
|
||||
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."""
|
||||
session_id = sample_application_data['session_id']
|
||||
save_application_data(session_id, sample_application_data)
|
||||
|
||||
app_path = get_application_path(session_id)
|
||||
assert os.path.exists(app_path)
|
||||
assert os.path.isdir(app_path)
|
||||
|
||||
def test_data_yaml_created(self, app, sample_application_data):
|
||||
"""Test that data.yaml file is created."""
|
||||
session_id = sample_application_data['session_id']
|
||||
save_application_data(session_id, sample_application_data)
|
||||
|
||||
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')
|
||||
|
||||
def test_attachments_folder_path(self, app):
|
||||
"""Test that attachments folder path is correct."""
|
||||
session_id = 'test-attachments-123'
|
||||
attachments_path = get_attachments_path(session_id)
|
||||
|
||||
assert 'attachments' in attachments_path
|
||||
assert session_id in attachments_path
|
||||
|
||||
|
||||
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 import save_application_data
|
||||
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."""
|
||||
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': ''
|
||||
}
|
||||
}
|
||||
|
||||
save_application_data(session_id, data)
|
||||
loaded_data = load_application_data(session_id)
|
||||
|
||||
assert loaded_data['personal_info']['civil_status'] == ''
|
||||
assert loaded_data['motivation_answers']['current_job'] == ''
|
||||
assert loaded_data['motivation_answers']['motivation'] == 'Some text'
|
||||
Reference in New Issue
Block a user