88from browser_use_sdk .lib .webhooks import (
99 WebhookTest ,
1010 WebhookTestPayload ,
11- WebhookAgentTaskStatusUpdate ,
12- WebhookAgentTaskStatusUpdatePayload ,
1311 create_webhook_signature ,
1412 verify_webhook_event_signature ,
1513)
@@ -23,17 +21,15 @@ def test_create_webhook_signature() -> None:
2321
2422 signature = create_webhook_signature (payload , timestamp , secret )
2523
26- # Signature should be a hex string
2724 assert isinstance (signature , str )
28- assert len (signature ) == 64 # SHA256 hex length
25+ assert len (signature ) == 64
2926
30- # Same inputs should produce same signature
3127 signature2 = create_webhook_signature (payload , timestamp , secret )
3228 assert signature == signature2
3329
34- # Different payload should produce different signature
3530 different_payload = {"test" : "different" }
3631 different_signature = create_webhook_signature (different_payload , timestamp , secret )
32+
3733 assert signature != different_signature
3834
3935
@@ -51,7 +47,10 @@ def test_verify_webhook_event_signature_valid() -> None:
5147
5248 # Verify signature
5349 verified_webhook = verify_webhook_event_signature (
54- body = webhook .model_dump (), secret = secret , signature = signature , timestamp = timestamp
50+ body = webhook .model_dump (),
51+ secret = secret ,
52+ timestamp = timestamp ,
53+ expected_signature = signature ,
5554 )
5655
5756 assert verified_webhook is not None
@@ -68,67 +67,43 @@ def test_verify_webhook_event_signature_invalid_signature() -> None:
6867 payload = WebhookTestPayload (test = "ok" )
6968 webhook = WebhookTest (type = "test" , timestamp = datetime .now (timezone .utc ), payload = payload )
7069
71- # Use invalid signature
72- invalid_signature = "invalid_signature_123"
73-
7470 verified_webhook = verify_webhook_event_signature (
75- body = webhook .model_dump (), secret = secret , signature = invalid_signature , timestamp = timestamp
71+ body = webhook .model_dump (),
72+ secret = secret ,
73+ timestamp = timestamp ,
74+ expected_signature = "random_invalid_signature" ,
7675 )
7776
7877 assert verified_webhook is None
7978
8079
8180def test_verify_webhook_event_signature_wrong_secret () -> None :
8281 """Test webhook signature verification with wrong secret."""
83- secret = "test-secret-key"
84- wrong_secret = "wrong-secret-key"
82+
8583 timestamp = "2023-01-01T00:00:00Z"
8684
8785 # Create test webhook
8886 payload = WebhookTestPayload (test = "ok" )
8987 webhook = WebhookTest (type = "test" , timestamp = datetime .now (timezone .utc ), payload = payload )
9088
9189 # Create signature with correct secret
92- signature = create_webhook_signature (webhook .payload .model_dump (), timestamp , secret )
90+ signature = create_webhook_signature (
91+ payload = webhook .payload .model_dump (),
92+ timestamp = timestamp ,
93+ secret = "test-secret-key" ,
94+ )
9395
9496 # Verify with wrong secret
9597 verified_webhook = verify_webhook_event_signature (
96- body = webhook .model_dump (), secret = wrong_secret , signature = signature , timestamp = timestamp
98+ body = webhook .model_dump (),
99+ secret = "wrong-secret-key" ,
100+ timestamp = timestamp ,
101+ expected_signature = signature ,
97102 )
98103
99104 assert verified_webhook is None
100105
101106
102- def test_verify_webhook_event_signature_agent_task_status_update () -> None :
103- """Test webhook signature verification for agent task status update."""
104- secret = "test-secret-key"
105- timestamp = "2023-01-01T00:00:00Z"
106-
107- # Create agent task status update webhook
108- payload = WebhookAgentTaskStatusUpdatePayload (
109- session_id = "sess_123" , task_id = "task_456" , status = "started" , metadata = {"progress" : 25 }
110- )
111-
112- webhook = WebhookAgentTaskStatusUpdate (
113- type = "agent.task.status_update" , timestamp = datetime .now (timezone .utc ), payload = payload
114- )
115-
116- # Create signature
117- signature = create_webhook_signature (webhook .payload .model_dump (), timestamp , secret )
118-
119- # Verify signature
120- verified_webhook = verify_webhook_event_signature (
121- body = webhook .model_dump (), secret = secret , signature = signature , timestamp = timestamp
122- )
123-
124- assert verified_webhook is not None
125- assert isinstance (verified_webhook , WebhookAgentTaskStatusUpdate )
126- assert verified_webhook .payload .session_id == "sess_123"
127- assert verified_webhook .payload .status == "started"
128- assert verified_webhook .payload .metadata is not None
129- assert verified_webhook .payload .metadata ["progress" ] == 25
130-
131-
132107def test_verify_webhook_event_signature_string_body () -> None :
133108 """Test webhook signature verification with string body."""
134109 secret = "test-secret-key"
@@ -143,7 +118,7 @@ def test_verify_webhook_event_signature_string_body() -> None:
143118
144119 # Verify with string body
145120 verified_webhook = verify_webhook_event_signature (
146- body = webhook .model_dump (), secret = secret , signature = signature , timestamp = timestamp
121+ body = webhook .model_dump (), secret = secret , expected_signature = signature , timestamp = timestamp
147122 )
148123
149124 assert verified_webhook is not None
@@ -159,7 +134,7 @@ def test_verify_webhook_event_signature_invalid_body() -> None:
159134 invalid_body : Dict [str , Any ] = {"type" : "invalid_type" , "timestamp" : "invalid" , "payload" : {}}
160135
161136 verified_webhook = verify_webhook_event_signature (
162- body = invalid_body , secret = secret , signature = "some_signature" , timestamp = timestamp
137+ body = invalid_body , secret = secret , expected_signature = "some_signature" , timestamp = timestamp
163138 )
164139
165140 assert verified_webhook is None
0 commit comments