Initial commit
Dieser Commit ist enthalten in:
207
v2_testing/test_customer_management.py
Normale Datei
207
v2_testing/test_customer_management.py
Normale Datei
@ -0,0 +1,207 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import urllib3
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
|
||||
# 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_customer_list():
|
||||
"""Test customer list view"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
response = session.get(f"{base_url}/customers", verify=False)
|
||||
if response.status_code != 200:
|
||||
return f"✗ Failed to access customers page: Status {response.status_code}"
|
||||
|
||||
content = response.text
|
||||
|
||||
# Check for expected customers
|
||||
expected_customers = ["Müller GmbH", "Test Customer", "Schröder Süßwaren AG", "Björn Köhler"]
|
||||
found_customers = []
|
||||
|
||||
for customer in expected_customers:
|
||||
if customer in content:
|
||||
found_customers.append(customer)
|
||||
|
||||
if len(found_customers) > 0:
|
||||
return f"✓ Customer list loaded successfully ({len(found_customers)} customers found)"
|
||||
else:
|
||||
return "✗ No customers found in list"
|
||||
|
||||
def test_edit_customer():
|
||||
"""Test editing a customer"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
# Get a customer ID to edit (let's find "Test Customer")
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", "SELECT id FROM customers WHERE name = 'Test Customer' LIMIT 1;"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
customer_id = result.stdout.strip()
|
||||
if not customer_id:
|
||||
return "✗ Failed to find test customer"
|
||||
|
||||
# Test GET edit page
|
||||
response = session.get(f"{base_url}/customer/edit/{customer_id}", verify=False)
|
||||
if response.status_code != 200:
|
||||
return f"✗ Failed to access customer edit page: Status {response.status_code}"
|
||||
|
||||
# Check if customer data and licenses are displayed
|
||||
content = response.text
|
||||
if "Test Customer" not in content:
|
||||
return "✗ Edit page doesn't show customer data"
|
||||
|
||||
# Update customer data
|
||||
updated_data = {
|
||||
"name": "Test Customer GmbH & Co. KG",
|
||||
"email": "updated@testcustomer.de"
|
||||
}
|
||||
|
||||
response = session.post(f"{base_url}/customer/edit/{customer_id}",
|
||||
data=updated_data,
|
||||
verify=False,
|
||||
allow_redirects=False)
|
||||
|
||||
if response.status_code == 302 and response.headers.get('Location') == '/customers':
|
||||
return "✓ Customer edited successfully"
|
||||
else:
|
||||
return f"✗ Failed to edit customer: Status {response.status_code}"
|
||||
|
||||
def test_delete_customer():
|
||||
"""Test deleting a customer"""
|
||||
session = requests.Session()
|
||||
|
||||
if not login(session):
|
||||
return "✗ Failed to login"
|
||||
|
||||
# Create a test customer without licenses
|
||||
test_customer = {
|
||||
"customer_name": "Löschtest Firma GmbH",
|
||||
"email": "delete@löschtest.de",
|
||||
"license_key": "TEMP-KEY-DELETE",
|
||||
"license_type": "Test",
|
||||
"valid_from": "2025-01-01",
|
||||
"valid_until": "2025-01-02"
|
||||
}
|
||||
|
||||
# Create customer with license
|
||||
session.post(f"{base_url}/", data=test_customer, verify=False, allow_redirects=False)
|
||||
|
||||
# Get the customer ID
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", "SELECT id FROM customers WHERE name = 'Löschtest Firma GmbH';"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
customer_id = result.stdout.strip()
|
||||
if not customer_id:
|
||||
return "✗ Failed to create test customer"
|
||||
|
||||
# First, try to delete customer with license (should fail)
|
||||
response = session.post(f"{base_url}/customer/delete/{customer_id}",
|
||||
verify=False,
|
||||
allow_redirects=False)
|
||||
|
||||
# Check if customer still exists (should not be deleted due to license)
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", f"SELECT COUNT(*) FROM customers WHERE id = {customer_id};"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
if int(result.stdout.strip()) != 1:
|
||||
return "✗ Customer with licenses was incorrectly deleted"
|
||||
|
||||
# Now delete the license first
|
||||
subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", f"DELETE FROM licenses WHERE customer_id = {customer_id};"
|
||||
], capture_output=True)
|
||||
|
||||
# Try to delete customer again (should work now)
|
||||
response = session.post(f"{base_url}/customer/delete/{customer_id}",
|
||||
verify=False,
|
||||
allow_redirects=False)
|
||||
|
||||
# Verify deletion
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank", "-t",
|
||||
"-c", f"SELECT COUNT(*) FROM customers WHERE id = {customer_id};"
|
||||
], capture_output=True, text=True)
|
||||
|
||||
if int(result.stdout.strip()) == 0:
|
||||
return "✓ Customer deletion works correctly (protects customers with licenses)"
|
||||
else:
|
||||
return "✗ Failed to delete customer without licenses"
|
||||
|
||||
# Rebuild and restart admin panel
|
||||
print("Rebuilding admin panel with customer management...")
|
||||
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 Customer Management Functionality")
|
||||
print("=" * 50)
|
||||
|
||||
# Test customer list
|
||||
print("\n1. Testing Customer List:")
|
||||
print("-" * 30)
|
||||
list_result = test_customer_list()
|
||||
print(list_result)
|
||||
|
||||
# Test edit functionality
|
||||
print("\n2. Testing Customer Edit:")
|
||||
print("-" * 30)
|
||||
edit_result = test_edit_customer()
|
||||
print(edit_result)
|
||||
|
||||
# Verify the edit
|
||||
print("\nVerifying edited customer:")
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", "SELECT name, email FROM customers WHERE name LIKE 'Test Customer%';"
|
||||
], capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
|
||||
# Test delete functionality
|
||||
print("\n3. Testing Customer Delete:")
|
||||
print("-" * 30)
|
||||
delete_result = test_delete_customer()
|
||||
print(delete_result)
|
||||
|
||||
# Show customer statistics
|
||||
print("\n" + "=" * 50)
|
||||
print("Customer Statistics:")
|
||||
print("-" * 50)
|
||||
result = subprocess.run([
|
||||
"docker", "exec", "db", "psql", "-U", "adminuser", "-d", "meinedatenbank",
|
||||
"-c", """SELECT c.name, COUNT(l.id) as total_licenses,
|
||||
COUNT(CASE WHEN l.is_active = TRUE AND l.valid_until >= CURRENT_DATE THEN 1 END) as active_licenses
|
||||
FROM customers c
|
||||
LEFT JOIN licenses l ON c.id = l.customer_id
|
||||
GROUP BY c.name
|
||||
ORDER BY c.name;"""
|
||||
], capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren