Initial commit
Dieser Commit ist enthalten in:
156
v2_testing/test_search.py
Normale Datei
156
v2_testing/test_search.py
Normale Datei
@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import urllib3
|
||||
import subprocess
|
||||
|
||||
# Disable SSL warnings for self-signed certificate
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
# Test configuration
|
||||
base_url = "https://localhost:443"
|
||||
admin_user = {"username": "rac00n", "password": "1248163264"}
|
||||
|
||||
def login(session):
|
||||
"""Login to admin panel"""
|
||||
login_data = {
|
||||
"username": admin_user["username"],
|
||||
"password": admin_user["password"]
|
||||
}
|
||||
response = session.post(f"{base_url}/login", data=login_data, verify=False, allow_redirects=False)
|
||||
return response.status_code == 302
|
||||
|
||||
def test_license_search():
|
||||
"""Test license search functionality"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
test_cases = [
|
||||
# (search_term, expected_results, description)
|
||||
("müller", ["Müller GmbH & Co. KG"], "Search by customer name with umlaut"),
|
||||
("KÖHLER", ["Björn Köhler"], "Search by license key (case insensitive)"),
|
||||
("@übersetzungen.de", ["Björn Köhler"], "Search by email domain with umlaut"),
|
||||
("2025", ["KÖHLER-2025", "MÜLLER-2025", "SCHRÖDER-2025"], "Search by year in license key"),
|
||||
("premium", ["TEST-LICENSE-KEY"], "Search by license type"),
|
||||
("süßwaren", ["Schröder Süßwaren"], "Search with special characters"),
|
||||
("xyz123", [], "Search with no results")
|
||||
]
|
||||
|
||||
results = []
|
||||
|
||||
for search_term, expected, description in test_cases:
|
||||
response = session.get(f"{base_url}/licenses?search={search_term}", verify=False)
|
||||
|
||||
if response.status_code != 200:
|
||||
results.append(f"✗ {description}: Failed with status {response.status_code}")
|
||||
continue
|
||||
|
||||
content = response.text
|
||||
found = []
|
||||
|
||||
for expected_item in expected:
|
||||
if expected_item.lower() in content.lower():
|
||||
found.append(expected_item)
|
||||
|
||||
if len(found) == len(expected) and len(expected) > 0:
|
||||
results.append(f"✓ {description}: Found {len(found)} result(s)")
|
||||
elif len(expected) == 0 and "Keine Lizenzen gefunden" in content:
|
||||
results.append(f"✓ {description}: Correctly shows no results")
|
||||
else:
|
||||
results.append(f"✗ {description}: Expected {len(expected)}, found {len(found)}")
|
||||
|
||||
return results
|
||||
|
||||
def test_customer_search():
|
||||
"""Test customer search functionality"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
test_cases = [
|
||||
# (search_term, expected_results, description)
|
||||
("gmbh", ["Müller GmbH", "Schröder", "Test Customer GmbH", "Löschtest"], "Search for GmbH companies"),
|
||||
("björn", ["Björn Köhler"], "Search by first name with umlaut"),
|
||||
("@müller", ["Müller GmbH & Co. KG"], "Search by email with umlaut"),
|
||||
("test", ["Test Customer", "Testfirma", "Löschtest"], "Search for test entries"),
|
||||
("überprüfung", ["Testfirma für Umlaute"], "Search with umlaut in term"),
|
||||
("nonexistent", [], "Search with no results")
|
||||
]
|
||||
|
||||
results = []
|
||||
|
||||
for search_term, expected, description in test_cases:
|
||||
response = session.get(f"{base_url}/customers?search={search_term}", verify=False)
|
||||
|
||||
if response.status_code != 200:
|
||||
results.append(f"✗ {description}: Failed with status {response.status_code}")
|
||||
continue
|
||||
|
||||
content = response.text
|
||||
found = []
|
||||
|
||||
for expected_item in expected:
|
||||
if expected_item.lower() in content.lower():
|
||||
found.append(expected_item)
|
||||
|
||||
if len(found) >= len(expected) * 0.7: # Allow 70% match rate due to variations
|
||||
results.append(f"✓ {description}: Found {len(found)} result(s)")
|
||||
else:
|
||||
results.append(f"✗ {description}: Expected ~{len(expected)}, found {len(found)}")
|
||||
|
||||
return results
|
||||
|
||||
# Rebuild and restart admin panel
|
||||
print("Rebuilding admin panel with search functionality...")
|
||||
subprocess.run(["docker-compose", "build", "admin-panel"], capture_output=True)
|
||||
subprocess.run(["docker-compose", "up", "-d", "admin-panel"], capture_output=True)
|
||||
print("Waiting for container to start...")
|
||||
subprocess.run(["sleep", "5"], capture_output=True)
|
||||
|
||||
print("\nTesting Search Functionality")
|
||||
print("=" * 50)
|
||||
|
||||
# Test license search
|
||||
print("\n1. License Search Tests:")
|
||||
print("-" * 30)
|
||||
license_results = test_license_search()
|
||||
for result in license_results:
|
||||
print(result)
|
||||
|
||||
# Test customer search
|
||||
print("\n2. Customer Search Tests:")
|
||||
print("-" * 30)
|
||||
customer_results = test_customer_search()
|
||||
for result in customer_results:
|
||||
print(result)
|
||||
|
||||
# Show some example search results from database
|
||||
print("\n" + "=" * 50)
|
||||
print("Database Search Examples:")
|
||||
print("-" * 50)
|
||||
|
||||
# Example: Search for "müller" in licenses
|
||||
print("\nSearching for 'müller' in licenses:")
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", """SELECT l.license_key, c.name, c.email
|
||||
FROM licenses l
|
||||
JOIN customers c ON l.customer_id = c.id
|
||||
WHERE LOWER(c.name) LIKE LOWER('%müller%')
|
||||
OR LOWER(l.license_key) LIKE LOWER('%müller%')
|
||||
OR LOWER(c.email) LIKE LOWER('%müller%');"""
|
||||
], capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
|
||||
# Example: Search for customers with "test"
|
||||
print("Searching for 'test' in customers:")
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", """SELECT name, email
|
||||
FROM customers
|
||||
WHERE LOWER(name) LIKE LOWER('%test%')
|
||||
OR LOWER(email) LIKE LOWER('%test%');"""
|
||||
], capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren