Skip to content

Commit 6ab4c6e

Browse files
committed
greptile comments
1 parent da8c1e8 commit 6ab4c6e

File tree

3 files changed

+252
-2
lines changed

3 files changed

+252
-2
lines changed

src/workos/types/events/event.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@
5757
VaultDataCreatedPayload,
5858
VaultDataDeletedPayload,
5959
VaultDataReadPayload,
60+
VaultDataUpdatedPayload,
6061
VaultDekDecryptedPayload,
6162
VaultDekReadPayload,
6263
VaultKekCreatedPayload,
64+
VaultMetadataReadPayload,
6365
VaultNamesListedPayload,
6466
)
6567
from workos.types.organizations.organization_common import OrganizationCommon
@@ -393,7 +395,7 @@ class VaultDataReadEvent(EventModel[VaultDataReadPayload]):
393395
event: Literal["vault.data.read"]
394396

395397

396-
class VaultDataUpdatedEvent(EventModel[VaultDataCreatedPayload]):
398+
class VaultDataUpdatedEvent(EventModel[VaultDataUpdatedPayload]):
397399
event: Literal["vault.data.updated"]
398400

399401

@@ -409,7 +411,7 @@ class VaultKekCreatedEvent(EventModel[VaultKekCreatedPayload]):
409411
event: Literal["vault.kek.created"]
410412

411413

412-
class VaultMetadataReadEvent(EventModel[VaultDataDeletedPayload]):
414+
class VaultMetadataReadEvent(EventModel[VaultMetadataReadPayload]):
413415
event: Literal["vault.metadata.read"]
414416

415417

src/workos/types/events/vault_payload.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,9 @@ class VaultKekCreatedPayload(WorkOSModel):
5555
actor_name: str
5656
key_name: str
5757
key_id: str
58+
59+
60+
# Type aliases for events that reuse another event's payload shape.
61+
# These give the .data field a semantically correct name for consumers.
62+
VaultDataUpdatedPayload = VaultDataCreatedPayload
63+
VaultMetadataReadPayload = VaultDataDeletedPayload

tests/test_events.py

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
from workos.types.events import OrganizationMembershipCreatedEvent
88
from workos.types.events.event import (
99
VaultDataCreatedEvent,
10+
VaultDataDeletedEvent,
11+
VaultDataReadEvent,
12+
VaultDataUpdatedEvent,
13+
VaultDekDecryptedEvent,
1014
VaultDekReadEvent,
15+
VaultKekCreatedEvent,
16+
VaultMetadataReadEvent,
1117
VaultNamesListedEvent,
1218
)
1319

@@ -223,3 +229,239 @@ def test_list_events_vault_names_listed(
223229
assert event.data.actor_id == "user_01234"
224230
assert event.data.actor_source == "api"
225231
assert event.data.actor_name == "Service Account"
232+
233+
def test_list_events_vault_data_read(
234+
self,
235+
module_instance: Union[Events, AsyncEvents],
236+
capture_and_mock_http_client_request,
237+
):
238+
mock_response = {
239+
"object": "list",
240+
"data": [
241+
{
242+
"object": "event",
243+
"id": "event_vault_09",
244+
"event": "vault.data.read",
245+
"data": {
246+
"actor_id": "user_01234",
247+
"actor_source": "api",
248+
"actor_name": "Read Service",
249+
"kv_name": "db-password",
250+
"key_id": "key_55",
251+
},
252+
"created_at": "2024-01-01T00:00:00.000Z",
253+
}
254+
],
255+
"list_metadata": {"after": None},
256+
}
257+
258+
capture_and_mock_http_client_request(
259+
http_client=module_instance._http_client,
260+
status_code=200,
261+
response_dict=mock_response,
262+
)
263+
264+
events: EventsListResource = syncify(
265+
module_instance.list_events(events=["vault.data.read"])
266+
)
267+
268+
event = events.data[0]
269+
assert isinstance(event, VaultDataReadEvent)
270+
assert event.data.kv_name == "db-password"
271+
assert event.data.key_id == "key_55"
272+
273+
def test_list_events_vault_dek_decrypted(
274+
self,
275+
module_instance: Union[Events, AsyncEvents],
276+
capture_and_mock_http_client_request,
277+
):
278+
mock_response = {
279+
"object": "list",
280+
"data": [
281+
{
282+
"object": "event",
283+
"id": "event_vault_04",
284+
"event": "vault.dek.decrypted",
285+
"data": {
286+
"actor_id": "user_01234",
287+
"actor_source": "api",
288+
"actor_name": "Decryption Service",
289+
"key_id": "key_99",
290+
},
291+
"created_at": "2024-01-01T00:00:00.000Z",
292+
}
293+
],
294+
"list_metadata": {"after": None},
295+
}
296+
297+
capture_and_mock_http_client_request(
298+
http_client=module_instance._http_client,
299+
status_code=200,
300+
response_dict=mock_response,
301+
)
302+
303+
events: EventsListResource = syncify(
304+
module_instance.list_events(events=["vault.dek.decrypted"])
305+
)
306+
307+
event = events.data[0]
308+
assert isinstance(event, VaultDekDecryptedEvent)
309+
assert event.data.key_id == "key_99"
310+
assert event.data.actor_name == "Decryption Service"
311+
312+
def test_list_events_vault_kek_created(
313+
self,
314+
module_instance: Union[Events, AsyncEvents],
315+
capture_and_mock_http_client_request,
316+
):
317+
mock_response = {
318+
"object": "list",
319+
"data": [
320+
{
321+
"object": "event",
322+
"id": "event_vault_05",
323+
"event": "vault.kek.created",
324+
"data": {
325+
"actor_id": "user_01234",
326+
"actor_source": "dashboard",
327+
"actor_name": "Admin",
328+
"key_name": "production-kek",
329+
"key_id": "kek_01",
330+
},
331+
"created_at": "2024-01-01T00:00:00.000Z",
332+
}
333+
],
334+
"list_metadata": {"after": None},
335+
}
336+
337+
capture_and_mock_http_client_request(
338+
http_client=module_instance._http_client,
339+
status_code=200,
340+
response_dict=mock_response,
341+
)
342+
343+
events: EventsListResource = syncify(
344+
module_instance.list_events(events=["vault.kek.created"])
345+
)
346+
347+
event = events.data[0]
348+
assert isinstance(event, VaultKekCreatedEvent)
349+
assert event.data.key_name == "production-kek"
350+
assert event.data.key_id == "kek_01"
351+
352+
def test_list_events_vault_data_deleted(
353+
self,
354+
module_instance: Union[Events, AsyncEvents],
355+
capture_and_mock_http_client_request,
356+
):
357+
mock_response = {
358+
"object": "list",
359+
"data": [
360+
{
361+
"object": "event",
362+
"id": "event_vault_06",
363+
"event": "vault.data.deleted",
364+
"data": {
365+
"actor_id": "user_01234",
366+
"actor_source": "api",
367+
"actor_name": "Cleanup Job",
368+
"kv_name": "old-secret",
369+
},
370+
"created_at": "2024-01-01T00:00:00.000Z",
371+
}
372+
],
373+
"list_metadata": {"after": None},
374+
}
375+
376+
capture_and_mock_http_client_request(
377+
http_client=module_instance._http_client,
378+
status_code=200,
379+
response_dict=mock_response,
380+
)
381+
382+
events: EventsListResource = syncify(
383+
module_instance.list_events(events=["vault.data.deleted"])
384+
)
385+
386+
event = events.data[0]
387+
assert isinstance(event, VaultDataDeletedEvent)
388+
assert event.data.kv_name == "old-secret"
389+
390+
def test_list_events_vault_data_updated(
391+
self,
392+
module_instance: Union[Events, AsyncEvents],
393+
capture_and_mock_http_client_request,
394+
):
395+
mock_response = {
396+
"object": "list",
397+
"data": [
398+
{
399+
"object": "event",
400+
"id": "event_vault_07",
401+
"event": "vault.data.updated",
402+
"data": {
403+
"actor_id": "user_01234",
404+
"actor_source": "api",
405+
"actor_name": "Rotation Job",
406+
"kv_name": "api-key",
407+
"key_id": "key_02",
408+
"key_context": {"env": "staging"},
409+
},
410+
"created_at": "2024-01-01T00:00:00.000Z",
411+
}
412+
],
413+
"list_metadata": {"after": None},
414+
}
415+
416+
capture_and_mock_http_client_request(
417+
http_client=module_instance._http_client,
418+
status_code=200,
419+
response_dict=mock_response,
420+
)
421+
422+
events: EventsListResource = syncify(
423+
module_instance.list_events(events=["vault.data.updated"])
424+
)
425+
426+
event = events.data[0]
427+
assert isinstance(event, VaultDataUpdatedEvent)
428+
assert event.data.kv_name == "api-key"
429+
assert event.data.key_id == "key_02"
430+
431+
def test_list_events_vault_metadata_read(
432+
self,
433+
module_instance: Union[Events, AsyncEvents],
434+
capture_and_mock_http_client_request,
435+
):
436+
mock_response = {
437+
"object": "list",
438+
"data": [
439+
{
440+
"object": "event",
441+
"id": "event_vault_08",
442+
"event": "vault.metadata.read",
443+
"data": {
444+
"actor_id": "user_01234",
445+
"actor_source": "api",
446+
"actor_name": "Audit Service",
447+
"kv_name": "config-store",
448+
},
449+
"created_at": "2024-01-01T00:00:00.000Z",
450+
}
451+
],
452+
"list_metadata": {"after": None},
453+
}
454+
455+
capture_and_mock_http_client_request(
456+
http_client=module_instance._http_client,
457+
status_code=200,
458+
response_dict=mock_response,
459+
)
460+
461+
events: EventsListResource = syncify(
462+
module_instance.list_events(events=["vault.metadata.read"])
463+
)
464+
465+
event = events.data[0]
466+
assert isinstance(event, VaultMetadataReadEvent)
467+
assert event.data.kv_name == "config-store"

0 commit comments

Comments
 (0)