File size: 4,797 Bytes
5b558e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
"""
Test script to verify duplicate assignment prevention
Ensures that an order cannot be assigned to multiple drivers simultaneously
"""

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from chat.tools import (
    handle_create_order,
    handle_create_driver,
    handle_create_assignment
)

print("=" * 70)
print("Testing Duplicate Assignment Prevention")
print("=" * 70)

# Step 1: Create test order
print("\n[1] Creating test order...")
order_result = handle_create_order({
    "customer_name": "Duplicate Test Customer",
    "customer_phone": "+8801712345678",
    "delivery_address": "Uttara, Dhaka",
    "delivery_lat": 23.8759,
    "delivery_lng": 90.3795,
    "priority": "standard",
    "weight_kg": 3.0
})

if not order_result.get("success"):
    print(f"FAILED: {order_result.get('error')}")
    sys.exit(1)

order_id = order_result["order_id"]
print(f"SUCCESS: Order created: {order_id}")

# Step 2: Create first driver
print("\n[2] Creating first driver...")
driver1_result = handle_create_driver({
    "name": "Driver One",
    "phone": "+8801812345678",
    "vehicle_type": "motorcycle",
    "current_lat": 23.8103,
    "current_lng": 90.4125
})

if not driver1_result.get("success"):
    print(f"FAILED: {driver1_result.get('error')}")
    sys.exit(1)

driver1_id = driver1_result["driver_id"]
print(f"SUCCESS: Driver 1 created: {driver1_id} (Driver One)")

# Step 3: Create second driver (add small delay to avoid ID collision)
print("\n[3] Creating second driver...")
import time
time.sleep(0.1)  # Small delay to ensure different timestamp
driver2_result = handle_create_driver({
    "name": "Driver Two",
    "phone": "+8801912345678",
    "vehicle_type": "car",
    "current_lat": 23.7465,
    "current_lng": 90.3760
})

if not driver2_result.get("success"):
    print(f"FAILED: {driver2_result.get('error')}")
    sys.exit(1)

driver2_id = driver2_result["driver_id"]
print(f"SUCCESS: Driver 2 created: {driver2_id} (Driver Two)")

# Step 4: Assign order to first driver
print(f"\n[4] Assigning order {order_id} to Driver One...")
assignment1_result = handle_create_assignment({
    "order_id": order_id,
    "driver_id": driver1_id
})

if not assignment1_result.get("success"):
    print(f"FAILED: {assignment1_result.get('error')}")
    sys.exit(1)

assignment1_id = assignment1_result["assignment_id"]
print(f"SUCCESS: Assignment created: {assignment1_id}")
print(f"  Order {order_id} assigned to Driver One")

# Step 5: Attempt to assign the same order to second driver (should fail)
print(f"\n[5] Attempting to assign same order to Driver Two (should fail)...")
assignment2_result = handle_create_assignment({
    "order_id": order_id,
    "driver_id": driver2_id
})

if not assignment2_result.get("success"):
    error_msg = assignment2_result.get('error', '')
    print(f"EXPECTED FAILURE: {error_msg}")

    # Verify error message contains expected information
    if "already assigned" in error_msg.lower() and "Driver One" in error_msg:
        print(f"SUCCESS: Error message correctly identifies existing assignment!")
        print(f"  - Mentions order is already assigned")
        print(f"  - Shows driver name (Driver One)")
        print(f"  - Shows assignment ID ({assignment1_id})")
    else:
        print(f"WARNING: Error message could be more descriptive")
else:
    print(f"FAILED: Should have prevented duplicate assignment!")
    print(f"  Unexpected assignment created: {assignment2_result.get('assignment_id')}")
    sys.exit(1)

# Step 6: Attempt to assign same order to SAME driver again (should also fail)
print(f"\n[6] Attempting to assign same order to Driver One again (should also fail)...")
assignment3_result = handle_create_assignment({
    "order_id": order_id,
    "driver_id": driver1_id
})

if not assignment3_result.get("success"):
    error_msg = assignment3_result.get('error', '')
    print(f"EXPECTED FAILURE: {error_msg}")
    print(f"SUCCESS: Correctly prevents reassigning to same driver!")
else:
    print(f"FAILED: Should have prevented duplicate assignment to same driver!")
    sys.exit(1)

print("\n" + "=" * 70)
print("Duplicate Assignment Prevention Test Complete!")
print("=" * 70)
print("\nSummary:")
print("  - Order can be assigned to a driver: YES")
print("  - Same order can be assigned to another driver: NO (prevented)")
print("  - Same order can be reassigned to same driver: NO (prevented)")
print("  - Error message is informative: YES")

# Cleanup
print("\nCleaning up test data...")
from chat.tools import handle_delete_order, handle_delete_driver

handle_delete_order({"order_id": order_id, "confirm": True})
handle_delete_driver({"driver_id": driver1_id, "confirm": True})
handle_delete_driver({"driver_id": driver2_id, "confirm": True})
print("Cleanup complete!")