Files
application-form-7/tests/test_validation.py
T

149 lines
6.1 KiB
Python
Raw Normal View History

2025-12-27 16:49:52 +01:00
"""
Tests for validation functions in the Flask job application system.
"""
import pytest
from app import validate_email, validate_phone, validate_year, validate_zip, allowed_file
class TestEmailValidation:
"""Tests for email validation."""
def test_valid_email(self):
"""Test that valid email addresses are accepted."""
assert validate_email('test@example.com') is True
assert validate_email('user.name@domain.co.uk') is True
assert validate_email('test+tag@example.com') is True
assert validate_email('test_123@test-domain.com') is True
def test_invalid_email(self):
"""Test that invalid email addresses are rejected."""
assert validate_email('') is False
assert validate_email('invalid-email') is False
assert validate_email('@example.com') is False
assert validate_email('test@') is False
assert validate_email('test@domain') is False
assert validate_email('test @example.com') is False
def test_email_edge_cases(self):
"""Test edge cases for email validation."""
assert validate_email('a@b.co') is True # Minimum valid email
assert validate_email('test@@example.com') is False # Double @
assert validate_email('test..name@example.com') is True # Double dot in local part
class TestPhoneValidation:
"""Tests for international phone number validation."""
def test_valid_phone_with_spaces(self):
"""Test valid phone numbers with spaces."""
assert validate_phone('+41 79 123 45 67') is True
assert validate_phone('+1 555 123 4567') is True
assert validate_phone('+49 30 12345678') is True
def test_valid_phone_without_spaces(self):
"""Test valid phone numbers without spaces."""
assert validate_phone('+41791234567') is True
assert validate_phone('+15551234567') is True
assert validate_phone('+493012345678') is True
def test_invalid_phone(self):
"""Test that invalid phone numbers are rejected."""
assert validate_phone('') is False
assert validate_phone('079 123 45 67') is False # Missing +
assert validate_phone('+41') is False # Too short
assert validate_phone('41791234567') is False # Missing +
assert validate_phone('+') is False # Only +
def test_phone_edge_cases(self):
"""Test edge cases for phone validation."""
assert validate_phone('+1 123') is True # Minimum length
assert validate_phone('+999 1234567890123456') is True # Long number within limit
class TestYearValidation:
"""Tests for birth year validation."""
def test_valid_years(self):
"""Test that valid birth years are accepted."""
assert validate_year('1940') is True # Minimum
assert validate_year('1990') is True # Middle
assert validate_year('2010') is True # Maximum
def test_invalid_years_out_of_range(self):
"""Test that years outside the valid range are rejected."""
assert validate_year('1939') is False # Too old
assert validate_year('2011') is False # Too young
assert validate_year('1900') is False
assert validate_year('2025') is False
def test_invalid_year_format(self):
"""Test that invalid year formats are rejected."""
assert validate_year('') is False
assert validate_year('90') is False # 2 digits
assert validate_year('990') is False # 3 digits
assert validate_year('19900') is False # 5 digits
assert validate_year('abcd') is False # Non-numeric
assert validate_year('199a') is False # Mixed
class TestZipValidation:
"""Tests for ZIP code validation."""
def test_valid_zip_codes(self):
"""Test that valid ZIP codes are accepted."""
assert validate_zip('8001') is True
assert validate_zip('12345') is True
assert validate_zip('1') is True # Single digit
assert validate_zip('1234567890') is True # Max 10 digits
def test_invalid_zip_codes(self):
"""Test that invalid ZIP codes are rejected."""
assert validate_zip('') is False
assert validate_zip('12345678901') is False # 11 digits (too long)
assert validate_zip('abc') is False # Non-numeric
assert validate_zip('123a5') is False # Mixed
def test_zip_edge_cases(self):
"""Test edge cases for ZIP validation."""
assert validate_zip('0') is True # Zero is valid
assert validate_zip('00000') is True # Leading zeros
class TestFileExtensionValidation:
"""Tests for file extension validation."""
def test_valid_file_extensions(self):
"""Test that files with valid extensions are accepted."""
assert allowed_file('document.pdf') is True
assert allowed_file('resume.doc') is True
assert allowed_file('cover.docx') is True
assert allowed_file('notes.txt') is True
assert allowed_file('photo.jpg') is True
assert allowed_file('image.jpeg') is True
assert allowed_file('picture.png') is True
def test_invalid_file_extensions(self):
"""Test that files with invalid extensions are rejected."""
assert allowed_file('script.exe') is False
assert allowed_file('data.zip') is False
assert allowed_file('code.py') is False
assert allowed_file('file.unknown') is False
def test_file_without_extension(self):
"""Test that files without extensions are rejected."""
assert allowed_file('noextension') is False
assert allowed_file('') is False
def test_case_insensitive_extensions(self):
"""Test that file extension validation is case-insensitive."""
assert allowed_file('document.PDF') is True
assert allowed_file('document.Pdf') is True
assert allowed_file('image.JPG') is True
assert allowed_file('image.JPEG') is True
def test_multiple_dots_in_filename(self):
"""Test files with multiple dots in the filename."""
assert allowed_file('my.document.pdf') is True
assert allowed_file('file.name.with.dots.jpg') is True
assert allowed_file('test.tar.gz') is False # .gz not allowed