Files
ismijnipverweg/app/test_iplookup.py
Ruben van Staveren 230d031e67
Some checks failed
Bandit / audit-runtime-security (3.11) (pull_request) Failing after 5m39s
Flake8 / audit (3.11) (pull_request) Successful in 10m3s
Mypy / audit-typing (3.11) (pull_request) Failing after 6m15s
pip-audit / audit-dependency-security (3.11) (pull_request) Successful in 11m14s
Pylint / audit-runtime-security (3.11) (pull_request) Failing after 5m50s
Python Coverage / test-and-coverage (3.11) (pull_request) Failing after 5m40s
Add code coverage. also, install dev depends from requirements-dev.txt
2026-03-15 12:21:06 +01:00

92 lines
2.2 KiB
Python

'''
Test ismijnverweg geolookup api
'''
import logging
import random
import re
from operator import itemgetter
from faker import Faker
from fastapi.testclient import TestClient
from .main import app
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Initialize Faker for generating test data
fake = Faker()
# Create test client
fake_ipv6 = fake.ipv6()
client = TestClient(app, client=(fake_ipv6, 31337))
def test_no_query():
"""Test searching without a query parameter"""
response = client.get("/")
assert response.status_code == 200
results = response.json()
logging.info(results)
assert results['ip'] == fake_ipv6
assert len(results) > 0
def test_single_query():
"""Test searching with an ip address"""
fake_ipv4 = fake.ipv4_public()
response = client.get(f"/{fake_ipv4}")
assert response.status_code == 200
results = response.json()
logging.info(results)
assert results['ip'] == fake_ipv4
assert len(results) > 0
def test_multi_query():
"""Test searching with an ip address"""
fake_ips = [{'ip': fake.ipv6() if random.random() > 0.5 else fake.ipv4()}
for _ in range(16)]
response = client.post("/", json=fake_ips)
assert response.status_code == 200
results = response.json()
logging.info(results)
for ip in map(itemgetter('ip'), results):
assert ip in map(itemgetter('ip'), fake_ips)
assert len(results) > 0
def test_invalid_query():
"""Test searching with an invalid ip address"""
invalid_ip = '500.312.77.31337'
test_pattern = 'Input is not a valid IPv[46] address'
response = client.get(f"/{invalid_ip}")
assert response.status_code == 422
results = response.json()
logging.info(results)
assert all(map(lambda x: x == invalid_ip, (
map(itemgetter('input'), results['detail']))))
assert all(map(lambda x: re.match(test_pattern, x), (
map(itemgetter('msg'), results['detail']))))
assert len(results) > 0
if __name__ == "__main__":
# Run tests
test_no_query()
test_single_query()
test_invalid_query()
test_multi_query()
print("All tests passed!")