From c8150a630a1d0f571b04682131a31b51890947ec Mon Sep 17 00:00:00 2001 From: "workos-sdk-automation[bot]" <255426317+workos-sdk-automation[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:19:19 +0000 Subject: [PATCH 1/2] chore(generated): regenerate shared files for AdminPortal, Authorization, Webhooks, UserManagement, AuditLogs --- .oagen-manifest.json | 16 +- src/workos/admin_portal/_resource.py | 12 +- .../admin_portal/models/generate_link.py | 12 - .../audit_logs/models/audit_log_export.py | 2 +- .../models/audit_log_export_creation.py | 14 +- src/workos/authorization/models/__init__.py | 3 + .../models/user_role_assignment.py | 7 + .../models/user_role_assignment_source.py | 42 + src/workos/common/__init__.py | 1 + src/workos/common/models/__init__.py | 3 + .../common/models/audit_log_export_state.py | 3 +- .../models/create_webhook_endpoint_events.py | 22 + .../user_role_assignment_source_type.py | 28 + src/workos/user_management/_resource.py | 190 + tests/fixtures/audit_log_export_creation.json | 4 +- tests/fixtures/generate_link.json | 9 - tests/fixtures/list_cors_origin_response.json | 15 + tests/fixtures/list_redirect_uri.json | 16 + tests/fixtures/list_user_role_assignment.json | 4 + tests/fixtures/user_role_assignment.json | 4 + .../fixtures/user_role_assignment_source.json | 4 + tests/test_admin_portal_models_round_trip.py | 25 + tests/test_audit_logs_models_round_trip.py | 385 + tests/test_authorization_models_round_trip.py | 520 + tests/test_common_models_round_trip.py | 158 + tests/test_connect_models_round_trip.py | 36 + tests/test_groups_models_round_trip.py | 128 + tests/test_models_round_trip.py | 18317 +--------------- tests/test_organizations_models_round_trip.py | 31 + tests/test_user_management.py | 122 + .../test_user_management_models_round_trip.py | 1342 ++ tests/test_webhooks_models_round_trip.py | 53 + 32 files changed, 3170 insertions(+), 18358 deletions(-) create mode 100644 src/workos/authorization/models/user_role_assignment_source.py create mode 100644 src/workos/common/models/user_role_assignment_source_type.py create mode 100644 tests/fixtures/list_cors_origin_response.json create mode 100644 tests/fixtures/list_redirect_uri.json create mode 100644 tests/fixtures/user_role_assignment_source.json create mode 100644 tests/test_admin_portal_models_round_trip.py create mode 100644 tests/test_audit_logs_models_round_trip.py create mode 100644 tests/test_authorization_models_round_trip.py create mode 100644 tests/test_common_models_round_trip.py create mode 100644 tests/test_connect_models_round_trip.py create mode 100644 tests/test_groups_models_round_trip.py create mode 100644 tests/test_organizations_models_round_trip.py create mode 100644 tests/test_user_management_models_round_trip.py create mode 100644 tests/test_webhooks_models_round_trip.py diff --git a/.oagen-manifest.json b/.oagen-manifest.json index b651d0a8..eecf2d36 100644 --- a/.oagen-manifest.json +++ b/.oagen-manifest.json @@ -1,7 +1,7 @@ { "version": 2, "language": "python", - "generatedAt": "2026-07-01T16:28:45.662Z", + "generatedAt": "2026-07-01T18:19:12.330Z", "files": [ "src/workos/_client.py", "src/workos/admin_portal/__init__.py", @@ -73,6 +73,7 @@ "src/workos/authorization/models/update_role.py", "src/workos/authorization/models/user_role_assignment.py", "src/workos/authorization/models/user_role_assignment_resource.py", + "src/workos/authorization/models/user_role_assignment_source.py", "src/workos/client_api/__init__.py", "src/workos/client_api/_resource.py", "src/workos/client_api/models/__init__.py", @@ -428,6 +429,7 @@ "src/workos/common/models/user_organization_membership_base_list_data.py", "src/workos/common/models/user_organization_membership_base_list_data_status.py", "src/workos/common/models/user_organization_membership_status.py", + "src/workos/common/models/user_role_assignment_source_type.py", "src/workos/common/models/user_sessions_auth_method.py", "src/workos/common/models/user_sessions_impersonator.py", "src/workos/common/models/user_sessions_list_item.py", @@ -992,6 +994,7 @@ "tests/fixtures/list_authorized_connect_application_list_data.json", "tests/fixtures/list_connect_application.json", "tests/fixtures/list_connection.json", + "tests/fixtures/list_cors_origin_response.json", "tests/fixtures/list_directory.json", "tests/fixtures/list_directory_group.json", "tests/fixtures/list_directory_user_with_groups.json", @@ -1003,6 +1006,7 @@ "tests/fixtures/list_object_summary.json", "tests/fixtures/list_organization.json", "tests/fixtures/list_organization_api_key.json", + "tests/fixtures/list_redirect_uri.json", "tests/fixtures/list_user.json", "tests/fixtures/list_user_api_key.json", "tests/fixtures/list_user_invite.json", @@ -1159,6 +1163,7 @@ "tests/fixtures/user_organization_membership_base_list_data.json", "tests/fixtures/user_role_assignment.json", "tests/fixtures/user_role_assignment_resource.json", + "tests/fixtures/user_role_assignment_source.json", "tests/fixtures/user_sessions_impersonator.json", "tests/fixtures/user_sessions_list_item.json", "tests/fixtures/user_updated.json", @@ -1197,27 +1202,36 @@ "tests/fixtures/widget_session_token.json", "tests/fixtures/widget_session_token_response.json", "tests/test_admin_portal.py", + "tests/test_admin_portal_models_round_trip.py", "tests/test_api_keys.py", "tests/test_audit_logs.py", + "tests/test_audit_logs_models_round_trip.py", "tests/test_authorization.py", + "tests/test_authorization_models_round_trip.py", "tests/test_client_api.py", + "tests/test_common_models_round_trip.py", "tests/test_connect.py", + "tests/test_connect_models_round_trip.py", "tests/test_directory_sync.py", "tests/test_events.py", "tests/test_feature_flags.py", "tests/test_groups.py", + "tests/test_groups_models_round_trip.py", "tests/test_models_round_trip.py", "tests/test_multi_factor_auth.py", "tests/test_organization_domains.py", "tests/test_organization_membership.py", "tests/test_organizations.py", + "tests/test_organizations_models_round_trip.py", "tests/test_pipes.py", "tests/test_pipes_provider.py", "tests/test_radar.py", "tests/test_sso.py", "tests/test_user_management.py", + "tests/test_user_management_models_round_trip.py", "tests/test_vault.py", "tests/test_webhooks.py", + "tests/test_webhooks_models_round_trip.py", "tests/test_widgets.py" ], "operations": { diff --git a/src/workos/admin_portal/_resource.py b/src/workos/admin_portal/_resource.py index c6bf0ec9..87ccb38a 100644 --- a/src/workos/admin_portal/_resource.py +++ b/src/workos/admin_portal/_resource.py @@ -8,7 +8,7 @@ from .._client import AsyncWorkOSClient, WorkOSClient from .._types import RequestOptions, enum_value -from .models import IntentOptions, PortalLinkResponse +from .models import PortalLinkResponse from workos.common.models.generate_link_intent import GenerateLinkIntent @@ -25,7 +25,6 @@ def generate_link( return_url: Optional[str] = None, success_url: Optional[str] = None, intent: Optional[Union[GenerateLinkIntent, str]] = None, - intent_options: Optional[IntentOptions] = None, it_contact_emails: Optional[List[str]] = None, request_options: Optional[RequestOptions] = None, ) -> PortalLinkResponse: @@ -45,7 +44,6 @@ def generate_link( - `domain_verification` - Launch Admin Portal for Domain Verification - `certificate_renewal` - Launch Admin Portal for renewing SAML Certificates - `bring_your_own_key` - Launch Admin Portal for configuring Bring Your Own Key - intent_options: Options to configure the Admin Portal based on the intent. it_contact_emails: The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails. request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. @@ -68,9 +66,6 @@ def generate_link( "success_url": success_url, "organization": organization, "intent": enum_value(intent) if intent is not None else None, - "intent_options": intent_options.to_dict() - if intent_options is not None - else None, "it_contact_emails": it_contact_emails, }.items() if v is not None @@ -97,7 +92,6 @@ async def generate_link( return_url: Optional[str] = None, success_url: Optional[str] = None, intent: Optional[Union[GenerateLinkIntent, str]] = None, - intent_options: Optional[IntentOptions] = None, it_contact_emails: Optional[List[str]] = None, request_options: Optional[RequestOptions] = None, ) -> PortalLinkResponse: @@ -117,7 +111,6 @@ async def generate_link( - `domain_verification` - Launch Admin Portal for Domain Verification - `certificate_renewal` - Launch Admin Portal for renewing SAML Certificates - `bring_your_own_key` - Launch Admin Portal for configuring Bring Your Own Key - intent_options: Options to configure the Admin Portal based on the intent. it_contact_emails: The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails. request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. @@ -140,9 +133,6 @@ async def generate_link( "success_url": success_url, "organization": organization, "intent": enum_value(intent) if intent is not None else None, - "intent_options": intent_options.to_dict() - if intent_options is not None - else None, "it_contact_emails": it_contact_emails, }.items() if v is not None diff --git a/src/workos/admin_portal/models/generate_link.py b/src/workos/admin_portal/models/generate_link.py index 5786abc2..cb84be6c 100644 --- a/src/workos/admin_portal/models/generate_link.py +++ b/src/workos/admin_portal/models/generate_link.py @@ -4,11 +4,8 @@ from dataclasses import dataclass from enum import Enum -from typing import cast from typing import Any, Dict, List, Optional from workos._types import _raise_deserialize_error - -from .intent_options import IntentOptions from workos.common.models.generate_link_intent import GenerateLinkIntent @@ -32,8 +29,6 @@ class GenerateLink: - `domain_verification` - Launch Admin Portal for Domain Verification - `certificate_renewal` - Launch Admin Portal for renewing SAML Certificates - `bring_your_own_key` - Launch Admin Portal for configuring Bring Your Own Key""" - intent_options: Optional["IntentOptions"] = None - """Options to configure the Admin Portal based on the intent.""" it_contact_emails: Optional[List[str]] = None """The email addresses of the IT contacts to grant access to the Admin Portal for the given organization. Accepts up to 20 emails.""" @@ -48,11 +43,6 @@ def from_dict(cls, data: Dict[str, Any]) -> "GenerateLink": intent=GenerateLinkIntent(_v_intent) if (_v_intent := data.get("intent")) is not None else None, - intent_options=IntentOptions.from_dict( - cast(Dict[str, Any], _v_intent_options) - ) - if (_v_intent_options := data.get("intent_options")) is not None - else None, it_contact_emails=data.get("it_contact_emails"), ) except (KeyError, ValueError) as e: @@ -70,8 +60,6 @@ def to_dict(self) -> Dict[str, Any]: result["intent"] = ( self.intent.value if isinstance(self.intent, Enum) else self.intent ) - if self.intent_options is not None: - result["intent_options"] = self.intent_options.to_dict() if self.it_contact_emails is not None: result["it_contact_emails"] = self.it_contact_emails return result diff --git a/src/workos/audit_logs/models/audit_log_export.py b/src/workos/audit_logs/models/audit_log_export.py index 381de12a..bda554f4 100644 --- a/src/workos/audit_logs/models/audit_log_export.py +++ b/src/workos/audit_logs/models/audit_log_export.py @@ -20,7 +20,7 @@ class AuditLogExport: id: str """The unique ID of the Audit Log Export.""" state: "AuditLogExportState" - """The state of the export. Possible values: pending, ready, error.""" + """The state of the export. Possible values: pending, ready, error, expired.""" created_at: datetime """An ISO 8601 timestamp.""" updated_at: datetime diff --git a/src/workos/audit_logs/models/audit_log_export_creation.py b/src/workos/audit_logs/models/audit_log_export_creation.py index fb414440..b202de61 100644 --- a/src/workos/audit_logs/models/audit_log_export_creation.py +++ b/src/workos/audit_logs/models/audit_log_export_creation.py @@ -3,8 +3,10 @@ from __future__ import annotations from dataclasses import dataclass +from datetime import datetime from typing import Any, Dict, List, Optional from workos._types import _raise_deserialize_error +from workos._types import _format_datetime, _parse_datetime @dataclass(slots=True) @@ -13,9 +15,9 @@ class AuditLogExportCreation: organization_id: str """The unique ID of the Organization.""" - range_start: str + range_start: datetime """ISO-8601 value for start of the export range.""" - range_end: str + range_end: datetime """ISO-8601 value for end of the export range.""" actions: Optional[List[str]] = None """List of actions to filter against.""" @@ -36,8 +38,8 @@ def from_dict(cls, data: Dict[str, Any]) -> "AuditLogExportCreation": try: return cls( organization_id=data["organization_id"], - range_start=data["range_start"], - range_end=data["range_end"], + range_start=_parse_datetime(data["range_start"]), + range_end=_parse_datetime(data["range_end"]), actions=data.get("actions"), actors=data.get("actors"), actor_names=data.get("actor_names"), @@ -51,8 +53,8 @@ def to_dict(self) -> Dict[str, Any]: """Serialize to a dictionary.""" result: Dict[str, Any] = {} result["organization_id"] = self.organization_id - result["range_start"] = self.range_start - result["range_end"] = self.range_end + result["range_start"] = _format_datetime(self.range_start) + result["range_end"] = _format_datetime(self.range_end) if self.actions is not None: result["actions"] = self.actions if self.actors is not None: diff --git a/src/workos/authorization/models/__init__.py b/src/workos/authorization/models/__init__.py index ab69660a..8b5df90f 100644 --- a/src/workos/authorization/models/__init__.py +++ b/src/workos/authorization/models/__init__.py @@ -58,3 +58,6 @@ from .user_role_assignment_resource import ( UserRoleAssignmentResource as UserRoleAssignmentResource, ) +from .user_role_assignment_source import ( + UserRoleAssignmentSource as UserRoleAssignmentSource, +) diff --git a/src/workos/authorization/models/user_role_assignment.py b/src/workos/authorization/models/user_role_assignment.py index a2b9b45b..8d9a8e1b 100644 --- a/src/workos/authorization/models/user_role_assignment.py +++ b/src/workos/authorization/models/user_role_assignment.py @@ -11,6 +11,7 @@ from workos.common.models.slim_role import SlimRole from .user_role_assignment_resource import UserRoleAssignmentResource +from .user_role_assignment_source import UserRoleAssignmentSource @dataclass(slots=True) @@ -27,6 +28,8 @@ class UserRoleAssignment: """The role included in the assignment.""" resource: "UserRoleAssignmentResource" """The resource the role is assigned on.""" + source: "UserRoleAssignmentSource" + """The origin of the role assignment.""" created_at: datetime """An ISO 8601 timestamp.""" updated_at: datetime @@ -44,6 +47,9 @@ def from_dict(cls, data: Dict[str, Any]) -> "UserRoleAssignment": resource=UserRoleAssignmentResource.from_dict( cast(Dict[str, Any], data["resource"]) ), + source=UserRoleAssignmentSource.from_dict( + cast(Dict[str, Any], data["source"]) + ), created_at=_parse_datetime(data["created_at"]), updated_at=_parse_datetime(data["updated_at"]), ) @@ -58,6 +64,7 @@ def to_dict(self) -> Dict[str, Any]: result["organization_membership_id"] = self.organization_membership_id result["role"] = self.role.to_dict() result["resource"] = self.resource.to_dict() + result["source"] = self.source.to_dict() result["created_at"] = _format_datetime(self.created_at) result["updated_at"] = _format_datetime(self.updated_at) return result diff --git a/src/workos/authorization/models/user_role_assignment_source.py b/src/workos/authorization/models/user_role_assignment_source.py new file mode 100644 index 00000000..c239ad5e --- /dev/null +++ b/src/workos/authorization/models/user_role_assignment_source.py @@ -0,0 +1,42 @@ +# This file is auto-generated by oagen. Do not edit. + +from __future__ import annotations + +from dataclasses import dataclass +from enum import Enum +from typing import Any, Dict, Optional +from workos._types import _raise_deserialize_error +from workos.common.models.user_role_assignment_source_type import ( + UserRoleAssignmentSourceType, +) + + +@dataclass(slots=True) +class UserRoleAssignmentSource: + """The origin of the role assignment.""" + + type: "UserRoleAssignmentSourceType" + """Whether the role was assigned directly or derived from a group.""" + group_role_assignment_id: Optional[str] + """The ID of the group role assignment the role was derived from, or null if direct.""" + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> "UserRoleAssignmentSource": + """Deserialize from a dictionary.""" + try: + return cls( + type=UserRoleAssignmentSourceType(data["type"]), + group_role_assignment_id=data["group_role_assignment_id"], + ) + except (KeyError, ValueError) as e: + _raise_deserialize_error("UserRoleAssignmentSource", e) + + def to_dict(self) -> Dict[str, Any]: + """Serialize to a dictionary.""" + result: Dict[str, Any] = {} + result["type"] = self.type.value if isinstance(self.type, Enum) else self.type + if self.group_role_assignment_id is not None: + result["group_role_assignment_id"] = self.group_role_assignment_id + else: + result["group_role_assignment_id"] = None + return result diff --git a/src/workos/common/__init__.py b/src/workos/common/__init__.py index 9498bbbf..d8aed159 100644 --- a/src/workos/common/__init__.py +++ b/src/workos/common/__init__.py @@ -420,6 +420,7 @@ UserOrganizationMembershipBaseListDataStatus as UserOrganizationMembershipBaseListDataStatus, ) from .models import UserOrganizationMembershipStatus as UserOrganizationMembershipStatus +from .models import UserRoleAssignmentSourceType as UserRoleAssignmentSourceType from .models import UserSessionsAuthMethod as UserSessionsAuthMethod from .models import UserSessionsImpersonator as UserSessionsImpersonator from .models import UserSessionsListItem as UserSessionsListItem diff --git a/src/workos/common/models/__init__.py b/src/workos/common/models/__init__.py index 224c6143..4c175fa7 100644 --- a/src/workos/common/models/__init__.py +++ b/src/workos/common/models/__init__.py @@ -690,6 +690,9 @@ from .user_organization_membership_status import ( UserOrganizationMembershipStatus as UserOrganizationMembershipStatus, ) +from .user_role_assignment_source_type import ( + UserRoleAssignmentSourceType as UserRoleAssignmentSourceType, +) from .user_sessions_auth_method import UserSessionsAuthMethod as UserSessionsAuthMethod from .user_sessions_impersonator import ( UserSessionsImpersonator as UserSessionsImpersonator, diff --git a/src/workos/common/models/audit_log_export_state.py b/src/workos/common/models/audit_log_export_state.py index f430a47b..45b5dc3f 100644 --- a/src/workos/common/models/audit_log_export_state.py +++ b/src/workos/common/models/audit_log_export_state.py @@ -15,6 +15,7 @@ class AuditLogExportState(str, Enum): PENDING = "pending" READY = "ready" ERROR = "error" + EXPIRED = "expired" @classmethod def _missing_(cls, value: object) -> Optional["AuditLogExportState"]: @@ -26,4 +27,4 @@ def _missing_(cls, value: object) -> Optional["AuditLogExportState"]: return unknown -AuditLogExportStateLiteral: TypeAlias = Literal["pending", "ready", "error"] +AuditLogExportStateLiteral: TypeAlias = Literal["pending", "ready", "error", "expired"] diff --git a/src/workos/common/models/create_webhook_endpoint_events.py b/src/workos/common/models/create_webhook_endpoint_events.py index 44554be7..9b47703e 100644 --- a/src/workos/common/models/create_webhook_endpoint_events.py +++ b/src/workos/common/models/create_webhook_endpoint_events.py @@ -12,6 +12,15 @@ class CreateWebhookEndpointEvents(str, Enum): """Known values for CreateWebhookEndpointEvents.""" + AGENT_REGISTRATION_CREATED = "agent.registration.created" + AGENT_REGISTRATION_CLAIM_ATTEMPT_CREATED = ( + "agent.registration.claim.attempt.created" + ) + AGENT_REGISTRATION_CLAIM_COMPLETED = "agent.registration.claim.completed" + AGENT_REGISTRATION_CREDENTIAL_ISSUED = "agent.registration.credential.issued" + AGENT_REGISTRATION_ORGANIZATION_SWITCHED = ( + "agent.registration.organization.switched" + ) AUTHENTICATION_EMAIL_VERIFICATION_SUCCEEDED = ( "authentication.email_verification_succeeded" ) @@ -29,6 +38,9 @@ class CreateWebhookEndpointEvents(str, Enum): AUTHENTICATION_SSO_SUCCEEDED = "authentication.sso_succeeded" AUTHENTICATION_SSO_TIMED_OUT = "authentication.sso_timed_out" AUTHENTICATION_RADAR_RISK_DETECTED = "authentication.radar_risk_detected" + AUTHENTICATION_REAUTHENTICATION_SUCCEEDED = ( + "authentication.reauthentication_succeeded" + ) API_KEY_CREATED = "api_key.created" API_KEY_REVOKED = "api_key.revoked" API_KEY_UPDATED = "api_key.updated" @@ -90,6 +102,9 @@ class CreateWebhookEndpointEvents(str, Enum): PERMISSION_DELETED = "permission.deleted" PERMISSION_UPDATED = "permission.updated" PIPES_CONNECTED_ACCOUNT_CONNECTED = "pipes.connected_account.connected" + PIPES_CONNECTED_ACCOUNT_CONNECTION_FAILED = ( + "pipes.connected_account.connection_failed" + ) PIPES_CONNECTED_ACCOUNT_DISCONNECTED = "pipes.connected_account.disconnected" PIPES_CONNECTED_ACCOUNT_REAUTHORIZATION_NEEDED = ( "pipes.connected_account.reauthorization_needed" @@ -111,6 +126,11 @@ def _missing_(cls, value: object) -> Optional["CreateWebhookEndpointEvents"]: CreateWebhookEndpointEventsLiteral: TypeAlias = Literal[ + "agent.registration.created", + "agent.registration.claim.attempt.created", + "agent.registration.claim.completed", + "agent.registration.credential.issued", + "agent.registration.organization.switched", "authentication.email_verification_succeeded", "authentication.magic_auth_failed", "authentication.magic_auth_succeeded", @@ -126,6 +146,7 @@ def _missing_(cls, value: object) -> Optional["CreateWebhookEndpointEvents"]: "authentication.sso_succeeded", "authentication.sso_timed_out", "authentication.radar_risk_detected", + "authentication.reauthentication_succeeded", "api_key.created", "api_key.revoked", "api_key.updated", @@ -185,6 +206,7 @@ def _missing_(cls, value: object) -> Optional["CreateWebhookEndpointEvents"]: "permission.deleted", "permission.updated", "pipes.connected_account.connected", + "pipes.connected_account.connection_failed", "pipes.connected_account.disconnected", "pipes.connected_account.reauthorization_needed", "session.created", diff --git a/src/workos/common/models/user_role_assignment_source_type.py b/src/workos/common/models/user_role_assignment_source_type.py new file mode 100644 index 00000000..82e805bb --- /dev/null +++ b/src/workos/common/models/user_role_assignment_source_type.py @@ -0,0 +1,28 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Enumeration of user role assignment source type values.""" + +from __future__ import annotations + +from enum import Enum +from typing import Optional +from typing import Literal, TypeAlias + + +class UserRoleAssignmentSourceType(str, Enum): + """Known values for UserRoleAssignmentSourceType.""" + + DIRECT = "direct" + GROUP = "group" + + @classmethod + def _missing_(cls, value: object) -> Optional["UserRoleAssignmentSourceType"]: + if not isinstance(value, str): + return None + unknown = str.__new__(cls, value) + unknown._name_ = value.upper() + unknown._value_ = value + return unknown + + +UserRoleAssignmentSourceTypeLiteral: TypeAlias = Literal["direct", "group"] diff --git a/src/workos/user_management/_resource.py b/src/workos/user_management/_resource.py index 33ece4c7..1cfb7e27 100644 --- a/src/workos/user_management/_resource.py +++ b/src/workos/user_management/_resource.py @@ -459,6 +459,7 @@ def get_authorization_url( provider_query_params: Optional[Dict[str, str]] = None, provider_scopes: Optional[List[str]] = None, invitation_token: Optional[str] = None, + max_age: Optional[int] = None, screen_hint: Optional[ Union[UserManagementAuthenticationScreenHint, str] ] = None, @@ -482,6 +483,7 @@ def get_authorization_url( provider_query_params: Key/value pairs of query parameters to pass to the OAuth provider. provider_scopes: Additional OAuth scopes to request from the identity provider. invitation_token: A token representing a user invitation to redeem during authentication. + max_age: Maximum allowable elapsed time, in seconds, since the user last actively authenticated. If the last authentication is older than this value, the user is prompted to re-authenticate; a value of `0` forces re-authentication. Only supported when the provider is `authkit`. screen_hint: Used to specify which screen to display when the provider is `authkit`. Defaults to `sign-in`. login_hint: A hint to the authorization server about the login identifier the user might use. provider: The OAuth provider to authenticate with (e.g., GoogleOAuth, MicrosoftOAuth, GitHubOAuth). @@ -511,6 +513,7 @@ def get_authorization_url( if provider_scopes is not None else None, "invitation_token": invitation_token, + "max_age": max_age, "screen_hint": enum_value(screen_hint) if screen_hint is not None else None, @@ -628,6 +631,52 @@ def revoke_session( request_options=request_options, ) + def list_cors_origins( + self, + *, + limit: Optional[int] = None, + before: Optional[str] = None, + after: Optional[str] = None, + order: Optional[Union[PaginationOrder, str]] = "desc", + request_options: Optional[RequestOptions] = None, + ) -> SyncPage[CORSOriginResponse]: + """List CORS origins + + Lists the CORS origins for the current environment. + + Args: + limit: Upper limit on the number of objects to return, between `1` and `100`. Defaults to `10`. + before: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `before="obj_123"` to fetch a new batch of objects before `"obj_123"`. + after: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `after="obj_123"` to fetch a new batch of objects after `"obj_123"`. + order: Order the results by the creation time. Supported values are `"asc"` (ascending), `"desc"` (descending), and `"normal"` (descending with reversed cursor semantics where `before` fetches older records and `after` fetches newer records). Defaults to `desc`. + request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. + + Returns: + SyncPage[CORSOriginResponse] + + Raises: + AuthenticationError: If the API key is invalid (401). + RateLimitExceededError: If rate limited (429). + ServerError: If the server returns a 5xx error. + """ + params = { + k: v + for k, v in { + "limit": limit, + "before": before, + "after": after, + "order": enum_value(order) if order is not None else None, + }.items() + if v is not None + } + return self._client.request_page( + method="get", + path=("user_management", "cors_origins"), + model=CORSOriginResponse, + params=params, + request_options=request_options, + ) + def create_cors_origin( self, *, @@ -1707,6 +1756,52 @@ def get_magic_auth( request_options=request_options, ) + def list_redirect_uris( + self, + *, + limit: Optional[int] = None, + before: Optional[str] = None, + after: Optional[str] = None, + order: Optional[Union[PaginationOrder, str]] = "desc", + request_options: Optional[RequestOptions] = None, + ) -> SyncPage[RedirectUri]: + """List redirect URIs + + Lists the redirect URIs for an environment. + + Args: + limit: Upper limit on the number of objects to return, between `1` and `100`. Defaults to `10`. + before: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `before="obj_123"` to fetch a new batch of objects before `"obj_123"`. + after: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `after="obj_123"` to fetch a new batch of objects after `"obj_123"`. + order: Order the results by the creation time. Supported values are `"asc"` (ascending), `"desc"` (descending), and `"normal"` (descending with reversed cursor semantics where `before` fetches older records and `after` fetches newer records). Defaults to `desc`. + request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. + + Returns: + SyncPage[RedirectUri] + + Raises: + AuthenticationError: If the API key is invalid (401). + RateLimitExceededError: If rate limited (429). + ServerError: If the server returns a 5xx error. + """ + params = { + k: v + for k, v in { + "limit": limit, + "before": before, + "after": after, + "order": enum_value(order) if order is not None else None, + }.items() + if v is not None + } + return self._client.request_page( + method="get", + path=("user_management", "redirect_uris"), + model=RedirectUri, + params=params, + request_options=request_options, + ) + def create_redirect_uri( self, *, @@ -2495,6 +2590,7 @@ def get_authorization_url( provider_query_params: Optional[Dict[str, str]] = None, provider_scopes: Optional[List[str]] = None, invitation_token: Optional[str] = None, + max_age: Optional[int] = None, screen_hint: Optional[ Union[UserManagementAuthenticationScreenHint, str] ] = None, @@ -2518,6 +2614,7 @@ def get_authorization_url( provider_query_params: Key/value pairs of query parameters to pass to the OAuth provider. provider_scopes: Additional OAuth scopes to request from the identity provider. invitation_token: A token representing a user invitation to redeem during authentication. + max_age: Maximum allowable elapsed time, in seconds, since the user last actively authenticated. If the last authentication is older than this value, the user is prompted to re-authenticate; a value of `0` forces re-authentication. Only supported when the provider is `authkit`. screen_hint: Used to specify which screen to display when the provider is `authkit`. Defaults to `sign-in`. login_hint: A hint to the authorization server about the login identifier the user might use. provider: The OAuth provider to authenticate with (e.g., GoogleOAuth, MicrosoftOAuth, GitHubOAuth). @@ -2547,6 +2644,7 @@ def get_authorization_url( if provider_scopes is not None else None, "invitation_token": invitation_token, + "max_age": max_age, "screen_hint": enum_value(screen_hint) if screen_hint is not None else None, @@ -2664,6 +2762,52 @@ async def revoke_session( request_options=request_options, ) + async def list_cors_origins( + self, + *, + limit: Optional[int] = None, + before: Optional[str] = None, + after: Optional[str] = None, + order: Optional[Union[PaginationOrder, str]] = "desc", + request_options: Optional[RequestOptions] = None, + ) -> AsyncPage[CORSOriginResponse]: + """List CORS origins + + Lists the CORS origins for the current environment. + + Args: + limit: Upper limit on the number of objects to return, between `1` and `100`. Defaults to `10`. + before: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `before="obj_123"` to fetch a new batch of objects before `"obj_123"`. + after: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `after="obj_123"` to fetch a new batch of objects after `"obj_123"`. + order: Order the results by the creation time. Supported values are `"asc"` (ascending), `"desc"` (descending), and `"normal"` (descending with reversed cursor semantics where `before` fetches older records and `after` fetches newer records). Defaults to `desc`. + request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. + + Returns: + AsyncPage[CORSOriginResponse] + + Raises: + AuthenticationError: If the API key is invalid (401). + RateLimitExceededError: If rate limited (429). + ServerError: If the server returns a 5xx error. + """ + params = { + k: v + for k, v in { + "limit": limit, + "before": before, + "after": after, + "order": enum_value(order) if order is not None else None, + }.items() + if v is not None + } + return await self._client.request_page( + method="get", + path=("user_management", "cors_origins"), + model=CORSOriginResponse, + params=params, + request_options=request_options, + ) + async def create_cors_origin( self, *, @@ -3743,6 +3887,52 @@ async def get_magic_auth( request_options=request_options, ) + async def list_redirect_uris( + self, + *, + limit: Optional[int] = None, + before: Optional[str] = None, + after: Optional[str] = None, + order: Optional[Union[PaginationOrder, str]] = "desc", + request_options: Optional[RequestOptions] = None, + ) -> AsyncPage[RedirectUri]: + """List redirect URIs + + Lists the redirect URIs for an environment. + + Args: + limit: Upper limit on the number of objects to return, between `1` and `100`. Defaults to `10`. + before: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `before="obj_123"` to fetch a new batch of objects before `"obj_123"`. + after: An object ID that defines your place in the list. When the ID is not present, you are at the end of the list. For example, if you make a list request and receive 100 objects, ending with `"obj_123"`, your subsequent call can include `after="obj_123"` to fetch a new batch of objects after `"obj_123"`. + order: Order the results by the creation time. Supported values are `"asc"` (ascending), `"desc"` (descending), and `"normal"` (descending with reversed cursor semantics where `before` fetches older records and `after` fetches newer records). Defaults to `desc`. + request_options: Per-request options. Supports extra_headers, timeout, max_retries, and base_url override. + + Returns: + AsyncPage[RedirectUri] + + Raises: + AuthenticationError: If the API key is invalid (401). + RateLimitExceededError: If rate limited (429). + ServerError: If the server returns a 5xx error. + """ + params = { + k: v + for k, v in { + "limit": limit, + "before": before, + "after": after, + "order": enum_value(order) if order is not None else None, + }.items() + if v is not None + } + return await self._client.request_page( + method="get", + path=("user_management", "redirect_uris"), + model=RedirectUri, + params=params, + request_options=request_options, + ) + async def create_redirect_uri( self, *, diff --git a/tests/fixtures/audit_log_export_creation.json b/tests/fixtures/audit_log_export_creation.json index 8897537d..bf28c7b0 100644 --- a/tests/fixtures/audit_log_export_creation.json +++ b/tests/fixtures/audit_log_export_creation.json @@ -1,7 +1,7 @@ { "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "range_start": "2022-07-02T18:09:06.996Z", - "range_end": "2022-09-02T18:09:06.996Z", + "range_start": "2022-07-02T18:09:06.000Z", + "range_end": "2022-09-02T18:09:06.000Z", "actions": [ "user.signed_in" ], diff --git a/tests/fixtures/generate_link.json b/tests/fixtures/generate_link.json index 47084d30..0630573b 100644 --- a/tests/fixtures/generate_link.json +++ b/tests/fixtures/generate_link.json @@ -3,15 +3,6 @@ "success_url": "https://example.com/admin-portal/success", "organization": "org_01EHZNVPK3SFK441A1RGBFSHRT", "intent": "sso", - "intent_options": { - "sso": { - "bookmark_slug": "chatgpt", - "provider_type": "GoogleSAML" - }, - "domain_verification": { - "domain_name": "example.com" - } - }, "it_contact_emails": [ "it-contact@example.com" ] diff --git a/tests/fixtures/list_cors_origin_response.json b/tests/fixtures/list_cors_origin_response.json new file mode 100644 index 00000000..bb631ab1 --- /dev/null +++ b/tests/fixtures/list_cors_origin_response.json @@ -0,0 +1,15 @@ +{ + "data": [ + { + "object": "cors_origin", + "id": "cors_origin_01HXYZ123456789ABCDEFGHIJ", + "origin": "https://example.com", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z" + } + ], + "list_metadata": { + "before": null, + "after": null + } +} diff --git a/tests/fixtures/list_redirect_uri.json b/tests/fixtures/list_redirect_uri.json new file mode 100644 index 00000000..420055be --- /dev/null +++ b/tests/fixtures/list_redirect_uri.json @@ -0,0 +1,16 @@ +{ + "data": [ + { + "object": "redirect_uri", + "id": "ruri_01EHZNVPK3SFK441A1RGBFSHRT", + "uri": "https://example.com/callback", + "default": true, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z" + } + ], + "list_metadata": { + "before": null, + "after": null + } +} diff --git a/tests/fixtures/list_user_role_assignment.json b/tests/fixtures/list_user_role_assignment.json index e909d9ac..ac0737ac 100644 --- a/tests/fixtures/list_user_role_assignment.json +++ b/tests/fixtures/list_user_role_assignment.json @@ -12,6 +12,10 @@ "external_id": "proj-456", "resource_type_slug": "project" }, + "source": { + "type": "direct", + "group_role_assignment_id": null + }, "created_at": "2026-01-15T12:00:00.000Z", "updated_at": "2026-01-15T12:00:00.000Z" } diff --git a/tests/fixtures/user_role_assignment.json b/tests/fixtures/user_role_assignment.json index 48ca7237..ae717059 100644 --- a/tests/fixtures/user_role_assignment.json +++ b/tests/fixtures/user_role_assignment.json @@ -10,6 +10,10 @@ "external_id": "proj-456", "resource_type_slug": "project" }, + "source": { + "type": "direct", + "group_role_assignment_id": null + }, "created_at": "2026-01-15T12:00:00.000Z", "updated_at": "2026-01-15T12:00:00.000Z" } diff --git a/tests/fixtures/user_role_assignment_source.json b/tests/fixtures/user_role_assignment_source.json new file mode 100644 index 00000000..2cdf69f3 --- /dev/null +++ b/tests/fixtures/user_role_assignment_source.json @@ -0,0 +1,4 @@ +{ + "type": "direct", + "group_role_assignment_id": null +} diff --git a/tests/test_admin_portal_models_round_trip.py b/tests/test_admin_portal_models_round_trip.py new file mode 100644 index 00000000..ad46ca14 --- /dev/null +++ b/tests/test_admin_portal_models_round_trip.py @@ -0,0 +1,25 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.admin_portal.models import PortalLinkResponse + + +class TestModelRoundTrip: + def test_portal_link_response_round_trip(self): + data = load_fixture("portal_link_response.json") + instance = PortalLinkResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = PortalLinkResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_portal_link_response_minimal_payload(self): + data = { + "link": "https://setup.workos.com?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." + } + instance = PortalLinkResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["link"] == data["link"] diff --git a/tests/test_audit_logs_models_round_trip.py b/tests/test_audit_logs_models_round_trip.py new file mode 100644 index 00000000..6125bc92 --- /dev/null +++ b/tests/test_audit_logs_models_round_trip.py @@ -0,0 +1,385 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.audit_logs.models import ( + AuditLogAction, + AuditLogEvent, + AuditLogEventActor, + AuditLogEventContext, + AuditLogEventCreateResponse, + AuditLogEventTarget, + AuditLogExport, + AuditLogSchema, + AuditLogSchemaActor, + AuditLogSchemaActorInput, + AuditLogSchemaTarget, + AuditLogSchemaTargetInput, +) + + +class TestModelRoundTrip: + def test_audit_log_event_actor_round_trip(self): + data = load_fixture("audit_log_event_actor.json") + instance = AuditLogEventActor.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogEventActor.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_event_actor_minimal_payload(self): + data = {"id": "user_TF4C5938", "type": "user"} + instance = AuditLogEventActor.from_dict(data) + serialized = instance.to_dict() + assert serialized["id"] == data["id"] + assert serialized["type"] == data["type"] + + def test_audit_log_event_actor_omits_absent_optional_non_nullable_fields(self): + data = {"id": "user_TF4C5938", "type": "user"} + instance = AuditLogEventActor.from_dict(data) + serialized = instance.to_dict() + assert "name" not in serialized + assert "metadata" not in serialized + + def test_audit_log_event_target_round_trip(self): + data = load_fixture("audit_log_event_target.json") + instance = AuditLogEventTarget.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogEventTarget.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_event_target_minimal_payload(self): + data = {"id": "user_TF4C5938", "type": "user"} + instance = AuditLogEventTarget.from_dict(data) + serialized = instance.to_dict() + assert serialized["id"] == data["id"] + assert serialized["type"] == data["type"] + + def test_audit_log_event_target_omits_absent_optional_non_nullable_fields(self): + data = {"id": "user_TF4C5938", "type": "user"} + instance = AuditLogEventTarget.from_dict(data) + serialized = instance.to_dict() + assert "name" not in serialized + assert "metadata" not in serialized + + def test_audit_log_event_context_round_trip(self): + data = load_fixture("audit_log_event_context.json") + instance = AuditLogEventContext.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogEventContext.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_event_context_minimal_payload(self): + data = {"location": "123.123.123.123"} + instance = AuditLogEventContext.from_dict(data) + serialized = instance.to_dict() + assert serialized["location"] == data["location"] + + def test_audit_log_event_context_omits_absent_optional_non_nullable_fields(self): + data = {"location": "123.123.123.123"} + instance = AuditLogEventContext.from_dict(data) + serialized = instance.to_dict() + assert "user_agent" not in serialized + + def test_audit_log_event_round_trip(self): + data = load_fixture("audit_log_event.json") + instance = AuditLogEvent.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogEvent.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_event_minimal_payload(self): + data = { + "action": "user.signed_in", + "occurred_at": "2026-02-02T16:35:39.000Z", + "actor": { + "id": "user_TF4C5938", + "type": "user", + "name": "Jon Smith", + "metadata": {"owner": "user_01GBTCQ2"}, + }, + "targets": [ + { + "id": "user_TF4C5938", + "type": "user", + "name": "Jon Smith", + "metadata": {"owner": "user_01GBTCQ2"}, + } + ], + "context": { + "location": "123.123.123.123", + "user_agent": "Chrome/104.0.0.0", + }, + } + instance = AuditLogEvent.from_dict(data) + serialized = instance.to_dict() + assert serialized["action"] == data["action"] + assert serialized["occurred_at"] == data["occurred_at"] + assert serialized["actor"] == data["actor"] + assert serialized["targets"] == data["targets"] + assert serialized["context"] == data["context"] + + def test_audit_log_event_omits_absent_optional_non_nullable_fields(self): + data = { + "action": "user.signed_in", + "occurred_at": "2026-02-02T16:35:39.000Z", + "actor": { + "id": "user_TF4C5938", + "type": "user", + "name": "Jon Smith", + "metadata": {"owner": "user_01GBTCQ2"}, + }, + "targets": [ + { + "id": "user_TF4C5938", + "type": "user", + "name": "Jon Smith", + "metadata": {"owner": "user_01GBTCQ2"}, + } + ], + "context": { + "location": "123.123.123.123", + "user_agent": "Chrome/104.0.0.0", + }, + } + instance = AuditLogEvent.from_dict(data) + serialized = instance.to_dict() + assert "metadata" not in serialized + assert "version" not in serialized + + def test_audit_log_schema_actor_input_round_trip(self): + data = load_fixture("audit_log_schema_actor_input.json") + instance = AuditLogSchemaActorInput.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogSchemaActorInput.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_schema_actor_input_minimal_payload(self): + data = { + "metadata": {"type": "object", "properties": {"role": {"type": "string"}}} + } + instance = AuditLogSchemaActorInput.from_dict(data) + serialized = instance.to_dict() + assert serialized["metadata"] == data["metadata"] + + def test_audit_log_schema_target_input_round_trip(self): + data = load_fixture("audit_log_schema_target_input.json") + instance = AuditLogSchemaTargetInput.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogSchemaTargetInput.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_schema_target_input_minimal_payload(self): + data = {"type": "invoice"} + instance = AuditLogSchemaTargetInput.from_dict(data) + serialized = instance.to_dict() + assert serialized["type"] == data["type"] + + def test_audit_log_schema_target_input_omits_absent_optional_non_nullable_fields( + self, + ): + data = {"type": "invoice"} + instance = AuditLogSchemaTargetInput.from_dict(data) + serialized = instance.to_dict() + assert "metadata" not in serialized + + def test_audit_log_event_create_response_round_trip(self): + data = load_fixture("audit_log_event_create_response.json") + instance = AuditLogEventCreateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogEventCreateResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_event_create_response_minimal_payload(self): + data = {"success": True} + instance = AuditLogEventCreateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["success"] == data["success"] + + def test_audit_log_export_round_trip(self): + data = load_fixture("audit_log_export.json") + instance = AuditLogExport.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogExport.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_export_minimal_payload(self): + data = { + "object": "audit_log_export", + "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "state": "ready", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogExport.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["state"] == data["state"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_audit_log_export_preserves_nullable_fields(self): + data = { + "object": "audit_log_export", + "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "state": "ready", + "url": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogExport.from_dict(data) + serialized = instance.to_dict() + assert serialized["url"] is None + + def test_audit_log_export_round_trips_unknown_enum_values(self): + data = { + "object": "audit_log_export", + "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", + "state": "unexpected_audit_log_export_state", + "url": "https://exports.audit-logs.com/audit-log-exports/export.csv", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogExport.from_dict(data) + assert instance.to_dict() == data + + def test_audit_log_schema_round_trip(self): + data = load_fixture("audit_log_schema.json") + instance = AuditLogSchema.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogSchema.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_schema_minimal_payload(self): + data = { + "object": "audit_log_schema", + "version": 1, + "targets": [ + { + "type": "invoice", + "metadata": { + "type": "object", + "properties": {"cost": {"type": "number"}}, + }, + } + ], + "created_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogSchema.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["version"] == data["version"] + assert serialized["targets"] == data["targets"] + assert serialized["created_at"] == data["created_at"] + + def test_audit_log_schema_omits_absent_optional_non_nullable_fields(self): + data = { + "object": "audit_log_schema", + "version": 1, + "targets": [ + { + "type": "invoice", + "metadata": { + "type": "object", + "properties": {"cost": {"type": "number"}}, + }, + } + ], + "created_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogSchema.from_dict(data) + serialized = instance.to_dict() + assert "actor" not in serialized + assert "metadata" not in serialized + + def test_audit_log_action_round_trip(self): + data = load_fixture("audit_log_action.json") + instance = AuditLogAction.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogAction.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_action_minimal_payload(self): + data = { + "object": "audit_log_action", + "name": "user.viewed_invoice", + "schema": { + "object": "audit_log_schema", + "version": 1, + "actor": { + "metadata": { + "type": "object", + "properties": {"role": {"type": "string"}}, + } + }, + "targets": [ + { + "type": "invoice", + "metadata": { + "type": "object", + "properties": {"cost": {"type": "number"}}, + }, + } + ], + "metadata": { + "type": "object", + "properties": {"transactionId": {"type": "string"}}, + }, + "created_at": "2026-01-15T12:00:00.000Z", + }, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuditLogAction.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["name"] == data["name"] + assert serialized["schema"] == data["schema"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_audit_log_schema_actor_round_trip(self): + data = load_fixture("audit_log_schema_actor.json") + instance = AuditLogSchemaActor.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogSchemaActor.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_schema_actor_minimal_payload(self): + data = {"metadata": {"key": {}}} + instance = AuditLogSchemaActor.from_dict(data) + serialized = instance.to_dict() + assert serialized["metadata"] == data["metadata"] + + def test_audit_log_schema_target_round_trip(self): + data = load_fixture("audit_log_schema_target.json") + instance = AuditLogSchemaTarget.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogSchemaTarget.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_log_schema_target_minimal_payload(self): + data = {"type": "invoice"} + instance = AuditLogSchemaTarget.from_dict(data) + serialized = instance.to_dict() + assert serialized["type"] == data["type"] + + def test_audit_log_schema_target_omits_absent_optional_non_nullable_fields(self): + data = {"type": "invoice"} + instance = AuditLogSchemaTarget.from_dict(data) + serialized = instance.to_dict() + assert "metadata" not in serialized diff --git a/tests/test_authorization_models_round_trip.py b/tests/test_authorization_models_round_trip.py new file mode 100644 index 00000000..decdb23b --- /dev/null +++ b/tests/test_authorization_models_round_trip.py @@ -0,0 +1,520 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.authorization.models import ( + AuthorizationCheck, + AuthorizationPermission, + AuthorizationResource, + GroupRoleAssignment, + GroupRoleAssignmentList, + GroupRoleAssignmentResource, + ListMetadata, + Permission, + ReplaceGroupRoleAssignmentEntry, + Role, + RoleList, + SlimRole, + UserRoleAssignment, + UserRoleAssignmentResource, + UserRoleAssignmentSource, +) + + +class TestModelRoundTrip: + def test_replace_group_role_assignment_entry_round_trip(self): + data = load_fixture("replace_group_role_assignment_entry.json") + instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ReplaceGroupRoleAssignmentEntry.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_replace_group_role_assignment_entry_minimal_payload(self): + data = {"role_slug": "admin"} + instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) + serialized = instance.to_dict() + assert serialized["role_slug"] == data["role_slug"] + + def test_replace_group_role_assignment_entry_omits_absent_optional_non_nullable_fields( + self, + ): + data = {"role_slug": "admin"} + instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) + serialized = instance.to_dict() + assert "resource_id" not in serialized + assert "resource_external_id" not in serialized + assert "resource_type_slug" not in serialized + + def test_list_metadata_round_trip(self): + data = load_fixture("list_metadata.json") + instance = ListMetadata.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ListMetadata.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_list_metadata_minimal_payload(self): + data = {} + instance = ListMetadata.from_dict(data) + assert instance.to_dict() is not None + + def test_list_metadata_preserves_nullable_fields(self): + data = {"after": None, "before": None} + instance = ListMetadata.from_dict(data) + serialized = instance.to_dict() + assert serialized["after"] is None + assert serialized["before"] is None + + def test_authorization_check_round_trip(self): + data = load_fixture("authorization_check.json") + instance = AuthorizationCheck.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthorizationCheck.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authorization_check_minimal_payload(self): + data = {"authorized": True} + instance = AuthorizationCheck.from_dict(data) + serialized = instance.to_dict() + assert serialized["authorized"] == data["authorized"] + + def test_authorization_resource_round_trip(self): + data = load_fixture("authorization_resource.json") + instance = AuthorizationResource.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthorizationResource.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authorization_resource_minimal_payload(self): + data = { + "object": "authorization_resource", + "name": "Website Redesign", + "description": None, + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "parent_resource_id": None, + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuthorizationResource.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["name"] == data["name"] + assert serialized["description"] == data["description"] + assert serialized["organization_id"] == data["organization_id"] + assert serialized["parent_resource_id"] == data["parent_resource_id"] + assert serialized["id"] == data["id"] + assert serialized["external_id"] == data["external_id"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_authorization_resource_preserves_nullable_fields(self): + data = { + "object": "authorization_resource", + "name": "Website Redesign", + "description": None, + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "parent_resource_id": None, + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuthorizationResource.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None + assert serialized["parent_resource_id"] is None + + def test_authorization_permission_round_trip(self): + data = load_fixture("authorization_permission.json") + instance = AuthorizationPermission.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthorizationPermission.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authorization_permission_minimal_payload(self): + data = { + "object": "permission", + "id": "perm_01HXYZ123456789ABCDEFGHIJ", + "slug": "documents:read", + "name": "View Documents", + "description": None, + "system": False, + "resource_type_slug": "workspace", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuthorizationPermission.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["slug"] == data["slug"] + assert serialized["name"] == data["name"] + assert serialized["description"] == data["description"] + assert serialized["system"] == data["system"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_authorization_permission_preserves_nullable_fields(self): + data = { + "object": "permission", + "id": "perm_01HXYZ123456789ABCDEFGHIJ", + "slug": "documents:read", + "name": "View Documents", + "description": None, + "system": False, + "resource_type_slug": "workspace", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = AuthorizationPermission.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None + + def test_slim_role_round_trip(self): + data = load_fixture("slim_role.json") + instance = SlimRole.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = SlimRole.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_slim_role_minimal_payload(self): + data = {"slug": "admin"} + instance = SlimRole.from_dict(data) + serialized = instance.to_dict() + assert serialized["slug"] == data["slug"] + + def test_group_role_assignment_round_trip(self): + data = load_fixture("group_role_assignment.json") + instance = GroupRoleAssignment.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = GroupRoleAssignment.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_group_role_assignment_minimal_payload(self): + data = { + "object": "group_role_assignment", + "id": "gra_01HXYZ123456789ABCDEFGH", + "group_id": "group_01HXYZ123456789ABCDEFGHIJ", + "role": {"slug": "admin"}, + "resource": { + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + }, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = GroupRoleAssignment.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["group_id"] == data["group_id"] + assert serialized["role"] == data["role"] + assert serialized["resource"] == data["resource"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_group_role_assignment_list_round_trip(self): + data = load_fixture("group_role_assignment_list.json") + instance = GroupRoleAssignmentList.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = GroupRoleAssignmentList.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_group_role_assignment_list_minimal_payload(self): + data = { + "object": "list", + "data": [ + { + "object": "group_role_assignment", + "id": "gra_01HXYZ123456789ABCDEFGH", + "group_id": "group_01HXYZ123456789ABCDEFGHIJ", + "role": {"slug": "admin"}, + "resource": { + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + }, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + ], + "list_metadata": { + "after": "b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e", + "before": "a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e", + }, + } + instance = GroupRoleAssignmentList.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["data"] == data["data"] + assert serialized["list_metadata"] == data["list_metadata"] + + def test_user_role_assignment_round_trip(self): + data = load_fixture("user_role_assignment.json") + instance = UserRoleAssignment.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserRoleAssignment.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_role_assignment_minimal_payload(self): + data = { + "object": "role_assignment", + "id": "role_assignment_01HXYZ123456789ABCDEFGH", + "organization_membership_id": "om_01HXYZ123456789ABCDEFGHIJ", + "role": {"slug": "admin"}, + "resource": { + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + }, + "source": {"type": "direct", "group_role_assignment_id": None}, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserRoleAssignment.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert ( + serialized["organization_membership_id"] + == data["organization_membership_id"] + ) + assert serialized["role"] == data["role"] + assert serialized["resource"] == data["resource"] + assert serialized["source"] == data["source"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_role_round_trip(self): + data = load_fixture("role.json") + instance = Role.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = Role.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_role_minimal_payload(self): + data = { + "slug": "admin", + "object": "role", + "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "name": "Admin", + "description": None, + "type": "EnvironmentRole", + "resource_type_slug": "organization", + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = Role.from_dict(data) + serialized = instance.to_dict() + assert serialized["slug"] == data["slug"] + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["name"] == data["name"] + assert serialized["description"] == data["description"] + assert serialized["type"] == data["type"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + assert serialized["permissions"] == data["permissions"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_role_preserves_nullable_fields(self): + data = { + "slug": "admin", + "object": "role", + "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "name": "Admin", + "description": None, + "type": "EnvironmentRole", + "resource_type_slug": "organization", + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = Role.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None + + def test_role_round_trips_unknown_enum_values(self): + data = { + "slug": "admin", + "object": "role", + "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "name": "Admin", + "description": "Can manage all resources", + "type": "unexpected_role_type", + "resource_type_slug": "organization", + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = Role.from_dict(data) + assert instance.to_dict() == data + + def test_role_list_round_trip(self): + data = load_fixture("role_list.json") + instance = RoleList.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = RoleList.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_role_list_minimal_payload(self): + data = { + "object": "list", + "data": [ + { + "slug": "admin", + "object": "role", + "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", + "name": "Admin", + "description": "Can manage all resources", + "type": "EnvironmentRole", + "resource_type_slug": "organization", + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + ], + } + instance = RoleList.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["data"] == data["data"] + + def test_user_role_assignment_resource_round_trip(self): + data = load_fixture("user_role_assignment_resource.json") + instance = UserRoleAssignmentResource.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserRoleAssignmentResource.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_role_assignment_resource_minimal_payload(self): + data = { + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + } + instance = UserRoleAssignmentResource.from_dict(data) + serialized = instance.to_dict() + assert serialized["id"] == data["id"] + assert serialized["external_id"] == data["external_id"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + + def test_user_role_assignment_source_round_trip(self): + data = load_fixture("user_role_assignment_source.json") + instance = UserRoleAssignmentSource.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserRoleAssignmentSource.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_role_assignment_source_minimal_payload(self): + data = {"type": "direct", "group_role_assignment_id": None} + instance = UserRoleAssignmentSource.from_dict(data) + serialized = instance.to_dict() + assert serialized["type"] == data["type"] + assert ( + serialized["group_role_assignment_id"] == data["group_role_assignment_id"] + ) + + def test_user_role_assignment_source_preserves_nullable_fields(self): + data = {"type": "direct", "group_role_assignment_id": None} + instance = UserRoleAssignmentSource.from_dict(data) + serialized = instance.to_dict() + assert serialized["group_role_assignment_id"] is None + + def test_user_role_assignment_source_round_trips_unknown_enum_values(self): + data = { + "type": "unexpected_user_role_assignment_source_type", + "group_role_assignment_id": None, + } + instance = UserRoleAssignmentSource.from_dict(data) + assert instance.to_dict() == data + + def test_group_role_assignment_resource_round_trip(self): + data = load_fixture("group_role_assignment_resource.json") + instance = GroupRoleAssignmentResource.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = GroupRoleAssignmentResource.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_group_role_assignment_resource_minimal_payload(self): + data = { + "id": "authz_resource_01HXYZ123456789ABCDEFGH", + "external_id": "proj-456", + "resource_type_slug": "project", + } + instance = GroupRoleAssignmentResource.from_dict(data) + serialized = instance.to_dict() + assert serialized["id"] == data["id"] + assert serialized["external_id"] == data["external_id"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + + def test_permission_round_trip(self): + data = load_fixture("permission.json") + instance = Permission.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = Permission.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_permission_minimal_payload(self): + data = { + "object": "permission", + "id": "perm_01HXYZ123456789ABCDEFGHIJ", + "slug": "documents:read", + "name": "View Documents", + "description": None, + "system": False, + "resource_type_slug": "document", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = Permission.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["slug"] == data["slug"] + assert serialized["name"] == data["name"] + assert serialized["description"] == data["description"] + assert serialized["system"] == data["system"] + assert serialized["resource_type_slug"] == data["resource_type_slug"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_permission_preserves_nullable_fields(self): + data = { + "object": "permission", + "id": "perm_01HXYZ123456789ABCDEFGHIJ", + "slug": "documents:read", + "name": "View Documents", + "description": None, + "system": False, + "resource_type_slug": "document", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = Permission.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None diff --git a/tests/test_common_models_round_trip.py b/tests/test_common_models_round_trip.py new file mode 100644 index 00000000..0980407c --- /dev/null +++ b/tests/test_common_models_round_trip.py @@ -0,0 +1,158 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.common.models import ( + ConnectApplicationM2M, + ConnectApplicationOAuth, + ConnectApplicationOAuthRedirectUris, +) + + +class TestModelRoundTrip: + def test_connect_application_oauth_round_trip(self): + data = load_fixture("connect_application_oauth.json") + instance = ConnectApplicationOAuth.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ConnectApplicationOAuth.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_connect_application_oauth_minimal_payload(self): + data = { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": None, + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "oauth", + "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], + "uses_pkce": True, + "is_first_party": True, + } + instance = ConnectApplicationOAuth.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["client_id"] == data["client_id"] + assert serialized["description"] == data["description"] + assert serialized["name"] == data["name"] + assert serialized["scopes"] == data["scopes"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["application_type"] == data["application_type"] + assert serialized["redirect_uris"] == data["redirect_uris"] + assert serialized["uses_pkce"] == data["uses_pkce"] + assert serialized["is_first_party"] == data["is_first_party"] + + def test_connect_application_oauth_omits_absent_optional_non_nullable_fields(self): + data = { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": "An application for managing user access", + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "oauth", + "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], + "uses_pkce": True, + "is_first_party": True, + } + instance = ConnectApplicationOAuth.from_dict(data) + serialized = instance.to_dict() + assert "was_dynamically_registered" not in serialized + assert "organization_id" not in serialized + + def test_connect_application_oauth_preserves_nullable_fields(self): + data = { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": None, + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "oauth", + "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], + "uses_pkce": True, + "is_first_party": True, + "was_dynamically_registered": True, + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + } + instance = ConnectApplicationOAuth.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None + + def test_connect_application_oauth_redirect_uris_round_trip(self): + data = load_fixture("connect_application_oauth_redirect_uris.json") + instance = ConnectApplicationOAuthRedirectUris.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ConnectApplicationOAuthRedirectUris.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_connect_application_oauth_redirect_uris_minimal_payload(self): + data = {"uri": "https://example.com/callback", "default": True} + instance = ConnectApplicationOAuthRedirectUris.from_dict(data) + serialized = instance.to_dict() + assert serialized["uri"] == data["uri"] + assert serialized["default"] == data["default"] + + def test_connect_application_m2m_round_trip(self): + data = load_fixture("connect_application_m2m.json") + instance = ConnectApplicationM2M.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ConnectApplicationM2M.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_connect_application_m2m_minimal_payload(self): + data = { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": None, + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "m2m", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + } + instance = ConnectApplicationM2M.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["client_id"] == data["client_id"] + assert serialized["description"] == data["description"] + assert serialized["name"] == data["name"] + assert serialized["scopes"] == data["scopes"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["application_type"] == data["application_type"] + assert serialized["organization_id"] == data["organization_id"] + + def test_connect_application_m2m_preserves_nullable_fields(self): + data = { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": None, + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "m2m", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + } + instance = ConnectApplicationM2M.from_dict(data) + serialized = instance.to_dict() + assert serialized["description"] is None diff --git a/tests/test_connect_models_round_trip.py b/tests/test_connect_models_round_trip.py new file mode 100644 index 00000000..1243d7b5 --- /dev/null +++ b/tests/test_connect_models_round_trip.py @@ -0,0 +1,36 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +import pytest + +from tests.generated_helpers import load_fixture + +from workos.common.models import ConnectApplicationM2M +from workos.connect.models import ConnectApplication, ConnectApplicationUnknown + + +class TestDiscriminatorDispatch: + def test_connect_application_dispatches_known_variant(self): + data = load_fixture("connect_application_m2m.json") + result = ConnectApplication.from_dict(data) + assert isinstance(result, ConnectApplicationM2M) + + def test_connect_application_returns_unknown_for_unrecognized_type(self): + data = load_fixture("connect_application_m2m.json") + data = {**data, "application_type": "future.unrecognized.type"} + result = ConnectApplication.from_dict(data) + assert isinstance(result, ConnectApplicationUnknown) + assert result.raw_data == data + + def test_connect_application_raises_on_missing_discriminator(self): + data = load_fixture("connect_application_m2m.json") + data = {k: v for k, v in data.items() if k != "application_type"} + with pytest.raises(Exception): + ConnectApplication.from_dict(data) + + def test_connect_application_raises_on_none_discriminator(self): + data = load_fixture("connect_application_m2m.json") + data = {**data, "application_type": None} + with pytest.raises(Exception): + ConnectApplication.from_dict(data) diff --git a/tests/test_groups_models_round_trip.py b/tests/test_groups_models_round_trip.py new file mode 100644 index 00000000..2709bfe0 --- /dev/null +++ b/tests/test_groups_models_round_trip.py @@ -0,0 +1,128 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.groups.models import UserOrganizationMembershipBaseListData + + +class TestModelRoundTrip: + def test_user_organization_membership_base_list_data_round_trip(self): + data = load_fixture("user_organization_membership_base_list_data.json") + instance = UserOrganizationMembershipBaseListData.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserOrganizationMembershipBaseListData.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_organization_membership_base_list_data_minimal_payload(self): + data = { + "object": "organization_membership", + "id": "om_01HXYZ123456789ABCDEFGHIJ", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "status": "active", + "directory_managed": False, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + } + instance = UserOrganizationMembershipBaseListData.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["user_id"] == data["user_id"] + assert serialized["organization_id"] == data["organization_id"] + assert serialized["status"] == data["status"] + assert serialized["directory_managed"] == data["directory_managed"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["user"] == data["user"] + + def test_user_organization_membership_base_list_data_omits_absent_optional_non_nullable_fields( + self, + ): + data = { + "object": "organization_membership", + "id": "om_01HXYZ123456789ABCDEFGHIJ", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "status": "active", + "directory_managed": False, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + } + instance = UserOrganizationMembershipBaseListData.from_dict(data) + serialized = instance.to_dict() + assert "organization_name" not in serialized + assert "custom_attributes" not in serialized + + def test_user_organization_membership_base_list_data_round_trips_unknown_enum_values( + self, + ): + data = { + "object": "organization_membership", + "id": "om_01HXYZ123456789ABCDEFGHIJ", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + "status": "unexpected_user_organization_membership_base_list_data_status", + "directory_managed": False, + "organization_name": "Acme Corp", + "custom_attributes": { + "department": "Engineering", + "title": "Developer Experience Engineer", + "location": "Brooklyn", + }, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + } + instance = UserOrganizationMembershipBaseListData.from_dict(data) + assert instance.to_dict() == data diff --git a/tests/test_models_round_trip.py b/tests/test_models_round_trip.py index 341c98c7..00374fd4 100644 --- a/tests/test_models_round_trip.py +++ b/tests/test_models_round_trip.py @@ -1,18318 +1,5 @@ # This file is auto-generated by oagen. Do not edit. -"""Model round-trip tests: from_dict(to_dict()) preserves data.""" +"""Model round-trip tests moved to per-service tests/test__models_round_trip.py files. -import pytest - -from tests.generated_helpers import load_fixture - -from workos.admin_portal.models import ( - DomainVerificationIntentOptions, - IntentOptions, - PortalLinkResponse, - SSOIntentOptions, -) -from workos.api_keys.models import ( - ApiKey, - ApiKeyOwner, - ApiKeyValidationResponse, - OrganizationApiKey, - OrganizationApiKeyOwner, - OrganizationApiKeyWithValue, - OrganizationApiKeyWithValueOwner, -) -from workos.audit_logs.models import ( - AuditLogAction, - AuditLogEvent, - AuditLogEventActor, - AuditLogEventContext, - AuditLogEventCreateResponse, - AuditLogEventTarget, - AuditLogExport, - AuditLogSchema, - AuditLogSchemaActor, - AuditLogSchemaActorInput, - AuditLogSchemaTarget, - AuditLogSchemaTargetInput, -) -from workos.authorization.models import ( - AuthorizationCheck, - AuthorizationPermission, - AuthorizationResource, - GroupRoleAssignment, - GroupRoleAssignmentList, - GroupRoleAssignmentResource, - ListMetadata, - Permission, - ReplaceGroupRoleAssignmentEntry, - Role, - RoleList, - SlimRole, - UserRoleAssignment, - UserRoleAssignmentResource, -) -from workos.client_api.models import ClientApiTokenResponse -from workos.common.models import ( - ActionAuthenticationDenied, - ActionAuthenticationDeniedData, - ActionUserRegistrationDenied, - ActionUserRegistrationDeniedData, - ApiKeyCreated, - ApiKeyCreatedData, - ApiKeyCreatedDataOwner, - ApiKeyRevoked, - ApiKeyRevokedData, - ApiKeyRevokedDataOwner, - ApiKeyUpdated, - ApiKeyUpdatedData, - ApiKeyUpdatedDataOwner, - ApiKeyUpdatedDataPreviousAttribute, - AuthenticationEmailVerificationFailed, - AuthenticationEmailVerificationFailedData, - AuthenticationEmailVerificationFailedDataError, - AuthenticationEmailVerificationSucceeded, - AuthenticationEmailVerificationSucceededData, - AuthenticationMFAFailed, - AuthenticationMFAFailedData, - AuthenticationMFAFailedDataError, - AuthenticationMFASucceeded, - AuthenticationMFASucceededData, - AuthenticationMagicAuthFailed, - AuthenticationMagicAuthFailedData, - AuthenticationMagicAuthFailedDataError, - AuthenticationMagicAuthSucceeded, - AuthenticationMagicAuthSucceededData, - AuthenticationOAuthFailed, - AuthenticationOAuthFailedData, - AuthenticationOAuthFailedDataError, - AuthenticationOAuthSucceeded, - AuthenticationOAuthSucceededData, - AuthenticationPasskeyFailed, - AuthenticationPasskeyFailedData, - AuthenticationPasskeyFailedDataError, - AuthenticationPasskeySucceeded, - AuthenticationPasskeySucceededData, - AuthenticationPasswordFailed, - AuthenticationPasswordFailedData, - AuthenticationPasswordFailedDataError, - AuthenticationPasswordSucceeded, - AuthenticationPasswordSucceededData, - AuthenticationRadarRiskDetected, - AuthenticationRadarRiskDetectedData, - AuthenticationSSOFailed, - AuthenticationSSOFailedData, - AuthenticationSSOFailedDataError, - AuthenticationSSOFailedDataSSO, - AuthenticationSSOStarted, - AuthenticationSSOStartedData, - AuthenticationSSOStartedDataSSO, - AuthenticationSSOSucceeded, - AuthenticationSSOSucceededData, - AuthenticationSSOSucceededDataSSO, - AuthenticationSSOTimedOut, - AuthenticationSSOTimedOutData, - AuthenticationSSOTimedOutDataError, - AuthenticationSSOTimedOutDataSSO, - ConnectApplicationM2M, - ConnectApplicationOAuth, - ConnectApplicationOAuthRedirectUris, - ConnectionActivated, - ConnectionActivatedData, - ConnectionActivatedDataDomain, - ConnectionDeactivated, - ConnectionDeactivatedData, - ConnectionDeactivatedDataDomain, - ConnectionDeleted, - ConnectionDeletedData, - ConnectionSAMLCertificateRenewalRequired, - ConnectionSAMLCertificateRenewalRequiredData, - ConnectionSAMLCertificateRenewalRequiredDataCertificate, - ConnectionSAMLCertificateRenewalRequiredDataConnection, - ConnectionSAMLCertificateRenewed, - ConnectionSAMLCertificateRenewedData, - ConnectionSAMLCertificateRenewedDataCertificate, - ConnectionSAMLCertificateRenewedDataConnection, - DirectoryUser, - DirectoryUserEmail, - DsyncActivated, - DsyncActivatedData, - DsyncActivatedDataDomain, - DsyncDeleted, - DsyncDeletedData, - DsyncGroupCreated, - DsyncGroupDeleted, - DsyncGroupUpdated, - DsyncGroupUpdatedData, - DsyncGroupUserAdded, - DsyncGroupUserAddedData, - DsyncGroupUserRemoved, - DsyncGroupUserRemovedData, - DsyncTokenCreated, - DsyncTokenCreatedData, - DsyncTokenRevoked, - DsyncTokenRevokedData, - DsyncUserCreated, - DsyncUserDeleted, - DsyncUserUpdated, - DsyncUserUpdatedData, - DsyncUserUpdatedDataEmail, - EmailVerificationCreated, - EmailVerificationCreatedData, - ErrorResponse, - EventContext, - EventContextActor, - EventContextGoogleAnalyticsSession, - FlagCreated, - FlagCreatedContext, - FlagCreatedContextActor, - FlagCreatedData, - FlagCreatedDataOwner, - FlagDeleted, - FlagDeletedContext, - FlagDeletedContextActor, - FlagDeletedData, - FlagDeletedDataOwner, - FlagRuleUpdated, - FlagRuleUpdatedContext, - FlagRuleUpdatedContextActor, - FlagRuleUpdatedContextConfiguredTarget, - FlagRuleUpdatedContextConfiguredTargetOrganization, - FlagRuleUpdatedContextConfiguredTargetUser, - FlagRuleUpdatedContextPreviousAttribute, - FlagRuleUpdatedContextPreviousAttributeContext, - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTarget, - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetOrganization, - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetUser, - FlagRuleUpdatedContextPreviousAttributeData, - FlagRuleUpdatedData, - FlagRuleUpdatedDataOwner, - FlagUpdated, - FlagUpdatedContext, - FlagUpdatedContextActor, - FlagUpdatedContextPreviousAttribute, - FlagUpdatedContextPreviousAttributeData, - FlagUpdatedData, - FlagUpdatedDataOwner, - GroupCreated, - GroupDeleted, - GroupMemberAdded, - GroupMemberAddedData, - GroupMemberRemoved, - GroupMemberRemovedData, - GroupUpdated, - InvitationAccepted, - InvitationAcceptedData, - InvitationCreated, - InvitationCreatedData, - InvitationResent, - InvitationResentData, - InvitationRevoked, - InvitationRevokedData, - MagicAuthCreated, - MagicAuthCreatedData, - OrganizationCreated, - OrganizationCreatedData, - OrganizationCreatedDataDomain, - OrganizationDeleted, - OrganizationDeletedData, - OrganizationDeletedDataDomain, - OrganizationDomainCreated, - OrganizationDomainCreatedData, - OrganizationDomainDeleted, - OrganizationDomainDeletedData, - OrganizationDomainUpdated, - OrganizationDomainUpdatedData, - OrganizationDomainVerificationFailed, - OrganizationDomainVerificationFailedData, - OrganizationDomainVerificationFailedDataOrganizationDomain, - OrganizationDomainVerified, - OrganizationDomainVerifiedData, - OrganizationMembershipCreated, - OrganizationMembershipCreatedData, - OrganizationMembershipDeleted, - OrganizationMembershipDeletedData, - OrganizationMembershipUpdated, - OrganizationMembershipUpdatedData, - OrganizationRoleCreated, - OrganizationRoleCreatedData, - OrganizationRoleDeleted, - OrganizationRoleDeletedData, - OrganizationRoleUpdated, - OrganizationRoleUpdatedData, - OrganizationUpdated, - OrganizationUpdatedData, - OrganizationUpdatedDataDomain, - PasswordResetCreated, - PasswordResetCreatedData, - PasswordResetSucceeded, - PasswordResetSucceededData, - PermissionCreated, - PermissionCreatedData, - PermissionDeleted, - PermissionDeletedData, - PermissionUpdated, - PermissionUpdatedData, - PipeConnectedAccount, - PipesConnectedAccountConnected, - PipesConnectedAccountDisconnected, - PipesConnectedAccountReauthorizationNeeded, - RoleCreated, - RoleCreatedData, - RoleDeleted, - RoleDeletedData, - RoleUpdated, - RoleUpdatedData, - SessionCreated, - SessionCreatedData, - SessionCreatedDataImpersonator, - SessionRevoked, - SessionRevokedData, - SessionRevokedDataImpersonator, - UserApiKeyCreatedDataOwner, - UserApiKeyRevokedDataOwner, - UserApiKeyUpdatedDataOwner, - UserCreated, - UserDeleted, - UserUpdated, - VaultByokKeyDeleted, - VaultByokKeyDeletedData, - VaultByokKeyVerificationCompleted, - VaultByokKeyVerificationCompletedData, - VaultDataCreated, - VaultDataCreatedData, - VaultDataDeleted, - VaultDataDeletedData, - VaultDataRead, - VaultDataReadData, - VaultDataUpdated, - VaultDataUpdatedData, - VaultDekDecrypted, - VaultDekDecryptedData, - VaultDekRead, - VaultDekReadData, - VaultKekCreated, - VaultKekCreatedData, - VaultMetadataRead, - VaultMetadataReadData, - VaultNamesListed, - VaultNamesListedData, - WaitlistUser, - WaitlistUserApproved, - WaitlistUserCreated, - WaitlistUserDenied, -) -from workos.connect.models import ( - ApplicationCredentialsListItem, - ConnectApplication, - ConnectApplicationUnknown, - ExternalAuthCompleteResponse, - NewConnectApplicationSecret, - RedirectUriInput, - UserConsentOption, - UserConsentOptionChoice, - UserObject, -) -from workos.directory_sync.models import ( - Directory, - DirectoryGroup, - DirectoryMetadata, - DirectoryMetadataUser, - DirectoryUserWithGroups, - DirectoryUserWithGroupsEmail, -) -from workos.events.models import EventListListMetadata, EventSchema, EventSchemaUnknown -from workos.feature_flags.models import FeatureFlag, FeatureFlagOwner, Flag, FlagOwner -from workos.groups.models import Group, UserOrganizationMembershipBaseListData -from workos.multi_factor_auth.models import ( - AuthenticationChallenge, - AuthenticationChallengeVerifyResponse, - AuthenticationFactor, - AuthenticationFactorEnrolled, - AuthenticationFactorEnrolledSms, - AuthenticationFactorEnrolledTotp, - AuthenticationFactorSms, - AuthenticationFactorTotp, - UserAuthenticationFactorEnrollResponse, -) -from workos.organization_domains.models import OrganizationDomain -from workos.organization_membership.models import ( - OrganizationMembership, - UserOrganizationMembership, -) -from workos.organizations.models import ( - AuditLogConfiguration, - AuditLogConfigurationLogStream, - AuditLogsRetention, - Organization, - OrganizationDomainData, -) -from workos.pipes.models import ( - ConnectedAccount, - DataIntegrationAccessTokenResponse, - DataIntegrationAccessTokenResponseAccessToken, - DataIntegrationAuthorizeUrlResponse, - DataIntegrationsListResponse, - DataIntegrationsListResponseData, - DataIntegrationsListResponseDataConnectedAccount, -) -from workos.pipes_provider.models import ( - DataIntegrationConfigurationListResponse, - DataIntegrationConfigurationResponse, - DataIntegrationCredentials, -) -from workos.radar.models import ( - RadarListEntryAlreadyPresentResponse, - RadarStandaloneResponse, -) -from workos.sso.models import ( - Connection, - ConnectionDomain, - ConnectionOption, - Profile, - SSOAuthorizeUrlResponse, - SSOLogoutAuthorizeResponse, - SSOTokenResponse, - SSOTokenResponseOAuthToken, -) -from workos.user_management.models import ( - AuthenticateResponse, - AuthenticateResponseImpersonator, - AuthenticateResponseOAuthToken, - AuthorizedConnectApplicationListData, - CORSOriginResponse, - DeviceAuthorizationResponse, - EmailChange, - EmailChangeConfirmation, - EmailChangeConfirmationUser, - EmailVerification, - Invitation, - JWTTemplateResponse, - JwksResponse, - JwksResponseKeys, - MagicAuth, - PasswordReset, - RedirectUri, - ResetPasswordResponse, - SendVerificationEmailResponse, - User, - UserApiKey, - UserApiKeyOwner, - UserApiKeyWithValue, - UserApiKeyWithValueOwner, - UserIdentitiesGetItem, - UserInvite, - UserSessionsImpersonator, - UserSessionsListItem, - VerifyEmailResponse, -) -from workos.vault.models import ( - Actor, - CreateDataKeyResponse, - DecryptResponse, - DeleteObjectResponse, - ObjectMetadata, - ObjectSummary, - ObjectVersion, - ObjectWithoutValue, - VaultObject, - VersionListResponse, -) -from workos.webhooks.models import WebhookEndpoint -from workos.widgets.models import WidgetSessionTokenResponse - - -class TestModelRoundTrip: - def test_user_object_round_trip(self): - data = load_fixture("user_object.json") - instance = UserObject.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserObject.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_object_minimal_payload(self): - data = {"id": "user_12345", "email": "marcelina.davis@example.com"} - instance = UserObject.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - - def test_user_object_omits_absent_optional_non_nullable_fields(self): - data = {"id": "user_12345", "email": "marcelina.davis@example.com"} - instance = UserObject.from_dict(data) - serialized = instance.to_dict() - assert "first_name" not in serialized - assert "last_name" not in serialized - assert "name" not in serialized - assert "metadata" not in serialized - - def test_user_consent_option_round_trip(self): - data = load_fixture("user_consent_option.json") - instance = UserConsentOption.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserConsentOption.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_consent_option_minimal_payload(self): - data = { - "claim": "tos_accepted", - "type": "enum", - "label": "Terms of Service", - "choices": [ - {"value": "accepted", "label": "I accept the Terms of Service"} - ], - } - instance = UserConsentOption.from_dict(data) - serialized = instance.to_dict() - assert serialized["claim"] == data["claim"] - assert serialized["type"] == data["type"] - assert serialized["label"] == data["label"] - assert serialized["choices"] == data["choices"] - - def test_redirect_uri_input_round_trip(self): - data = load_fixture("redirect_uri_input.json") - instance = RedirectUriInput.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RedirectUriInput.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_redirect_uri_input_minimal_payload(self): - data = {"uri": "https://example.com/callback"} - instance = RedirectUriInput.from_dict(data) - serialized = instance.to_dict() - assert serialized["uri"] == data["uri"] - - def test_redirect_uri_input_preserves_nullable_fields(self): - data = {"uri": "https://example.com/callback", "default": None} - instance = RedirectUriInput.from_dict(data) - serialized = instance.to_dict() - assert serialized["default"] is None - - def test_audit_log_event_actor_round_trip(self): - data = load_fixture("audit_log_event_actor.json") - instance = AuditLogEventActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogEventActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_event_actor_minimal_payload(self): - data = {"id": "user_TF4C5938", "type": "user"} - instance = AuditLogEventActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - - def test_audit_log_event_actor_omits_absent_optional_non_nullable_fields(self): - data = {"id": "user_TF4C5938", "type": "user"} - instance = AuditLogEventActor.from_dict(data) - serialized = instance.to_dict() - assert "name" not in serialized - assert "metadata" not in serialized - - def test_audit_log_event_target_round_trip(self): - data = load_fixture("audit_log_event_target.json") - instance = AuditLogEventTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogEventTarget.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_event_target_minimal_payload(self): - data = {"id": "user_TF4C5938", "type": "user"} - instance = AuditLogEventTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - - def test_audit_log_event_target_omits_absent_optional_non_nullable_fields(self): - data = {"id": "user_TF4C5938", "type": "user"} - instance = AuditLogEventTarget.from_dict(data) - serialized = instance.to_dict() - assert "name" not in serialized - assert "metadata" not in serialized - - def test_audit_log_event_context_round_trip(self): - data = load_fixture("audit_log_event_context.json") - instance = AuditLogEventContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogEventContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_event_context_minimal_payload(self): - data = {"location": "123.123.123.123"} - instance = AuditLogEventContext.from_dict(data) - serialized = instance.to_dict() - assert serialized["location"] == data["location"] - - def test_audit_log_event_context_omits_absent_optional_non_nullable_fields(self): - data = {"location": "123.123.123.123"} - instance = AuditLogEventContext.from_dict(data) - serialized = instance.to_dict() - assert "user_agent" not in serialized - - def test_audit_log_event_round_trip(self): - data = load_fixture("audit_log_event.json") - instance = AuditLogEvent.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogEvent.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_event_minimal_payload(self): - data = { - "action": "user.signed_in", - "occurred_at": "2026-02-02T16:35:39.000Z", - "actor": { - "id": "user_TF4C5938", - "type": "user", - "name": "Jon Smith", - "metadata": {"owner": "user_01GBTCQ2"}, - }, - "targets": [ - { - "id": "user_TF4C5938", - "type": "user", - "name": "Jon Smith", - "metadata": {"owner": "user_01GBTCQ2"}, - } - ], - "context": { - "location": "123.123.123.123", - "user_agent": "Chrome/104.0.0.0", - }, - } - instance = AuditLogEvent.from_dict(data) - serialized = instance.to_dict() - assert serialized["action"] == data["action"] - assert serialized["occurred_at"] == data["occurred_at"] - assert serialized["actor"] == data["actor"] - assert serialized["targets"] == data["targets"] - assert serialized["context"] == data["context"] - - def test_audit_log_event_omits_absent_optional_non_nullable_fields(self): - data = { - "action": "user.signed_in", - "occurred_at": "2026-02-02T16:35:39.000Z", - "actor": { - "id": "user_TF4C5938", - "type": "user", - "name": "Jon Smith", - "metadata": {"owner": "user_01GBTCQ2"}, - }, - "targets": [ - { - "id": "user_TF4C5938", - "type": "user", - "name": "Jon Smith", - "metadata": {"owner": "user_01GBTCQ2"}, - } - ], - "context": { - "location": "123.123.123.123", - "user_agent": "Chrome/104.0.0.0", - }, - } - instance = AuditLogEvent.from_dict(data) - serialized = instance.to_dict() - assert "metadata" not in serialized - assert "version" not in serialized - - def test_audit_log_schema_actor_input_round_trip(self): - data = load_fixture("audit_log_schema_actor_input.json") - instance = AuditLogSchemaActorInput.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogSchemaActorInput.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_schema_actor_input_minimal_payload(self): - data = { - "metadata": {"type": "object", "properties": {"role": {"type": "string"}}} - } - instance = AuditLogSchemaActorInput.from_dict(data) - serialized = instance.to_dict() - assert serialized["metadata"] == data["metadata"] - - def test_audit_log_schema_target_input_round_trip(self): - data = load_fixture("audit_log_schema_target_input.json") - instance = AuditLogSchemaTargetInput.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogSchemaTargetInput.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_schema_target_input_minimal_payload(self): - data = {"type": "invoice"} - instance = AuditLogSchemaTargetInput.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - - def test_audit_log_schema_target_input_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"type": "invoice"} - instance = AuditLogSchemaTargetInput.from_dict(data) - serialized = instance.to_dict() - assert "metadata" not in serialized - - def test_replace_group_role_assignment_entry_round_trip(self): - data = load_fixture("replace_group_role_assignment_entry.json") - instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ReplaceGroupRoleAssignmentEntry.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_replace_group_role_assignment_entry_minimal_payload(self): - data = {"role_slug": "admin"} - instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) - serialized = instance.to_dict() - assert serialized["role_slug"] == data["role_slug"] - - def test_replace_group_role_assignment_entry_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"role_slug": "admin"} - instance = ReplaceGroupRoleAssignmentEntry.from_dict(data) - serialized = instance.to_dict() - assert "resource_id" not in serialized - assert "resource_external_id" not in serialized - assert "resource_type_slug" not in serialized - - def test_organization_domain_data_round_trip(self): - data = load_fixture("organization_domain_data.json") - instance = OrganizationDomainData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_data_minimal_payload(self): - data = {"domain": "foo-corp.com", "state": "verified"} - instance = OrganizationDomainData.from_dict(data) - serialized = instance.to_dict() - assert serialized["domain"] == data["domain"] - assert serialized["state"] == data["state"] - - def test_organization_domain_data_round_trips_unknown_enum_values(self): - data = { - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_data_state", - } - instance = OrganizationDomainData.from_dict(data) - assert instance.to_dict() == data - - def test_sso_intent_options_round_trip(self): - data = load_fixture("sso_intent_options.json") - instance = SSOIntentOptions.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SSOIntentOptions.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_sso_intent_options_minimal_payload(self): - data = {} - instance = SSOIntentOptions.from_dict(data) - assert instance.to_dict() is not None - - def test_sso_intent_options_omits_absent_optional_non_nullable_fields(self): - data = {} - instance = SSOIntentOptions.from_dict(data) - serialized = instance.to_dict() - assert "bookmark_slug" not in serialized - assert "provider_type" not in serialized - - def test_domain_verification_intent_options_round_trip(self): - data = load_fixture("domain_verification_intent_options.json") - instance = DomainVerificationIntentOptions.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DomainVerificationIntentOptions.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_domain_verification_intent_options_minimal_payload(self): - data = {} - instance = DomainVerificationIntentOptions.from_dict(data) - assert instance.to_dict() is not None - - def test_domain_verification_intent_options_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = DomainVerificationIntentOptions.from_dict(data) - serialized = instance.to_dict() - assert "domain_name" not in serialized - - def test_intent_options_round_trip(self): - data = load_fixture("intent_options.json") - instance = IntentOptions.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = IntentOptions.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_intent_options_minimal_payload(self): - data = {} - instance = IntentOptions.from_dict(data) - assert instance.to_dict() is not None - - def test_intent_options_omits_absent_optional_non_nullable_fields(self): - data = {} - instance = IntentOptions.from_dict(data) - serialized = instance.to_dict() - assert "sso" not in serialized - assert "domain_verification" not in serialized - - def test_actor_round_trip(self): - data = load_fixture("actor.json") - instance = Actor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Actor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_actor_minimal_payload(self): - data = {"id": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", "name": "My API Key"} - instance = Actor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - - def test_create_data_key_response_round_trip(self): - data = load_fixture("create_data_key_response.json") - instance = CreateDataKeyResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = CreateDataKeyResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_create_data_key_response_minimal_payload(self): - data = { - "context": {"organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P"}, - "data_key": "DR9idtey9MpMrA1VRFrz30HB1yNgL2PoHZyjAkFeWgg=", - "encrypted_keys": "V09TLkVLTS52MQBiZjUxY2NlYy03OGI0LTUyMDAtYjM4My0zNTczMGU3MWVmNjEBATEBJGJmNjVlMzI2LTQzYTAtNGIyMC04OGM0LTA3ZmYzZGU1NDM0YwF0YmY2NWUzMjYtNDNhMC00YjIwLTg4YzQtMDdmZjNkZTU0MzRj", - "id": "bf51ccec-78b4-5200-b383-35730e71ef61", - } - instance = CreateDataKeyResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["context"] == data["context"] - assert serialized["data_key"] == data["data_key"] - assert serialized["encrypted_keys"] == data["encrypted_keys"] - assert serialized["id"] == data["id"] - - def test_decrypt_response_round_trip(self): - data = load_fixture("decrypt_response.json") - instance = DecryptResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DecryptResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_decrypt_response_minimal_payload(self): - data = { - "data_key": "DR9idtey9MpMrA1VRFrz30HB1yNgL2PoHZyjAkFeWgg=", - "id": "bf51ccec-78b4-5200-b383-35730e71ef61", - } - instance = DecryptResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["data_key"] == data["data_key"] - assert serialized["id"] == data["id"] - - def test_delete_object_response_round_trip(self): - data = load_fixture("delete_object_response.json") - instance = DeleteObjectResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DeleteObjectResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_delete_object_response_minimal_payload(self): - data = {"name": "my-secret", "success": True} - instance = DeleteObjectResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] == data["name"] - assert serialized["success"] == data["success"] - - def test_error_response_round_trip(self): - data = load_fixture("error_response.json") - instance = ErrorResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ErrorResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_error_response_minimal_payload(self): - data = {"error": "Invalid request parameters."} - instance = ErrorResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["error"] == data["error"] - - def test_list_metadata_round_trip(self): - data = load_fixture("list_metadata.json") - instance = ListMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ListMetadata.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_list_metadata_minimal_payload(self): - data = {} - instance = ListMetadata.from_dict(data) - assert instance.to_dict() is not None - - def test_list_metadata_preserves_nullable_fields(self): - data = {"after": None, "before": None} - instance = ListMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["after"] is None - assert serialized["before"] is None - - def test_vault_object_round_trip(self): - data = load_fixture("vault_object.json") - instance = VaultObject.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultObject.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_object_minimal_payload(self): - data = { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "metadata": { - "context": {"organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P"}, - "environment_id": "environment_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "key_id": "bf65e326-43a0-4b20-88c4-07ff3de5434c", - "updated_at": "2024-06-15T10:30:00.000Z", - "updated_by": { - "id": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "name": "My API Key", - }, - "version_id": "c3d4e5f6-7890-abcd-ef12-34567890abcd", - }, - "name": "my-secret", - "value": "s3cr3t-v4lu3", - } - instance = VaultObject.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["metadata"] == data["metadata"] - assert serialized["name"] == data["name"] - assert serialized["value"] == data["value"] - - def test_object_metadata_round_trip(self): - data = load_fixture("object_metadata.json") - instance = ObjectMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ObjectMetadata.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_object_metadata_minimal_payload(self): - data = { - "context": {"organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P"}, - "environment_id": "environment_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "key_id": "bf65e326-43a0-4b20-88c4-07ff3de5434c", - "updated_at": "2024-06-15T10:30:00.000Z", - "updated_by": { - "id": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "name": "My API Key", - }, - } - instance = ObjectMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["context"] == data["context"] - assert serialized["environment_id"] == data["environment_id"] - assert serialized["id"] == data["id"] - assert serialized["key_id"] == data["key_id"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["updated_by"] == data["updated_by"] - - def test_object_metadata_preserves_nullable_fields(self): - data = { - "context": {"organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P"}, - "environment_id": "environment_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "key_id": "bf65e326-43a0-4b20-88c4-07ff3de5434c", - "updated_at": "2024-06-15T10:30:00.000Z", - "updated_by": { - "id": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "name": "My API Key", - }, - "version_id": None, - } - instance = ObjectMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["version_id"] is None - - def test_object_summary_round_trip(self): - data = load_fixture("object_summary.json") - instance = ObjectSummary.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ObjectSummary.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_object_summary_minimal_payload(self): - data = {"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "name": "my-secret"} - instance = ObjectSummary.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - - def test_object_summary_preserves_nullable_fields(self): - data = { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "name": "my-secret", - "updated_at": None, - } - instance = ObjectSummary.from_dict(data) - serialized = instance.to_dict() - assert serialized["updated_at"] is None - - def test_object_version_round_trip(self): - data = load_fixture("object_version.json") - instance = ObjectVersion.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ObjectVersion.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_object_version_minimal_payload(self): - data = { - "created_at": "2024-06-15T10:30:00.000Z", - "current_version": True, - "etag": "d41d8cd98f00b204e9800998ecf8427e", - "id": "c3d4e5f6-7890-abcd-ef12-34567890abcd", - "size": 256, - } - instance = ObjectVersion.from_dict(data) - serialized = instance.to_dict() - assert serialized["created_at"] == data["created_at"] - assert serialized["current_version"] == data["current_version"] - assert serialized["etag"] == data["etag"] - assert serialized["id"] == data["id"] - assert serialized["size"] == data["size"] - - def test_object_without_value_round_trip(self): - data = load_fixture("object_without_value.json") - instance = ObjectWithoutValue.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ObjectWithoutValue.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_object_without_value_minimal_payload(self): - data = { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "metadata": { - "context": {"organization_id": "org_01K8ZYT4AWJ6XP0E0S8CTBHE3P"}, - "environment_id": "environment_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "key_id": "bf65e326-43a0-4b20-88c4-07ff3de5434c", - "updated_at": "2024-06-15T10:30:00.000Z", - "updated_by": { - "id": "key_01K8ZYT4AWJ6XP0E0S8CTBHE3P", - "name": "My API Key", - }, - "version_id": "c3d4e5f6-7890-abcd-ef12-34567890abcd", - }, - "name": "my-secret", - } - instance = ObjectWithoutValue.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["metadata"] == data["metadata"] - assert serialized["name"] == data["name"] - - def test_version_list_response_round_trip(self): - data = load_fixture("version_list_response.json") - instance = VersionListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VersionListResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_version_list_response_minimal_payload(self): - data = { - "data": [ - { - "created_at": "2024-06-15T10:30:00.000Z", - "current_version": True, - "etag": "d41d8cd98f00b204e9800998ecf8427e", - "id": "c3d4e5f6-7890-abcd-ef12-34567890abcd", - "size": 256, - } - ], - "list_metadata": { - "after": "b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e", - "before": "a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e", - }, - } - instance = VersionListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["data"] == data["data"] - assert serialized["list_metadata"] == data["list_metadata"] - - def test_external_auth_complete_response_round_trip(self): - data = load_fixture("external_auth_complete_response.json") - instance = ExternalAuthCompleteResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ExternalAuthCompleteResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_external_auth_complete_response_minimal_payload(self): - data = { - "redirect_uri": "https://your-authkit-domain.workos.com/oauth/authorize/complete?state=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdGF0ZSI6InJhbmRvbV9zdGF0ZV9zdHJpbmciLCJpYXQiOjE3NDI2MDQ4NTN9.abc123def456ghi789" - } - instance = ExternalAuthCompleteResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["redirect_uri"] == data["redirect_uri"] - - def test_api_key_round_trip(self): - data = load_fixture("api_key.json") - instance = ApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKey.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_api_key_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_api_key_validation_response_round_trip(self): - data = load_fixture("api_key_validation_response.json") - instance = ApiKeyValidationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyValidationResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_validation_response_minimal_payload(self): - data = {"api_key": None} - instance = ApiKeyValidationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["api_key"] == data["api_key"] - - def test_api_key_validation_response_preserves_nullable_fields(self): - data = {"api_key": None} - instance = ApiKeyValidationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["api_key"] is None - - def test_connect_application_oauth_round_trip(self): - data = load_fixture("connect_application_oauth.json") - instance = ConnectApplicationOAuth.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectApplicationOAuth.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connect_application_oauth_minimal_payload(self): - data = { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": None, - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "oauth", - "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], - "uses_pkce": True, - "is_first_party": True, - } - instance = ConnectApplicationOAuth.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["client_id"] == data["client_id"] - assert serialized["description"] == data["description"] - assert serialized["name"] == data["name"] - assert serialized["scopes"] == data["scopes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["application_type"] == data["application_type"] - assert serialized["redirect_uris"] == data["redirect_uris"] - assert serialized["uses_pkce"] == data["uses_pkce"] - assert serialized["is_first_party"] == data["is_first_party"] - - def test_connect_application_oauth_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": "An application for managing user access", - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "oauth", - "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], - "uses_pkce": True, - "is_first_party": True, - } - instance = ConnectApplicationOAuth.from_dict(data) - serialized = instance.to_dict() - assert "was_dynamically_registered" not in serialized - assert "organization_id" not in serialized - - def test_connect_application_oauth_preserves_nullable_fields(self): - data = { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": None, - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "oauth", - "redirect_uris": [{"uri": "https://example.com/callback", "default": True}], - "uses_pkce": True, - "is_first_party": True, - "was_dynamically_registered": True, - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - } - instance = ConnectApplicationOAuth.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_connect_application_oauth_redirect_uris_round_trip(self): - data = load_fixture("connect_application_oauth_redirect_uris.json") - instance = ConnectApplicationOAuthRedirectUris.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectApplicationOAuthRedirectUris.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connect_application_oauth_redirect_uris_minimal_payload(self): - data = {"uri": "https://example.com/callback", "default": True} - instance = ConnectApplicationOAuthRedirectUris.from_dict(data) - serialized = instance.to_dict() - assert serialized["uri"] == data["uri"] - assert serialized["default"] == data["default"] - - def test_connect_application_m2m_round_trip(self): - data = load_fixture("connect_application_m2m.json") - instance = ConnectApplicationM2M.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectApplicationM2M.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connect_application_m2m_minimal_payload(self): - data = { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": None, - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "m2m", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - } - instance = ConnectApplicationM2M.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["client_id"] == data["client_id"] - assert serialized["description"] == data["description"] - assert serialized["name"] == data["name"] - assert serialized["scopes"] == data["scopes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["application_type"] == data["application_type"] - assert serialized["organization_id"] == data["organization_id"] - - def test_connect_application_m2m_preserves_nullable_fields(self): - data = { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": None, - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "m2m", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - } - instance = ConnectApplicationM2M.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_new_connect_application_secret_round_trip(self): - data = load_fixture("new_connect_application_secret.json") - instance = NewConnectApplicationSecret.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = NewConnectApplicationSecret.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_new_connect_application_secret_minimal_payload(self): - data = { - "object": "connect_application_secret", - "id": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", - "secret_hint": "abc123", - "last_used_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "secret": "abc123def456ghi789jkl012mno345pqr678stu901vwx234yz", - } - instance = NewConnectApplicationSecret.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["secret_hint"] == data["secret_hint"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["secret"] == data["secret"] - - def test_new_connect_application_secret_preserves_nullable_fields(self): - data = { - "object": "connect_application_secret", - "id": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", - "secret_hint": "abc123", - "last_used_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "secret": "abc123def456ghi789jkl012mno345pqr678stu901vwx234yz", - } - instance = NewConnectApplicationSecret.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - - def test_audit_log_event_create_response_round_trip(self): - data = load_fixture("audit_log_event_create_response.json") - instance = AuditLogEventCreateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogEventCreateResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_event_create_response_minimal_payload(self): - data = {"success": True} - instance = AuditLogEventCreateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["success"] == data["success"] - - def test_audit_log_export_round_trip(self): - data = load_fixture("audit_log_export.json") - instance = AuditLogExport.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogExport.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_export_minimal_payload(self): - data = { - "object": "audit_log_export", - "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", - "state": "ready", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogExport.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["state"] == data["state"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_audit_log_export_preserves_nullable_fields(self): - data = { - "object": "audit_log_export", - "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", - "state": "ready", - "url": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogExport.from_dict(data) - serialized = instance.to_dict() - assert serialized["url"] is None - - def test_audit_log_export_round_trips_unknown_enum_values(self): - data = { - "object": "audit_log_export", - "id": "audit_log_export_01GBZK5MP7TD1YCFQHFR22180V", - "state": "unexpected_audit_log_export_state", - "url": "https://exports.audit-logs.com/audit-log-exports/export.csv", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogExport.from_dict(data) - assert instance.to_dict() == data - - def test_audit_logs_retention_round_trip(self): - data = load_fixture("audit_logs_retention.json") - instance = AuditLogsRetention.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogsRetention.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_logs_retention_minimal_payload(self): - data = {"retention_period_in_days": None} - instance = AuditLogsRetention.from_dict(data) - serialized = instance.to_dict() - assert ( - serialized["retention_period_in_days"] == data["retention_period_in_days"] - ) - - def test_audit_logs_retention_preserves_nullable_fields(self): - data = {"retention_period_in_days": None} - instance = AuditLogsRetention.from_dict(data) - serialized = instance.to_dict() - assert serialized["retention_period_in_days"] is None - - def test_audit_log_schema_round_trip(self): - data = load_fixture("audit_log_schema.json") - instance = AuditLogSchema.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogSchema.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_schema_minimal_payload(self): - data = { - "object": "audit_log_schema", - "version": 1, - "targets": [ - { - "type": "invoice", - "metadata": { - "type": "object", - "properties": {"cost": {"type": "number"}}, - }, - } - ], - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogSchema.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["version"] == data["version"] - assert serialized["targets"] == data["targets"] - assert serialized["created_at"] == data["created_at"] - - def test_audit_log_schema_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "audit_log_schema", - "version": 1, - "targets": [ - { - "type": "invoice", - "metadata": { - "type": "object", - "properties": {"cost": {"type": "number"}}, - }, - } - ], - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogSchema.from_dict(data) - serialized = instance.to_dict() - assert "actor" not in serialized - assert "metadata" not in serialized - - def test_audit_log_action_round_trip(self): - data = load_fixture("audit_log_action.json") - instance = AuditLogAction.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogAction.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_action_minimal_payload(self): - data = { - "object": "audit_log_action", - "name": "user.viewed_invoice", - "schema": { - "object": "audit_log_schema", - "version": 1, - "actor": { - "metadata": { - "type": "object", - "properties": {"role": {"type": "string"}}, - } - }, - "targets": [ - { - "type": "invoice", - "metadata": { - "type": "object", - "properties": {"cost": {"type": "number"}}, - }, - } - ], - "metadata": { - "type": "object", - "properties": {"transactionId": {"type": "string"}}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogAction.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["name"] == data["name"] - assert serialized["schema"] == data["schema"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authentication_challenge_round_trip(self): - data = load_fixture("authentication_challenge.json") - instance = AuthenticationChallenge.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationChallenge.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_challenge_minimal_payload(self): - data = { - "object": "authentication_challenge", - "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationChallenge.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert ( - serialized["authentication_factor_id"] == data["authentication_factor_id"] - ) - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authentication_challenge_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "authentication_challenge", - "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationChallenge.from_dict(data) - serialized = instance.to_dict() - assert "expires_at" not in serialized - assert "code" not in serialized - - def test_authentication_challenge_verify_response_round_trip(self): - data = load_fixture("authentication_challenge_verify_response.json") - instance = AuthenticationChallengeVerifyResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationChallengeVerifyResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_challenge_verify_response_minimal_payload(self): - data = { - "challenge": { - "object": "authentication_challenge", - "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "expires_at": "2026-01-15T12:00:00.000Z", - "code": "123456", - "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "valid": True, - } - instance = AuthenticationChallengeVerifyResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["challenge"] == data["challenge"] - assert serialized["valid"] == data["valid"] - - def test_authentication_factor_enrolled_round_trip(self): - data = load_fixture("authentication_factor_enrolled.json") - instance = AuthenticationFactorEnrolled.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactorEnrolled.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_enrolled_minimal_payload(self): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "totp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactorEnrolled.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authentication_factor_enrolled_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "totp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactorEnrolled.from_dict(data) - serialized = instance.to_dict() - assert "user_id" not in serialized - assert "sms" not in serialized - assert "totp" not in serialized - - def test_authentication_factor_enrolled_round_trips_unknown_enum_values(self): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "unexpected_authentication_factor_enrolled_type", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "sms": {"phone_number": "+15005550006"}, - "totp": { - "issuer": "WorkOS", - "user": "user@example.com", - "secret": "JBSWY3DPEHPK3PXP", - "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", - "uri": "otpauth://totp/WorkOS:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=WorkOS", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactorEnrolled.from_dict(data) - assert instance.to_dict() == data - - def test_authentication_factor_round_trip(self): - data = load_fixture("authentication_factor.json") - instance = AuthenticationFactor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_minimal_payload(self): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "totp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactor.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authentication_factor_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "totp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactor.from_dict(data) - serialized = instance.to_dict() - assert "user_id" not in serialized - assert "sms" not in serialized - assert "totp" not in serialized - - def test_authentication_factor_round_trips_unknown_enum_values(self): - data = { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "unexpected_authentication_factor_type", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "sms": {"phone_number": "+15005550006"}, - "totp": {"issuer": "WorkOS", "user": "user@example.com"}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationFactor.from_dict(data) - assert instance.to_dict() == data - - def test_authorization_check_round_trip(self): - data = load_fixture("authorization_check.json") - instance = AuthorizationCheck.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthorizationCheck.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authorization_check_minimal_payload(self): - data = {"authorized": True} - instance = AuthorizationCheck.from_dict(data) - serialized = instance.to_dict() - assert serialized["authorized"] == data["authorized"] - - def test_authorization_resource_round_trip(self): - data = load_fixture("authorization_resource.json") - instance = AuthorizationResource.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthorizationResource.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authorization_resource_minimal_payload(self): - data = { - "object": "authorization_resource", - "name": "Website Redesign", - "description": None, - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "parent_resource_id": None, - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthorizationResource.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["parent_resource_id"] == data["parent_resource_id"] - assert serialized["id"] == data["id"] - assert serialized["external_id"] == data["external_id"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authorization_resource_preserves_nullable_fields(self): - data = { - "object": "authorization_resource", - "name": "Website Redesign", - "description": None, - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "parent_resource_id": None, - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthorizationResource.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["parent_resource_id"] is None - - def test_authorization_permission_round_trip(self): - data = load_fixture("authorization_permission.json") - instance = AuthorizationPermission.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthorizationPermission.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authorization_permission_minimal_payload(self): - data = { - "object": "permission", - "id": "perm_01HXYZ123456789ABCDEFGHIJ", - "slug": "documents:read", - "name": "View Documents", - "description": None, - "system": False, - "resource_type_slug": "workspace", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthorizationPermission.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["system"] == data["system"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_authorization_permission_preserves_nullable_fields(self): - data = { - "object": "permission", - "id": "perm_01HXYZ123456789ABCDEFGHIJ", - "slug": "documents:read", - "name": "View Documents", - "description": None, - "system": False, - "resource_type_slug": "workspace", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthorizationPermission.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_slim_role_round_trip(self): - data = load_fixture("slim_role.json") - instance = SlimRole.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SlimRole.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_slim_role_minimal_payload(self): - data = {"slug": "admin"} - instance = SlimRole.from_dict(data) - serialized = instance.to_dict() - assert serialized["slug"] == data["slug"] - - def test_group_role_assignment_round_trip(self): - data = load_fixture("group_role_assignment.json") - instance = GroupRoleAssignment.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupRoleAssignment.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_role_assignment_minimal_payload(self): - data = { - "object": "group_role_assignment", - "id": "gra_01HXYZ123456789ABCDEFGH", - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "role": {"slug": "admin"}, - "resource": { - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupRoleAssignment.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["group_id"] == data["group_id"] - assert serialized["role"] == data["role"] - assert serialized["resource"] == data["resource"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_group_role_assignment_list_round_trip(self): - data = load_fixture("group_role_assignment_list.json") - instance = GroupRoleAssignmentList.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupRoleAssignmentList.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_role_assignment_list_minimal_payload(self): - data = { - "object": "list", - "data": [ - { - "object": "group_role_assignment", - "id": "gra_01HXYZ123456789ABCDEFGH", - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "role": {"slug": "admin"}, - "resource": { - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "list_metadata": { - "after": "b21f3a8c-7e4d-4b1a-9c5e-2d8f6a7b3c4e", - "before": "a10e2b7d-6c3f-4a2b-8d1e-3f9a5b8c7d6e", - }, - } - instance = GroupRoleAssignmentList.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["data"] == data["data"] - assert serialized["list_metadata"] == data["list_metadata"] - - def test_user_role_assignment_round_trip(self): - data = load_fixture("user_role_assignment.json") - instance = UserRoleAssignment.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserRoleAssignment.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_role_assignment_minimal_payload(self): - data = { - "object": "role_assignment", - "id": "role_assignment_01HXYZ123456789ABCDEFGH", - "organization_membership_id": "om_01HXYZ123456789ABCDEFGHIJ", - "role": {"slug": "admin"}, - "resource": { - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserRoleAssignment.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert ( - serialized["organization_membership_id"] - == data["organization_membership_id"] - ) - assert serialized["role"] == data["role"] - assert serialized["resource"] == data["resource"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_role_round_trip(self): - data = load_fixture("role.json") - instance = Role.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Role.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_minimal_payload(self): - data = { - "slug": "admin", - "object": "role", - "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", - "name": "Admin", - "description": None, - "type": "EnvironmentRole", - "resource_type_slug": "organization", - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Role.from_dict(data) - serialized = instance.to_dict() - assert serialized["slug"] == data["slug"] - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["type"] == data["type"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_role_preserves_nullable_fields(self): - data = { - "slug": "admin", - "object": "role", - "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", - "name": "Admin", - "description": None, - "type": "EnvironmentRole", - "resource_type_slug": "organization", - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Role.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_role_round_trips_unknown_enum_values(self): - data = { - "slug": "admin", - "object": "role", - "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", - "name": "Admin", - "description": "Can manage all resources", - "type": "unexpected_role_type", - "resource_type_slug": "organization", - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Role.from_dict(data) - assert instance.to_dict() == data - - def test_role_list_round_trip(self): - data = load_fixture("role_list.json") - instance = RoleList.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleList.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_list_minimal_payload(self): - data = { - "object": "list", - "data": [ - { - "slug": "admin", - "object": "role", - "id": "role_01EHQMYV6MBK39QC5PZXHY59C3", - "name": "Admin", - "description": "Can manage all resources", - "type": "EnvironmentRole", - "resource_type_slug": "organization", - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - } - instance = RoleList.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["data"] == data["data"] - - def test_user_round_trip(self): - data = load_fixture("user.json") - instance = User.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = User.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_minimal_payload(self): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": None, - "last_name": None, - "profile_picture_url": None, - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": None, - "last_sign_in_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = User.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - assert serialized["profile_picture_url"] == data["profile_picture_url"] - assert serialized["email"] == data["email"] - assert serialized["email_verified"] == data["email_verified"] - assert serialized["external_id"] == data["external_id"] - assert serialized["last_sign_in_at"] == data["last_sign_in_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_user_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = User.from_dict(data) - serialized = instance.to_dict() - assert "metadata" not in serialized - - def test_user_preserves_nullable_fields(self): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": None, - "last_name": None, - "name": None, - "profile_picture_url": None, - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": None, - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": None, - "locale": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = User.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["profile_picture_url"] is None - assert serialized["external_id"] is None - assert serialized["last_sign_in_at"] is None - assert serialized["locale"] is None - - def test_connection_round_trip(self): - data = load_fixture("connection.json") - instance = Connection.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Connection.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_minimal_payload(self): - data = { - "object": "connection", - "id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "name": "Foo Corp", - "state": "active", - "status": "linked", - "domains": [ - { - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "object": "connection_domain", - "domain": "foo-corp.com", - } - ], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Connection.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["connection_type"] == data["connection_type"] - assert serialized["name"] == data["name"] - assert serialized["state"] == data["state"] - assert serialized["status"] == data["status"] - assert serialized["domains"] == data["domains"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_connection_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "connection", - "id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "name": "Foo Corp", - "state": "active", - "status": "linked", - "domains": [ - { - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "object": "connection_domain", - "domain": "foo-corp.com", - } - ], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Connection.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - assert "options" not in serialized - - def test_connection_round_trips_unknown_enum_values(self): - data = { - "object": "connection", - "id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_type": "unexpected_connection_connection_type", - "name": "Foo Corp", - "state": "active", - "status": "linked", - "domains": [ - { - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "object": "connection_domain", - "domain": "foo-corp.com", - } - ], - "options": {"signing_cert": None}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Connection.from_dict(data) - assert instance.to_dict() == data - - def test_cors_origin_response_round_trip(self): - data = load_fixture("cors_origin_response.json") - instance = CORSOriginResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = CORSOriginResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_cors_origin_response_minimal_payload(self): - data = { - "object": "cors_origin", - "id": "cors_origin_01HXYZ123456789ABCDEFGHIJ", - "origin": "https://example.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = CORSOriginResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["origin"] == data["origin"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_directory_round_trip(self): - data = load_fixture("directory.json") - instance = Directory.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Directory.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_minimal_payload(self): - data = { - "object": "directory", - "id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "external_key": "sPa12dwRQ", - "type": "gsuite directory", - "state": "linked", - "name": "Foo Corp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Directory.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["external_key"] == data["external_key"] - assert serialized["type"] == data["type"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_directory_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory", - "id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "external_key": "sPa12dwRQ", - "type": "gsuite directory", - "state": "linked", - "name": "Foo Corp", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Directory.from_dict(data) - serialized = instance.to_dict() - assert "domain" not in serialized - assert "metadata" not in serialized - - def test_directory_round_trips_unknown_enum_values(self): - data = { - "object": "directory", - "id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "external_key": "sPa12dwRQ", - "type": "unexpected_directory_type", - "state": "linked", - "name": "Foo Corp", - "domain": "foo-corp.com", - "metadata": {"users": {"active": 42, "inactive": 3}, "groups": 5}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Directory.from_dict(data) - assert instance.to_dict() == data - - def test_directory_group_round_trip(self): - data = load_fixture("directory_group.json") - instance = DirectoryGroup.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryGroup.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_group_minimal_payload(self): - data = { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryGroup.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["name"] == data["name"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_directory_group_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryGroup.from_dict(data) - serialized = instance.to_dict() - assert "raw_attributes" not in serialized - - def test_directory_user_with_groups_round_trip(self): - data = load_fixture("directory_user_with_groups.json") - instance = DirectoryUserWithGroups.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryUserWithGroups.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_user_with_groups_minimal_payload(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "groups": [ - { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - } - instance = DirectoryUserWithGroups.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["raw_attributes"] == data["raw_attributes"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["groups"] == data["groups"] - - def test_directory_user_with_groups_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "groups": [ - { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - } - instance = DirectoryUserWithGroups.from_dict(data) - serialized = instance.to_dict() - assert "emails" not in serialized - assert "role" not in serialized - assert "roles" not in serialized - - def test_directory_user_with_groups_preserves_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "first_name": None, - "last_name": None, - "name": None, - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": None, - "username": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "groups": [ - { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - } - instance = DirectoryUserWithGroups.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] is None - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["job_title"] is None - assert serialized["username"] is None - - def test_directory_user_with_groups_round_trips_unknown_enum_values(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "unexpected_directory_user_with_groups_state", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "groups": [ - { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - } - instance = DirectoryUserWithGroups.from_dict(data) - assert instance.to_dict() == data - - def test_group_round_trip(self): - data = load_fixture("group.json") - instance = Group.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Group.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_minimal_payload(self): - data = { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Group.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_group_preserves_nullable_fields(self): - data = { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Group.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_event_context_actor_round_trip(self): - data = load_fixture("event_context_actor.json") - instance = EventContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EventContextActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_event_context_actor_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = EventContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["source"] == data["source"] - assert serialized["name"] == data["name"] - - def test_event_context_actor_preserves_nullable_fields(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = EventContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] is None - - def test_event_context_actor_round_trips_unknown_enum_values(self): - data = { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "unexpected_event_context_actor_source", - "name": "Jane Doe", - } - instance = EventContextActor.from_dict(data) - assert instance.to_dict() == data - - def test_event_context_round_trip(self): - data = load_fixture("event_context.json") - instance = EventContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EventContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_event_context_minimal_payload(self): - data = {} - instance = EventContext.from_dict(data) - assert instance.to_dict() is not None - - def test_event_context_omits_absent_optional_non_nullable_fields(self): - data = {} - instance = EventContext.from_dict(data) - serialized = instance.to_dict() - assert "google_analytics_client_id" not in serialized - assert "google_analytics_sessions" not in serialized - assert "ajs_anonymous_id" not in serialized - assert "client_id" not in serialized - assert "actor" not in serialized - assert "previous_attributes" not in serialized - - def test_directory_user_round_trip(self): - data = load_fixture("directory_user.json") - instance = DirectoryUser.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryUser.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_user_minimal_payload(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["raw_attributes"] == data["raw_attributes"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_directory_user_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryUser.from_dict(data) - serialized = instance.to_dict() - assert "emails" not in serialized - assert "role" not in serialized - assert "roles" not in serialized - - def test_directory_user_preserves_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "first_name": None, - "last_name": None, - "name": None, - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": None, - "username": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] is None - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["job_title"] is None - assert serialized["username"] is None - - def test_directory_user_round_trips_unknown_enum_values(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "unexpected_directory_user_state", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DirectoryUser.from_dict(data) - assert instance.to_dict() == data - - def test_pipe_connected_account_round_trip(self): - data = load_fixture("pipe_connected_account.json") - instance = PipeConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PipeConnectedAccount.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_pipe_connected_account_minimal_payload(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PipeConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["data_integration_id"] == data["data_integration_id"] - assert serialized["provider_slug"] == data["provider_slug"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["scopes"] == data["scopes"] - assert serialized["state"] == data["state"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_pipe_connected_account_preserves_nullable_fields(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PipeConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["user_id"] is None - assert serialized["organization_id"] is None - - def test_pipe_connected_account_round_trips_unknown_enum_values(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "unexpected_pipe_connected_account_state", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PipeConnectedAccount.from_dict(data) - assert instance.to_dict() == data - - def test_waitlist_user_round_trip(self): - data = load_fixture("waitlist_user.json") - instance = WaitlistUser.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WaitlistUser.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_waitlist_user_minimal_payload(self): - data = { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["approved_at"] == data["approved_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_waitlist_user_preserves_nullable_fields(self): - data = { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["approved_at"] is None - - def test_waitlist_user_round_trips_unknown_enum_values(self): - data = { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_waitlist_user_state", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUser.from_dict(data) - assert instance.to_dict() == data - - def test_action_authentication_denied_round_trip(self): - data = load_fixture("action_authentication_denied.json") - instance = ActionAuthenticationDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ActionAuthenticationDenied.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_action_authentication_denied_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "action.authentication.denied", - "data": { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "authentication", - "verdict": "Deny", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - "ip_address": "203.0.113.1", - "user_agent": "Mozilla/5.0", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ActionAuthenticationDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_action_authentication_denied_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "action.authentication.denied", - "data": { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "authentication", - "verdict": "Deny", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - "ip_address": "203.0.113.1", - "user_agent": "Mozilla/5.0", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ActionAuthenticationDenied.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_action_authentication_denied_data_round_trip(self): - data = load_fixture("action_authentication_denied_data.json") - instance = ActionAuthenticationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ActionAuthenticationDeniedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_action_authentication_denied_data_minimal_payload(self): - data = { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "authentication", - "verdict": "Deny", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": None, - "email": "user@example.com", - "ip_address": None, - "user_agent": None, - } - instance = ActionAuthenticationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["action_endpoint_id"] == data["action_endpoint_id"] - assert serialized["action_execution_id"] == data["action_execution_id"] - assert serialized["type"] == data["type"] - assert serialized["verdict"] == data["verdict"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["email"] == data["email"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - - def test_action_authentication_denied_data_preserves_nullable_fields(self): - data = { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "authentication", - "verdict": "Deny", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": None, - "email": "user@example.com", - "ip_address": None, - "user_agent": None, - } - instance = ActionAuthenticationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_action_user_registration_denied_round_trip(self): - data = load_fixture("action_user_registration_denied.json") - instance = ActionUserRegistrationDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ActionUserRegistrationDenied.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_action_user_registration_denied_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "action.user_registration.denied", - "data": { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "user_registration", - "verdict": "Deny", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - "ip_address": "203.0.113.1", - "user_agent": "Mozilla/5.0", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ActionUserRegistrationDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_action_user_registration_denied_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "action.user_registration.denied", - "data": { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "user_registration", - "verdict": "Deny", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - "ip_address": "203.0.113.1", - "user_agent": "Mozilla/5.0", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ActionUserRegistrationDenied.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_action_user_registration_denied_data_round_trip(self): - data = load_fixture("action_user_registration_denied_data.json") - instance = ActionUserRegistrationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ActionUserRegistrationDeniedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_action_user_registration_denied_data_minimal_payload(self): - data = { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "user_registration", - "verdict": "Deny", - "organization_id": None, - "email": "user@example.com", - "ip_address": None, - "user_agent": None, - } - instance = ActionUserRegistrationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["action_endpoint_id"] == data["action_endpoint_id"] - assert serialized["action_execution_id"] == data["action_execution_id"] - assert serialized["type"] == data["type"] - assert serialized["verdict"] == data["verdict"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["email"] == data["email"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - - def test_action_user_registration_denied_data_preserves_nullable_fields(self): - data = { - "action_endpoint_id": "action_endpoint_01EHWNCE74X7JSDV0X3SZ3KJNY", - "action_execution_id": "action_execution_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "user_registration", - "verdict": "Deny", - "organization_id": None, - "email": "user@example.com", - "ip_address": None, - "user_agent": None, - } - instance = ActionUserRegistrationDeniedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_api_key_created_round_trip(self): - data = load_fixture("api_key_created.json") - instance = ApiKeyCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.created", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_api_key_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.created", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_api_key_created_data_round_trip(self): - data = load_fixture("api_key_created_data.json") - instance = ApiKeyCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_created_data_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_api_key_created_data_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_api_key_created_data_owner_round_trip(self): - data = load_fixture("api_key_created_data_owner.json") - instance = ApiKeyCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyCreatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_created_data_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ApiKeyCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_user_api_key_created_data_owner_round_trip(self): - data = load_fixture("user_api_key_created_data_owner.json") - instance = UserApiKeyCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyCreatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_created_data_owner_minimal_payload(self): - data = { - "type": "user", - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = UserApiKeyCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - - def test_api_key_revoked_round_trip(self): - data = load_fixture("api_key_revoked.json") - instance = ApiKeyRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyRevoked.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_revoked_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.revoked", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_api_key_revoked_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.revoked", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyRevoked.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_api_key_revoked_data_round_trip(self): - data = load_fixture("api_key_revoked_data.json") - instance = ApiKeyRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyRevokedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_revoked_data_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_api_key_revoked_data_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_api_key_revoked_data_owner_round_trip(self): - data = load_fixture("api_key_revoked_data_owner.json") - instance = ApiKeyRevokedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyRevokedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_revoked_data_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ApiKeyRevokedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_user_api_key_revoked_data_owner_round_trip(self): - data = load_fixture("user_api_key_revoked_data_owner.json") - instance = UserApiKeyRevokedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyRevokedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_revoked_data_owner_minimal_payload(self): - data = { - "type": "user", - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = UserApiKeyRevokedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - - def test_api_key_updated_round_trip(self): - data = load_fixture("api_key_updated.json") - instance = ApiKeyUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.updated", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"expires_at": None}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_api_key_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "api_key.updated", - "data": { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": { - "type": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": "2026-01-15T12:00:00.000Z", - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"expires_at": None}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ApiKeyUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_api_key_updated_data_round_trip(self): - data = load_fixture("api_key_updated_data.json") - instance = ApiKeyUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_updated_data_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"expires_at": None}, - } - instance = ApiKeyUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["previous_attributes"] == data["previous_attributes"] - - def test_api_key_updated_data_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "owner": {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"}, - "name": "My API Key", - "obfuscated_value": "sk_test_...1234", - "last_used_at": None, - "expires_at": None, - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"expires_at": None}, - } - instance = ApiKeyUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_api_key_updated_data_owner_round_trip(self): - data = load_fixture("api_key_updated_data_owner.json") - instance = ApiKeyUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyUpdatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_updated_data_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ApiKeyUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_user_api_key_updated_data_owner_round_trip(self): - data = load_fixture("user_api_key_updated_data_owner.json") - instance = UserApiKeyUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyUpdatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_updated_data_owner_minimal_payload(self): - data = { - "type": "user", - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = UserApiKeyUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - - def test_api_key_updated_data_previous_attribute_round_trip(self): - data = load_fixture("api_key_updated_data_previous_attribute.json") - instance = ApiKeyUpdatedDataPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyUpdatedDataPreviousAttribute.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_updated_data_previous_attribute_minimal_payload(self): - data = {"expires_at": None} - instance = ApiKeyUpdatedDataPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert serialized["expires_at"] == data["expires_at"] - - def test_api_key_updated_data_previous_attribute_preserves_nullable_fields(self): - data = {"expires_at": None} - instance = ApiKeyUpdatedDataPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert serialized["expires_at"] is None - - def test_authentication_email_verification_failed_round_trip(self): - data = load_fixture("authentication_email_verification_failed.json") - instance = AuthenticationEmailVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationEmailVerificationFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_email_verification_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.email_verification_failed", - "data": { - "type": "email_verification", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationEmailVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_email_verification_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.email_verification_failed", - "data": { - "type": "email_verification", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationEmailVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_email_verification_failed_data_round_trip(self): - data = load_fixture("authentication_email_verification_failed_data.json") - instance = AuthenticationEmailVerificationFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationEmailVerificationFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_email_verification_failed_data_minimal_payload(self): - data = { - "type": "email_verification", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationEmailVerificationFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_email_verification_failed_data_preserves_nullable_fields( - self, - ): - data = { - "type": "email_verification", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationEmailVerificationFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_email_verification_failed_data_error_round_trip(self): - data = load_fixture("authentication_email_verification_failed_data_error.json") - instance = AuthenticationEmailVerificationFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationEmailVerificationFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_email_verification_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationEmailVerificationFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_email_verification_succeeded_round_trip(self): - data = load_fixture("authentication_email_verification_succeeded.json") - instance = AuthenticationEmailVerificationSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationEmailVerificationSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_email_verification_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.email_verification_succeeded", - "data": { - "type": "email_verification", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationEmailVerificationSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_email_verification_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.email_verification_succeeded", - "data": { - "type": "email_verification", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationEmailVerificationSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_email_verification_succeeded_data_round_trip(self): - data = load_fixture("authentication_email_verification_succeeded_data.json") - instance = AuthenticationEmailVerificationSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationEmailVerificationSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_email_verification_succeeded_data_minimal_payload(self): - data = { - "type": "email_verification", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationEmailVerificationSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_email_verification_succeeded_data_preserves_nullable_fields( - self, - ): - data = { - "type": "email_verification", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationEmailVerificationSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_magic_auth_failed_round_trip(self): - data = load_fixture("authentication_magic_auth_failed.json") - instance = AuthenticationMagicAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMagicAuthFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_magic_auth_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.magic_auth_failed", - "data": { - "type": "magic_auth", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMagicAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_magic_auth_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.magic_auth_failed", - "data": { - "type": "magic_auth", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMagicAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_magic_auth_failed_data_round_trip(self): - data = load_fixture("authentication_magic_auth_failed_data.json") - instance = AuthenticationMagicAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMagicAuthFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_magic_auth_failed_data_minimal_payload(self): - data = { - "type": "magic_auth", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationMagicAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_magic_auth_failed_data_preserves_nullable_fields(self): - data = { - "type": "magic_auth", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationMagicAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_magic_auth_failed_data_error_round_trip(self): - data = load_fixture("authentication_magic_auth_failed_data_error.json") - instance = AuthenticationMagicAuthFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMagicAuthFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_magic_auth_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationMagicAuthFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_magic_auth_succeeded_round_trip(self): - data = load_fixture("authentication_magic_auth_succeeded.json") - instance = AuthenticationMagicAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMagicAuthSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_magic_auth_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.magic_auth_succeeded", - "data": { - "type": "magic_auth", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMagicAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_magic_auth_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.magic_auth_succeeded", - "data": { - "type": "magic_auth", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMagicAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_magic_auth_succeeded_data_round_trip(self): - data = load_fixture("authentication_magic_auth_succeeded_data.json") - instance = AuthenticationMagicAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMagicAuthSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_magic_auth_succeeded_data_minimal_payload(self): - data = { - "type": "magic_auth", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationMagicAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_magic_auth_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "magic_auth", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationMagicAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_mfa_failed_round_trip(self): - data = load_fixture("authentication_mfa_failed.json") - instance = AuthenticationMFAFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMFAFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_mfa_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.mfa_failed", - "data": { - "type": "mfa", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMFAFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_mfa_failed_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.mfa_failed", - "data": { - "type": "mfa", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMFAFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_mfa_failed_data_round_trip(self): - data = load_fixture("authentication_mfa_failed_data.json") - instance = AuthenticationMFAFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMFAFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_mfa_failed_data_minimal_payload(self): - data = { - "type": "mfa", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationMFAFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_mfa_failed_data_preserves_nullable_fields(self): - data = { - "type": "mfa", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationMFAFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_mfa_failed_data_error_round_trip(self): - data = load_fixture("authentication_mfa_failed_data_error.json") - instance = AuthenticationMFAFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMFAFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_mfa_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationMFAFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_mfa_succeeded_round_trip(self): - data = load_fixture("authentication_mfa_succeeded.json") - instance = AuthenticationMFASucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMFASucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_mfa_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.mfa_succeeded", - "data": { - "type": "mfa", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMFASucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_mfa_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.mfa_succeeded", - "data": { - "type": "mfa", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationMFASucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_mfa_succeeded_data_round_trip(self): - data = load_fixture("authentication_mfa_succeeded_data.json") - instance = AuthenticationMFASucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationMFASucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_mfa_succeeded_data_minimal_payload(self): - data = { - "type": "mfa", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationMFASucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_mfa_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "mfa", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationMFASucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_oauth_failed_round_trip(self): - data = load_fixture("authentication_oauth_failed.json") - instance = AuthenticationOAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationOAuthFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_oauth_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.oauth_failed", - "data": { - "type": "oauth", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationOAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_oauth_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.oauth_failed", - "data": { - "type": "oauth", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationOAuthFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_oauth_failed_data_round_trip(self): - data = load_fixture("authentication_oauth_failed_data.json") - instance = AuthenticationOAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationOAuthFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_oauth_failed_data_minimal_payload(self): - data = { - "type": "oauth", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationOAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_oauth_failed_data_preserves_nullable_fields(self): - data = { - "type": "oauth", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationOAuthFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_oauth_failed_data_error_round_trip(self): - data = load_fixture("authentication_oauth_failed_data_error.json") - instance = AuthenticationOAuthFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationOAuthFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_oauth_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationOAuthFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_oauth_succeeded_round_trip(self): - data = load_fixture("authentication_oauth_succeeded.json") - instance = AuthenticationOAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationOAuthSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_oauth_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.oauth_succeeded", - "data": { - "type": "oauth", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationOAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_oauth_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.oauth_succeeded", - "data": { - "type": "oauth", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationOAuthSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_oauth_succeeded_data_round_trip(self): - data = load_fixture("authentication_oauth_succeeded_data.json") - instance = AuthenticationOAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationOAuthSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_oauth_succeeded_data_minimal_payload(self): - data = { - "type": "oauth", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": "user@example.com", - } - instance = AuthenticationOAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_oauth_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "oauth", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": "user@example.com", - } - instance = AuthenticationOAuthSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - - def test_authentication_passkey_failed_round_trip(self): - data = load_fixture("authentication_passkey_failed.json") - instance = AuthenticationPasskeyFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasskeyFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_passkey_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.passkey_failed", - "data": { - "type": "passkey", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasskeyFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_passkey_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.passkey_failed", - "data": { - "type": "passkey", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasskeyFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_passkey_failed_data_round_trip(self): - data = load_fixture("authentication_passkey_failed_data.json") - instance = AuthenticationPasskeyFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasskeyFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_passkey_failed_data_minimal_payload(self): - data = { - "type": "passkey", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationPasskeyFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_passkey_failed_data_preserves_nullable_fields(self): - data = { - "type": "passkey", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationPasskeyFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_passkey_failed_data_error_round_trip(self): - data = load_fixture("authentication_passkey_failed_data_error.json") - instance = AuthenticationPasskeyFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasskeyFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_passkey_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationPasskeyFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_passkey_succeeded_round_trip(self): - data = load_fixture("authentication_passkey_succeeded.json") - instance = AuthenticationPasskeySucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasskeySucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_passkey_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.passkey_succeeded", - "data": { - "type": "passkey", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasskeySucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_passkey_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.passkey_succeeded", - "data": { - "type": "passkey", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasskeySucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_passkey_succeeded_data_round_trip(self): - data = load_fixture("authentication_passkey_succeeded_data.json") - instance = AuthenticationPasskeySucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasskeySucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_passkey_succeeded_data_minimal_payload(self): - data = { - "type": "passkey", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationPasskeySucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_passkey_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "passkey", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationPasskeySucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_password_failed_round_trip(self): - data = load_fixture("authentication_password_failed.json") - instance = AuthenticationPasswordFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasswordFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_password_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.password_failed", - "data": { - "type": "password", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasswordFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_password_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.password_failed", - "data": { - "type": "password", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasswordFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_password_failed_data_round_trip(self): - data = load_fixture("authentication_password_failed_data.json") - instance = AuthenticationPasswordFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasswordFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_password_failed_data_minimal_payload(self): - data = { - "type": "password", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationPasswordFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["error"] == data["error"] - - def test_authentication_password_failed_data_preserves_nullable_fields(self): - data = { - "type": "password", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationPasswordFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_password_failed_data_error_round_trip(self): - data = load_fixture("authentication_password_failed_data_error.json") - instance = AuthenticationPasswordFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasswordFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_password_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationPasswordFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_password_succeeded_round_trip(self): - data = load_fixture("authentication_password_succeeded.json") - instance = AuthenticationPasswordSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasswordSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_password_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.password_succeeded", - "data": { - "type": "password", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasswordSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_password_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.password_succeeded", - "data": { - "type": "password", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationPasswordSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_password_succeeded_data_round_trip(self): - data = load_fixture("authentication_password_succeeded_data.json") - instance = AuthenticationPasswordSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationPasswordSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_password_succeeded_data_minimal_payload(self): - data = { - "type": "password", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationPasswordSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_password_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "password", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationPasswordSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_radar_risk_detected_round_trip(self): - data = load_fixture("authentication_radar_risk_detected.json") - instance = AuthenticationRadarRiskDetected.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationRadarRiskDetected.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_radar_risk_detected_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.radar_risk_detected", - "data": { - "auth_method": "password", - "action": "signup", - "control": "block", - "blocklist_type": "ip", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationRadarRiskDetected.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_radar_risk_detected_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.radar_risk_detected", - "data": { - "auth_method": "password", - "action": "signup", - "control": "block", - "blocklist_type": "ip", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationRadarRiskDetected.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_radar_risk_detected_data_round_trip(self): - data = load_fixture("authentication_radar_risk_detected_data.json") - instance = AuthenticationRadarRiskDetectedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationRadarRiskDetectedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_radar_risk_detected_data_minimal_payload(self): - data = { - "auth_method": "password", - "action": "signup", - "control": None, - "blocklist_type": None, - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationRadarRiskDetectedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["auth_method"] == data["auth_method"] - assert serialized["action"] == data["action"] - assert serialized["control"] == data["control"] - assert serialized["blocklist_type"] == data["blocklist_type"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - - def test_authentication_radar_risk_detected_data_preserves_nullable_fields(self): - data = { - "auth_method": "password", - "action": "signup", - "control": None, - "blocklist_type": None, - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationRadarRiskDetectedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["control"] is None - assert serialized["blocklist_type"] is None - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - - def test_authentication_radar_risk_detected_data_round_trips_unknown_enum_values( - self, - ): - data = { - "auth_method": "password", - "action": "unexpected_authentication_radar_risk_detected_data_action", - "control": "block", - "blocklist_type": "ip", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - } - instance = AuthenticationRadarRiskDetectedData.from_dict(data) - assert instance.to_dict() == data - - def test_authentication_sso_failed_round_trip(self): - data = load_fixture("authentication_sso_failed.json") - instance = AuthenticationSSOFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_failed", - "data": { - "type": "sso", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_sso_failed_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_failed", - "data": { - "type": "sso", - "status": "failed", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_sso_failed_data_round_trip(self): - data = load_fixture("authentication_sso_failed_data.json") - instance = AuthenticationSSOFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_failed_data_minimal_payload(self): - data = { - "type": "sso", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationSSOFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["sso"] == data["sso"] - assert serialized["error"] == data["error"] - - def test_authentication_sso_failed_data_preserves_nullable_fields(self): - data = { - "type": "sso", - "status": "failed", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationSSOFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_sso_failed_data_sso_round_trip(self): - data = load_fixture("authentication_sso_failed_data_sso.json") - instance = AuthenticationSSOFailedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOFailedDataSSO.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_failed_data_sso_minimal_payload(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOFailedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["connection_id"] == data["connection_id"] - assert serialized["session_id"] == data["session_id"] - - def test_authentication_sso_failed_data_sso_preserves_nullable_fields(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOFailedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["connection_id"] is None - assert serialized["session_id"] is None - - def test_authentication_sso_failed_data_error_round_trip(self): - data = load_fixture("authentication_sso_failed_data_error.json") - instance = AuthenticationSSOFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOFailedDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_failed_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationSSOFailedDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_authentication_sso_started_round_trip(self): - data = load_fixture("authentication_sso_started.json") - instance = AuthenticationSSOStarted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOStarted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_started_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_started", - "data": { - "type": "sso", - "status": "started", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOStarted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_sso_started_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_started", - "data": { - "type": "sso", - "status": "started", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOStarted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_sso_started_data_round_trip(self): - data = load_fixture("authentication_sso_started_data.json") - instance = AuthenticationSSOStartedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOStartedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_started_data_minimal_payload(self): - data = { - "type": "sso", - "status": "started", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - } - instance = AuthenticationSSOStartedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["sso"] == data["sso"] - - def test_authentication_sso_started_data_preserves_nullable_fields(self): - data = { - "type": "sso", - "status": "started", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - } - instance = AuthenticationSSOStartedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_sso_started_data_sso_round_trip(self): - data = load_fixture("authentication_sso_started_data_sso.json") - instance = AuthenticationSSOStartedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOStartedDataSSO.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_started_data_sso_minimal_payload(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOStartedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["connection_id"] == data["connection_id"] - assert serialized["session_id"] == data["session_id"] - - def test_authentication_sso_started_data_sso_preserves_nullable_fields(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOStartedDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["connection_id"] is None - assert serialized["session_id"] is None - - def test_authentication_sso_succeeded_round_trip(self): - data = load_fixture("authentication_sso_succeeded.json") - instance = AuthenticationSSOSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_succeeded", - "data": { - "type": "sso", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_sso_succeeded_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_succeeded", - "data": { - "type": "sso", - "status": "succeeded", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_sso_succeeded_data_round_trip(self): - data = load_fixture("authentication_sso_succeeded_data.json") - instance = AuthenticationSSOSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_succeeded_data_minimal_payload(self): - data = { - "type": "sso", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - } - instance = AuthenticationSSOSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["sso"] == data["sso"] - - def test_authentication_sso_succeeded_data_preserves_nullable_fields(self): - data = { - "type": "sso", - "status": "succeeded", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - } - instance = AuthenticationSSOSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - - def test_authentication_sso_succeeded_data_sso_round_trip(self): - data = load_fixture("authentication_sso_succeeded_data_sso.json") - instance = AuthenticationSSOSucceededDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOSucceededDataSSO.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_succeeded_data_sso_minimal_payload(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOSucceededDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["connection_id"] == data["connection_id"] - assert serialized["session_id"] == data["session_id"] - - def test_authentication_sso_succeeded_data_sso_preserves_nullable_fields(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOSucceededDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["connection_id"] is None - assert serialized["session_id"] is None - - def test_authentication_sso_timed_out_round_trip(self): - data = load_fixture("authentication_sso_timed_out.json") - instance = AuthenticationSSOTimedOut.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOTimedOut.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_timed_out_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_timed_out", - "data": { - "type": "sso", - "status": "timed_out", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOTimedOut.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_authentication_sso_timed_out_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "authentication.sso_timed_out", - "data": { - "type": "sso", - "status": "timed_out", - "ip_address": "203.0.113.42", - "user_agent": "Mozilla/5.0", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "user@example.com", - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuthenticationSSOTimedOut.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_authentication_sso_timed_out_data_round_trip(self): - data = load_fixture("authentication_sso_timed_out_data.json") - instance = AuthenticationSSOTimedOutData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOTimedOutData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_timed_out_data_minimal_payload(self): - data = { - "type": "sso", - "status": "timed_out", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationSSOTimedOutData.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["status"] == data["status"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["sso"] == data["sso"] - assert serialized["error"] == data["error"] - - def test_authentication_sso_timed_out_data_preserves_nullable_fields(self): - data = { - "type": "sso", - "status": "timed_out", - "ip_address": None, - "user_agent": None, - "user_id": None, - "email": None, - "sso": { - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "session_id": "sess_01E4ZCR3C56J083X43JQXF3JK5", - }, - "error": { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - }, - } - instance = AuthenticationSSOTimedOutData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["user_id"] is None - assert serialized["email"] is None - - def test_authentication_sso_timed_out_data_sso_round_trip(self): - data = load_fixture("authentication_sso_timed_out_data_sso.json") - instance = AuthenticationSSOTimedOutDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOTimedOutDataSSO.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_timed_out_data_sso_minimal_payload(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOTimedOutDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["connection_id"] == data["connection_id"] - assert serialized["session_id"] == data["session_id"] - - def test_authentication_sso_timed_out_data_sso_preserves_nullable_fields(self): - data = {"organization_id": None, "connection_id": None, "session_id": None} - instance = AuthenticationSSOTimedOutDataSSO.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["connection_id"] is None - assert serialized["session_id"] is None - - def test_authentication_sso_timed_out_data_error_round_trip(self): - data = load_fixture("authentication_sso_timed_out_data_error.json") - instance = AuthenticationSSOTimedOutDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationSSOTimedOutDataError.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_sso_timed_out_data_error_minimal_payload(self): - data = { - "code": "mfa_challenge_failed", - "message": "The MFA challenge has failed.", - } - instance = AuthenticationSSOTimedOutDataError.from_dict(data) - serialized = instance.to_dict() - assert serialized["code"] == data["code"] - assert serialized["message"] == data["message"] - - def test_connection_activated_round_trip(self): - data = load_fixture("connection_activated.json") - instance = ConnectionActivated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionActivated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_activated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.activated", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionActivated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_connection_activated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.activated", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionActivated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_connection_activated_data_round_trip(self): - data = load_fixture("connection_activated_data.json") - instance = ConnectionActivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionActivatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_activated_data_minimal_payload(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionActivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["connection_type"] == data["connection_type"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["external_key"] == data["external_key"] - assert serialized["status"] == data["status"] - assert serialized["domains"] == data["domains"] - - def test_connection_activated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionActivatedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_connection_activated_data_round_trips_unknown_enum_values(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "unexpected_connection_activated_data_state", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionActivatedData.from_dict(data) - assert instance.to_dict() == data - - def test_connection_activated_data_domain_round_trip(self): - data = load_fixture("connection_activated_data_domain.json") - instance = ConnectionActivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionActivatedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_activated_data_domain_minimal_payload(self): - data = { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - instance = ConnectionActivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["domain"] == data["domain"] - - def test_connection_deactivated_round_trip(self): - data = load_fixture("connection_deactivated.json") - instance = ConnectionDeactivated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDeactivated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_deactivated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.deactivated", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeactivated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_connection_deactivated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.deactivated", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeactivated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_connection_deactivated_data_round_trip(self): - data = load_fixture("connection_deactivated_data.json") - instance = ConnectionDeactivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDeactivatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_deactivated_data_minimal_payload(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionDeactivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["connection_type"] == data["connection_type"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["external_key"] == data["external_key"] - assert serialized["status"] == data["status"] - assert serialized["domains"] == data["domains"] - - def test_connection_deactivated_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionDeactivatedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_connection_deactivated_data_round_trips_unknown_enum_values(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "unexpected_connection_deactivated_data_state", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "linked", - "domains": [ - { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = ConnectionDeactivatedData.from_dict(data) - assert instance.to_dict() == data - - def test_connection_deactivated_data_domain_round_trip(self): - data = load_fixture("connection_deactivated_data_domain.json") - instance = ConnectionDeactivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDeactivatedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_deactivated_data_domain_minimal_payload(self): - data = { - "object": "connection_domain", - "id": "conn_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - instance = ConnectionDeactivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["domain"] == data["domain"] - - def test_connection_deleted_round_trip(self): - data = load_fixture("connection_deleted.json") - instance = ConnectionDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.deleted", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_connection_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.deleted", - "data": { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_connection_deleted_data_round_trip(self): - data = load_fixture("connection_deleted_data.json") - instance = ConnectionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_deleted_data_minimal_payload(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["connection_type"] == data["connection_type"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_connection_deleted_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "active", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_connection_deleted_data_round_trips_unknown_enum_values(self): - data = { - "object": "connection", - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "state": "unexpected_connection_deleted_data_state", - "name": "Acme SSO", - "connection_type": "OktaSAML", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_connection_saml_certificate_renewal_required_round_trip(self): - data = load_fixture("connection_saml_certificate_renewal_required.json") - instance = ConnectionSAMLCertificateRenewalRequired.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewalRequired.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewal_required_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.saml_certificate_renewal_required", - "data": { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - "is_expired": False, - }, - "days_until_expiry": 30, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewalRequired.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_connection_saml_certificate_renewal_required_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.saml_certificate_renewal_required", - "data": { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - "is_expired": False, - }, - "days_until_expiry": 30, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewalRequired.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_connection_saml_certificate_renewal_required_data_round_trip(self): - data = load_fixture("connection_saml_certificate_renewal_required_data.json") - instance = ConnectionSAMLCertificateRenewalRequiredData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewalRequiredData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewal_required_data_minimal_payload(self): - data = { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - "is_expired": False, - }, - "days_until_expiry": 30, - } - instance = ConnectionSAMLCertificateRenewalRequiredData.from_dict(data) - serialized = instance.to_dict() - assert serialized["connection"] == data["connection"] - assert serialized["certificate"] == data["certificate"] - assert serialized["days_until_expiry"] == data["days_until_expiry"] - - def test_connection_saml_certificate_renewal_required_data_connection_round_trip( - self, - ): - data = load_fixture( - "connection_saml_certificate_renewal_required_data_connection.json" - ) - instance = ConnectionSAMLCertificateRenewalRequiredDataConnection.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewalRequiredDataConnection.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewal_required_data_connection_minimal_payload( - self, - ): - data = {"id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ConnectionSAMLCertificateRenewalRequiredDataConnection.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - - def test_connection_saml_certificate_renewal_required_data_connection_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ConnectionSAMLCertificateRenewalRequiredDataConnection.from_dict( - data - ) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_connection_saml_certificate_renewal_required_data_certificate_round_trip( - self, - ): - data = load_fixture( - "connection_saml_certificate_renewal_required_data_certificate.json" - ) - instance = ConnectionSAMLCertificateRenewalRequiredDataCertificate.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewalRequiredDataCertificate.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewal_required_data_certificate_minimal_payload( - self, - ): - data = { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - "is_expired": False, - } - instance = ConnectionSAMLCertificateRenewalRequiredDataCertificate.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized["certificate_type"] == data["certificate_type"] - assert serialized["expiry_date"] == data["expiry_date"] - assert serialized["is_expired"] == data["is_expired"] - - def test_connection_saml_certificate_renewal_required_data_certificate_round_trips_unknown_enum_values( - self, - ): - data = { - "certificate_type": "unexpected_connection_saml_certificate_renewal_required_data_certificate_certificate_type", - "expiry_date": "2026-01-15T12:00:00.000Z", - "is_expired": False, - } - instance = ConnectionSAMLCertificateRenewalRequiredDataCertificate.from_dict( - data - ) - assert instance.to_dict() == data - - def test_connection_saml_certificate_renewed_round_trip(self): - data = load_fixture("connection_saml_certificate_renewed.json") - instance = ConnectionSAMLCertificateRenewed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.saml_certificate_renewed", - "data": { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - }, - "renewed_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_connection_saml_certificate_renewed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "connection.saml_certificate_renewed", - "data": { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - }, - "renewed_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_connection_saml_certificate_renewed_data_round_trip(self): - data = load_fixture("connection_saml_certificate_renewed_data.json") - instance = ConnectionSAMLCertificateRenewedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewed_data_minimal_payload(self): - data = { - "connection": { - "id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "certificate": { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - }, - "renewed_at": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["connection"] == data["connection"] - assert serialized["certificate"] == data["certificate"] - assert serialized["renewed_at"] == data["renewed_at"] - - def test_connection_saml_certificate_renewed_data_connection_round_trip(self): - data = load_fixture("connection_saml_certificate_renewed_data_connection.json") - instance = ConnectionSAMLCertificateRenewedDataConnection.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewedDataConnection.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewed_data_connection_minimal_payload(self): - data = {"id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ConnectionSAMLCertificateRenewedDataConnection.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - - def test_connection_saml_certificate_renewed_data_connection_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"id": "conn_01EHWNCE74X7JSDV0X3SZ3KJNY"} - instance = ConnectionSAMLCertificateRenewedDataConnection.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_connection_saml_certificate_renewed_data_certificate_round_trip(self): - data = load_fixture("connection_saml_certificate_renewed_data_certificate.json") - instance = ConnectionSAMLCertificateRenewedDataCertificate.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionSAMLCertificateRenewedDataCertificate.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_saml_certificate_renewed_data_certificate_minimal_payload(self): - data = { - "certificate_type": "ResponseSigning", - "expiry_date": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewedDataCertificate.from_dict(data) - serialized = instance.to_dict() - assert serialized["certificate_type"] == data["certificate_type"] - assert serialized["expiry_date"] == data["expiry_date"] - - def test_connection_saml_certificate_renewed_data_certificate_round_trips_unknown_enum_values( - self, - ): - data = { - "certificate_type": "unexpected_connection_saml_certificate_renewed_data_certificate_certificate_type", - "expiry_date": "2026-01-15T12:00:00.000Z", - } - instance = ConnectionSAMLCertificateRenewedDataCertificate.from_dict(data) - assert instance.to_dict() == data - - def test_dsync_activated_round_trip(self): - data = load_fixture("dsync_activated.json") - instance = DsyncActivated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncActivated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_activated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.activated", - "data": { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncActivated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_activated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.activated", - "data": { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncActivated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_activated_data_round_trip(self): - data = load_fixture("dsync_activated_data.json") - instance = DsyncActivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncActivatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_activated_data_minimal_payload(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = DsyncActivatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["external_key"] == data["external_key"] - assert serialized["domains"] == data["domains"] - - def test_dsync_activated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = DsyncActivatedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_dsync_activated_data_round_trips_unknown_enum_values(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "unexpected_dsync_activated_data_type", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "external_key": "ext_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - ], - } - instance = DsyncActivatedData.from_dict(data) - assert instance.to_dict() == data - - def test_dsync_activated_data_domain_round_trip(self): - data = load_fixture("dsync_activated_data_domain.json") - instance = DsyncActivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncActivatedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_activated_data_domain_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHWNCE74X7JSDV0X3SZ3KJNY", - "domain": "acme.com", - } - instance = DsyncActivatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["domain"] == data["domain"] - - def test_dsync_deleted_round_trip(self): - data = load_fixture("dsync_deleted.json") - instance = DsyncDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.deleted", - "data": { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.deleted", - "data": { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_deleted_data_round_trip(self): - data = load_fixture("dsync_deleted_data.json") - instance = DsyncDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_deleted_data_minimal_payload(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - assert serialized["state"] == data["state"] - assert serialized["name"] == data["name"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_dsync_deleted_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "okta scim v2.0", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_dsync_deleted_data_round_trips_unknown_enum_values(self): - data = { - "object": "directory", - "id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "type": "unexpected_dsync_deleted_data_type", - "state": "active", - "name": "Acme Directory", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_dsync_group_created_round_trip(self): - data = load_fixture("dsync_group_created.json") - instance = DsyncGroupCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.created", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_group_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.created", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_deleted_round_trip(self): - data = load_fixture("dsync_group_deleted.json") - instance = DsyncGroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.deleted", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_group_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.deleted", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_updated_round_trip(self): - data = load_fixture("dsync_group_updated.json") - instance = DsyncGroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.updated", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_group_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.updated", - "data": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_updated_data_round_trip(self): - data = load_fixture("dsync_group_updated_data.json") - instance = DsyncGroupUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_updated_data_minimal_payload(self): - data = { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["name"] == data["name"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_dsync_group_updated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "raw_attributes" not in serialized - assert "previous_attributes" not in serialized - - def test_dsync_token_created_round_trip(self): - data = load_fixture("dsync_token_created.json") - instance = DsyncTokenCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncTokenCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_token_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.token.created", - "data": { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_token_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.token.created", - "data": { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_token_created_data_round_trip(self): - data = load_fixture("dsync_token_created_data.json") - instance = DsyncTokenCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncTokenCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_token_created_data_minimal_payload(self): - data = { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["token_suffix"] == data["token_suffix"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_token_created_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_dsync_token_revoked_round_trip(self): - data = load_fixture("dsync_token_revoked.json") - instance = DsyncTokenRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncTokenRevoked.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_token_revoked_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.token.revoked", - "data": { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_token_revoked_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.token.revoked", - "data": { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenRevoked.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_token_revoked_data_round_trip(self): - data = load_fixture("dsync_token_revoked_data.json") - instance = DsyncTokenRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncTokenRevokedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_token_revoked_data_minimal_payload(self): - data = { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["token_suffix"] == data["token_suffix"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_token_revoked_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_token", - "id": "directory_token_01EHWNCE74X7JSDV0X3SZ3KJNY", - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "token_suffix": "a1b2", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncTokenRevokedData.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - - def test_dsync_group_user_added_round_trip(self): - data = load_fixture("dsync_group_user_added.json") - instance = DsyncGroupUserAdded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUserAdded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_user_added_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.user_added", - "data": { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUserAdded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_group_user_added_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.user_added", - "data": { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUserAdded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_user_added_data_round_trip(self): - data = load_fixture("dsync_group_user_added_data.json") - instance = DsyncGroupUserAddedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUserAddedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_user_added_data_minimal_payload(self): - data = { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = DsyncGroupUserAddedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["directory_id"] == data["directory_id"] - assert serialized["user"] == data["user"] - assert serialized["group"] == data["group"] - - def test_dsync_user_created_round_trip(self): - data = load_fixture("dsync_user_created.json") - instance = DsyncUserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncUserCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_user_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.created", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_user_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.created", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_user_deleted_round_trip(self): - data = load_fixture("dsync_user_deleted.json") - instance = DsyncUserDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncUserDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_user_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.deleted", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_user_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.deleted", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_user_removed_round_trip(self): - data = load_fixture("dsync_group_user_removed.json") - instance = DsyncGroupUserRemoved.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUserRemoved.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_user_removed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.user_removed", - "data": { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUserRemoved.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_group_user_removed_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.group.user_removed", - "data": { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncGroupUserRemoved.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_group_user_removed_data_round_trip(self): - data = load_fixture("dsync_group_user_removed_data.json") - instance = DsyncGroupUserRemovedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncGroupUserRemovedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_group_user_removed_data_minimal_payload(self): - data = { - "directory_id": "directory_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "group": { - "object": "directory_group", - "id": "directory_group_01E1JJS84MFPPQ3G655FHTKX6Z", - "idp_id": "02grqrue4294w24", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "name": "Developers", - "raw_attributes": {"key": {}}, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = DsyncGroupUserRemovedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["directory_id"] == data["directory_id"] - assert serialized["user"] == data["user"] - assert serialized["group"] == data["group"] - - def test_dsync_user_updated_round_trip(self): - data = load_fixture("dsync_user_updated.json") - instance = DsyncUserUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncUserUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_user_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.updated", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_dsync_user_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "dsync.user.updated", - "data": { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_dsync_user_updated_data_round_trip(self): - data = load_fixture("dsync_user_updated_data.json") - instance = DsyncUserUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncUserUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_user_updated_data_minimal_payload(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["directory_id"] == data["directory_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["raw_attributes"] == data["raw_attributes"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_dsync_user_updated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "job_title": "Software Engineer", - "username": "mdavis", - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = DsyncUserUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "emails" not in serialized - assert "role" not in serialized - assert "roles" not in serialized - assert "previous_attributes" not in serialized - - def test_dsync_user_updated_data_preserves_nullable_fields(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": None, - "first_name": None, - "last_name": None, - "name": None, - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": None, - "username": None, - "state": "active", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - } - instance = DsyncUserUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] is None - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["job_title"] is None - assert serialized["username"] is None - - def test_dsync_user_updated_data_round_trips_unknown_enum_values(self): - data = { - "object": "directory_user", - "id": "directory_user_01E1JG7J09H96KYP8HM9B0G5SJ", - "directory_id": "directory_01ECAZ4NV9QMV47GW873HDCX74", - "organization_id": "org_01EZTR6WYX1A0DSE2CYMGXQ24Y", - "idp_id": "2836", - "email": "marcelina.davis@example.com", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "emails": [ - { - "primary": True, - "type": "work", - "value": "marcelina.davis@example.com", - } - ], - "job_title": "Software Engineer", - "username": "mdavis", - "state": "unexpected_dsync_user_updated_data_state", - "raw_attributes": {"key": {}}, - "custom_attributes": { - "department": "Engineering", - "job_title": "Software Engineer", - }, - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "previous_attributes": {"key": {}}, - } - instance = DsyncUserUpdatedData.from_dict(data) - assert instance.to_dict() == data - - def test_dsync_user_updated_data_email_round_trip(self): - data = load_fixture("dsync_user_updated_data_email.json") - instance = DsyncUserUpdatedDataEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DsyncUserUpdatedDataEmail.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_dsync_user_updated_data_email_minimal_payload(self): - data = {} - instance = DsyncUserUpdatedDataEmail.from_dict(data) - assert instance.to_dict() is not None - - def test_dsync_user_updated_data_email_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"value": "marcelina.davis@example.com"} - instance = DsyncUserUpdatedDataEmail.from_dict(data) - serialized = instance.to_dict() - assert "primary" not in serialized - assert "type" not in serialized - - def test_dsync_user_updated_data_email_preserves_nullable_fields(self): - data = {"primary": True, "type": "work", "value": None} - instance = DsyncUserUpdatedDataEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized["value"] is None - - def test_email_verification_created_round_trip(self): - data = load_fixture("email_verification_created.json") - instance = EmailVerificationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailVerificationCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_verification_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "email_verification.created", - "data": { - "object": "email_verification", - "id": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailVerificationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_email_verification_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "email_verification.created", - "data": { - "object": "email_verification", - "id": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailVerificationCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_email_verification_created_data_round_trip(self): - data = load_fixture("email_verification_created_data.json") - instance = EmailVerificationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailVerificationCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_verification_created_data_minimal_payload(self): - data = { - "object": "email_verification", - "id": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailVerificationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_created_round_trip(self): - data = load_fixture("flag_created.json") - instance = FlagCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "flag.created", - "data": { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": "Enable advanced analytics dashboard feature", - "owner": { - "email": "jane@example.com", - "first_name": "Jane", - "last_name": "Doe", - }, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "context": { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - }, - } - instance = FlagCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - assert serialized["context"] == data["context"] - - def test_flag_created_data_round_trip(self): - data = load_fixture("flag_created_data.json") - instance = FlagCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_created_data_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["environment_id"] == data["environment_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_created_data_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_flag_created_data_owner_round_trip(self): - data = load_fixture("flag_created_data_owner.json") - instance = FlagCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagCreatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_created_data_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_flag_created_data_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagCreatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_flag_created_context_round_trip(self): - data = load_fixture("flag_created_context.json") - instance = FlagCreatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagCreatedContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_created_context_minimal_payload(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - } - instance = FlagCreatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized["client_id"] == data["client_id"] - assert serialized["actor"] == data["actor"] - - def test_flag_created_context_actor_round_trip(self): - data = load_fixture("flag_created_context_actor.json") - instance = FlagCreatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagCreatedContextActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_created_context_actor_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagCreatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["source"] == data["source"] - assert serialized["name"] == data["name"] - - def test_flag_created_context_actor_preserves_nullable_fields(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagCreatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] is None - - def test_flag_created_context_actor_round_trips_unknown_enum_values(self): - data = { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "unexpected_flag_created_context_actor_source", - "name": "Jane Doe", - } - instance = FlagCreatedContextActor.from_dict(data) - assert instance.to_dict() == data - - def test_flag_deleted_round_trip(self): - data = load_fixture("flag_deleted.json") - instance = FlagDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "flag.deleted", - "data": { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": "Enable advanced analytics dashboard feature", - "owner": { - "email": "jane@example.com", - "first_name": "Jane", - "last_name": "Doe", - }, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "context": { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - }, - } - instance = FlagDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - assert serialized["context"] == data["context"] - - def test_flag_deleted_data_round_trip(self): - data = load_fixture("flag_deleted_data.json") - instance = FlagDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_deleted_data_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["environment_id"] == data["environment_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_deleted_data_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_flag_deleted_data_owner_round_trip(self): - data = load_fixture("flag_deleted_data_owner.json") - instance = FlagDeletedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagDeletedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_deleted_data_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagDeletedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_flag_deleted_data_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagDeletedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_flag_deleted_context_round_trip(self): - data = load_fixture("flag_deleted_context.json") - instance = FlagDeletedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagDeletedContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_deleted_context_minimal_payload(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - } - instance = FlagDeletedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized["client_id"] == data["client_id"] - assert serialized["actor"] == data["actor"] - - def test_flag_deleted_context_actor_round_trip(self): - data = load_fixture("flag_deleted_context_actor.json") - instance = FlagDeletedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagDeletedContextActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_deleted_context_actor_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagDeletedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["source"] == data["source"] - assert serialized["name"] == data["name"] - - def test_flag_deleted_context_actor_preserves_nullable_fields(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagDeletedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] is None - - def test_flag_deleted_context_actor_round_trips_unknown_enum_values(self): - data = { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "unexpected_flag_deleted_context_actor_source", - "name": "Jane Doe", - } - instance = FlagDeletedContextActor.from_dict(data) - assert instance.to_dict() == data - - def test_flag_rule_updated_round_trip(self): - data = load_fixture("flag_rule_updated.json") - instance = FlagRuleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "flag.rule_updated", - "data": { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": "Enable advanced analytics dashboard feature", - "owner": { - "email": "jane@example.com", - "first_name": "Jane", - "last_name": "Doe", - }, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "context": { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - "access_type": "none", - "configured_targets": { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - "previous_attributes": { - "data": {"enabled": True, "default_value": False}, - "context": { - "access_type": "none", - "configured_targets": { - "organizations": [ - { - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Corp", - } - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - }, - }, - }, - } - instance = FlagRuleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - assert serialized["context"] == data["context"] - - def test_flag_rule_updated_data_round_trip(self): - data = load_fixture("flag_rule_updated_data.json") - instance = FlagRuleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_data_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagRuleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["environment_id"] == data["environment_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_rule_updated_data_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagRuleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_flag_rule_updated_data_owner_round_trip(self): - data = load_fixture("flag_rule_updated_data_owner.json") - instance = FlagRuleUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_data_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagRuleUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_flag_rule_updated_data_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagRuleUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_flag_rule_updated_context_round_trip(self): - data = load_fixture("flag_rule_updated_context.json") - instance = FlagRuleUpdatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_minimal_payload(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - "access_type": "none", - "configured_targets": { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - "previous_attributes": { - "data": {"enabled": True, "default_value": False}, - "context": { - "access_type": "none", - "configured_targets": { - "organizations": [ - { - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Corp", - } - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - }, - }, - } - instance = FlagRuleUpdatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized["client_id"] == data["client_id"] - assert serialized["actor"] == data["actor"] - assert serialized["access_type"] == data["access_type"] - assert serialized["configured_targets"] == data["configured_targets"] - assert serialized["previous_attributes"] == data["previous_attributes"] - - def test_flag_rule_updated_context_round_trips_unknown_enum_values(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - "access_type": "unexpected_flag_rule_updated_context_access_type", - "configured_targets": { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - "previous_attributes": { - "data": {"enabled": True, "default_value": False}, - "context": { - "access_type": "none", - "configured_targets": { - "organizations": [ - { - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Corp", - } - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - }, - }, - } - instance = FlagRuleUpdatedContext.from_dict(data) - assert instance.to_dict() == data - - def test_flag_rule_updated_context_actor_round_trip(self): - data = load_fixture("flag_rule_updated_context_actor.json") - instance = FlagRuleUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_actor_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagRuleUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["source"] == data["source"] - assert serialized["name"] == data["name"] - - def test_flag_rule_updated_context_actor_preserves_nullable_fields(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagRuleUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] is None - - def test_flag_rule_updated_context_actor_round_trips_unknown_enum_values(self): - data = { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "unexpected_flag_rule_updated_context_actor_source", - "name": "Jane Doe", - } - instance = FlagRuleUpdatedContextActor.from_dict(data) - assert instance.to_dict() == data - - def test_flag_rule_updated_context_configured_target_round_trip(self): - data = load_fixture("flag_rule_updated_context_configured_target.json") - instance = FlagRuleUpdatedContextConfiguredTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextConfiguredTarget.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_configured_target_minimal_payload(self): - data = { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "email": "user@example.com"} - ], - } - instance = FlagRuleUpdatedContextConfiguredTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized["organizations"] == data["organizations"] - assert serialized["users"] == data["users"] - - def test_flag_rule_updated_context_configured_target_organization_round_trip(self): - data = load_fixture( - "flag_rule_updated_context_configured_target_organization.json" - ) - instance = FlagRuleUpdatedContextConfiguredTargetOrganization.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextConfiguredTargetOrganization.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_configured_target_organization_minimal_payload( - self, - ): - data = {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - instance = FlagRuleUpdatedContextConfiguredTargetOrganization.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - - def test_flag_rule_updated_context_configured_target_user_round_trip(self): - data = load_fixture("flag_rule_updated_context_configured_target_user.json") - instance = FlagRuleUpdatedContextConfiguredTargetUser.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextConfiguredTargetUser.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_configured_target_user_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "email": "user@example.com"} - instance = FlagRuleUpdatedContextConfiguredTargetUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - - def test_flag_rule_updated_context_previous_attribute_round_trip(self): - data = load_fixture("flag_rule_updated_context_previous_attribute.json") - instance = FlagRuleUpdatedContextPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextPreviousAttribute.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_minimal_payload(self): - data = {} - instance = FlagRuleUpdatedContextPreviousAttribute.from_dict(data) - assert instance.to_dict() is not None - - def test_flag_rule_updated_context_previous_attribute_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = FlagRuleUpdatedContextPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert "data" not in serialized - assert "context" not in serialized - - def test_flag_rule_updated_context_previous_attribute_data_round_trip(self): - data = load_fixture("flag_rule_updated_context_previous_attribute_data.json") - instance = FlagRuleUpdatedContextPreviousAttributeData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextPreviousAttributeData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_data_minimal_payload(self): - data = {} - instance = FlagRuleUpdatedContextPreviousAttributeData.from_dict(data) - assert instance.to_dict() is not None - - def test_flag_rule_updated_context_previous_attribute_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = FlagRuleUpdatedContextPreviousAttributeData.from_dict(data) - serialized = instance.to_dict() - assert "enabled" not in serialized - assert "default_value" not in serialized - - def test_flag_rule_updated_context_previous_attribute_context_round_trip(self): - data = load_fixture("flag_rule_updated_context_previous_attribute_context.json") - instance = FlagRuleUpdatedContextPreviousAttributeContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextPreviousAttributeContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_context_minimal_payload(self): - data = {} - instance = FlagRuleUpdatedContextPreviousAttributeContext.from_dict(data) - assert instance.to_dict() is not None - - def test_flag_rule_updated_context_previous_attribute_context_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = FlagRuleUpdatedContextPreviousAttributeContext.from_dict(data) - serialized = instance.to_dict() - assert "access_type" not in serialized - assert "configured_targets" not in serialized - - def test_flag_rule_updated_context_previous_attribute_context_round_trips_unknown_enum_values( - self, - ): - data = { - "access_type": "unexpected_flag_rule_updated_context_previous_attribute_context_access_type", - "configured_targets": { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "email": "user@example.com", - } - ], - }, - } - instance = FlagRuleUpdatedContextPreviousAttributeContext.from_dict(data) - assert instance.to_dict() == data - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_round_trip( - self, - ): - data = load_fixture( - "flag_rule_updated_context_previous_attribute_context_configured_target.json" - ) - instance = ( - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTarget.from_dict( - data - ) - ) - serialized = instance.to_dict() - assert serialized == data - restored = ( - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTarget.from_dict( - serialized - ) - ) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_minimal_payload( - self, - ): - data = { - "organizations": [ - {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - ], - "users": [ - {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "email": "user@example.com"} - ], - } - instance = ( - FlagRuleUpdatedContextPreviousAttributeContextConfiguredTarget.from_dict( - data - ) - ) - serialized = instance.to_dict() - assert serialized["organizations"] == data["organizations"] - assert serialized["users"] == data["users"] - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_organization_round_trip( - self, - ): - data = load_fixture( - "flag_rule_updated_context_previous_attribute_context_configured_target_organization.json" - ) - instance = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetOrganization.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetOrganization.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_organization_minimal_payload( - self, - ): - data = {"id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", "name": "Acme Corp"} - instance = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetOrganization.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_user_round_trip( - self, - ): - data = load_fixture( - "flag_rule_updated_context_previous_attribute_context_configured_target_user.json" - ) - instance = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetUser.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized == data - restored = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetUser.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_flag_rule_updated_context_previous_attribute_context_configured_target_user_minimal_payload( - self, - ): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "email": "user@example.com"} - instance = FlagRuleUpdatedContextPreviousAttributeContextConfiguredTargetUser.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - - def test_flag_updated_round_trip(self): - data = load_fixture("flag_updated.json") - instance = FlagUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "flag.updated", - "data": { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": "Enable advanced analytics dashboard feature", - "owner": { - "email": "jane@example.com", - "first_name": "Jane", - "last_name": "Doe", - }, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "context": { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - "previous_attributes": { - "data": { - "name": "My Feature Flag", - "description": "Enables the new feature.", - "tags": ["beta", "release"], - "enabled": True, - "default_value": False, - } - }, - }, - } - instance = FlagUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - assert serialized["context"] == data["context"] - - def test_flag_updated_data_round_trip(self): - data = load_fixture("flag_updated_data.json") - instance = FlagUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_data_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["environment_id"] == data["environment_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_updated_data_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "environment_id": "environment_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FlagUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_flag_updated_data_owner_round_trip(self): - data = load_fixture("flag_updated_data_owner.json") - instance = FlagUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedDataOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_data_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_flag_updated_data_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagUpdatedDataOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_flag_updated_context_round_trip(self): - data = load_fixture("flag_updated_context.json") - instance = FlagUpdatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedContext.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_context_minimal_payload(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - } - instance = FlagUpdatedContext.from_dict(data) - serialized = instance.to_dict() - assert serialized["client_id"] == data["client_id"] - assert serialized["actor"] == data["actor"] - - def test_flag_updated_context_omits_absent_optional_non_nullable_fields(self): - data = { - "client_id": "client_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor": { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "api", - "name": "Jane Doe", - }, - } - instance = FlagUpdatedContext.from_dict(data) - serialized = instance.to_dict() - assert "previous_attributes" not in serialized - - def test_flag_updated_context_actor_round_trip(self): - data = load_fixture("flag_updated_context_actor.json") - instance = FlagUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedContextActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_context_actor_minimal_payload(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["source"] == data["source"] - assert serialized["name"] == data["name"] - - def test_flag_updated_context_actor_preserves_nullable_fields(self): - data = {"id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", "source": "api", "name": None} - instance = FlagUpdatedContextActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["name"] is None - - def test_flag_updated_context_actor_round_trips_unknown_enum_values(self): - data = { - "id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "source": "unexpected_flag_updated_context_actor_source", - "name": "Jane Doe", - } - instance = FlagUpdatedContextActor.from_dict(data) - assert instance.to_dict() == data - - def test_flag_updated_context_previous_attribute_round_trip(self): - data = load_fixture("flag_updated_context_previous_attribute.json") - instance = FlagUpdatedContextPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedContextPreviousAttribute.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_context_previous_attribute_minimal_payload(self): - data = {} - instance = FlagUpdatedContextPreviousAttribute.from_dict(data) - assert instance.to_dict() is not None - - def test_flag_updated_context_previous_attribute_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = FlagUpdatedContextPreviousAttribute.from_dict(data) - serialized = instance.to_dict() - assert "data" not in serialized - - def test_flag_updated_context_previous_attribute_data_round_trip(self): - data = load_fixture("flag_updated_context_previous_attribute_data.json") - instance = FlagUpdatedContextPreviousAttributeData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagUpdatedContextPreviousAttributeData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_updated_context_previous_attribute_data_minimal_payload(self): - data = {} - instance = FlagUpdatedContextPreviousAttributeData.from_dict(data) - assert instance.to_dict() is not None - - def test_flag_updated_context_previous_attribute_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"description": "Enables the new feature."} - instance = FlagUpdatedContextPreviousAttributeData.from_dict(data) - serialized = instance.to_dict() - assert "name" not in serialized - assert "tags" not in serialized - assert "enabled" not in serialized - assert "default_value" not in serialized - - def test_flag_updated_context_previous_attribute_data_preserves_nullable_fields( - self, - ): - data = { - "name": "My Feature Flag", - "description": None, - "tags": ["beta", "release"], - "enabled": True, - "default_value": False, - } - instance = FlagUpdatedContextPreviousAttributeData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_group_created_round_trip(self): - data = load_fixture("group_created.json") - instance = GroupCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.created", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_group_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.created", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_group_deleted_round_trip(self): - data = load_fixture("group_deleted.json") - instance = GroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.deleted", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_group_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.deleted", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_group_member_added_round_trip(self): - data = load_fixture("group_member_added.json") - instance = GroupMemberAdded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupMemberAdded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_member_added_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.member_added", - "data": { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupMemberAdded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_group_member_added_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.member_added", - "data": { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupMemberAdded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_group_member_added_data_round_trip(self): - data = load_fixture("group_member_added_data.json") - instance = GroupMemberAddedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupMemberAddedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_member_added_data_minimal_payload(self): - data = { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = GroupMemberAddedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["group_id"] == data["group_id"] - assert ( - serialized["organization_membership_id"] - == data["organization_membership_id"] - ) - - def test_group_member_removed_round_trip(self): - data = load_fixture("group_member_removed.json") - instance = GroupMemberRemoved.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupMemberRemoved.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_member_removed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.member_removed", - "data": { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupMemberRemoved.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_group_member_removed_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.member_removed", - "data": { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupMemberRemoved.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_group_member_removed_data_round_trip(self): - data = load_fixture("group_member_removed_data.json") - instance = GroupMemberRemovedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupMemberRemovedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_member_removed_data_minimal_payload(self): - data = { - "group_id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_membership_id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = GroupMemberRemovedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["group_id"] == data["group_id"] - assert ( - serialized["organization_membership_id"] - == data["organization_membership_id"] - ) - - def test_group_updated_round_trip(self): - data = load_fixture("group_updated.json") - instance = GroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.updated", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_group_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "group.updated", - "data": { - "object": "group", - "id": "group_01HXYZ123456789ABCDEFGHIJ", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Engineering", - "description": "The engineering team", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = GroupUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_invitation_accepted_round_trip(self): - data = load_fixture("invitation_accepted.json") - instance = InvitationAccepted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationAccepted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_accepted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.accepted", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationAccepted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_invitation_accepted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.accepted", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationAccepted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_invitation_accepted_data_round_trip(self): - data = load_fixture("invitation_accepted_data.json") - instance = InvitationAcceptedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationAcceptedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_accepted_data_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationAcceptedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_invitation_accepted_data_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationAcceptedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_invitation_accepted_data_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_invitation_accepted_data_state", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationAcceptedData.from_dict(data) - assert instance.to_dict() == data - - def test_invitation_created_round_trip(self): - data = load_fixture("invitation_created.json") - instance = InvitationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.created", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_invitation_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.created", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_invitation_created_data_round_trip(self): - data = load_fixture("invitation_created_data.json") - instance = InvitationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_created_data_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_invitation_created_data_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_invitation_created_data_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_invitation_created_data_state", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_invitation_resent_round_trip(self): - data = load_fixture("invitation_resent.json") - instance = InvitationResent.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationResent.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_resent_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.resent", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationResent.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_invitation_resent_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.resent", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationResent.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_invitation_resent_data_round_trip(self): - data = load_fixture("invitation_resent_data.json") - instance = InvitationResentData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationResentData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_resent_data_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationResentData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_invitation_resent_data_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationResentData.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_invitation_resent_data_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_invitation_resent_data_state", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationResentData.from_dict(data) - assert instance.to_dict() == data - - def test_invitation_revoked_round_trip(self): - data = load_fixture("invitation_revoked.json") - instance = InvitationRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationRevoked.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_revoked_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.revoked", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_invitation_revoked_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "invitation.revoked", - "data": { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationRevoked.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_invitation_revoked_data_round_trip(self): - data = load_fixture("invitation_revoked_data.json") - instance = InvitationRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = InvitationRevokedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_revoked_data_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_invitation_revoked_data_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_invitation_revoked_data_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_invitation_revoked_data_state", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = InvitationRevokedData.from_dict(data) - assert instance.to_dict() == data - - def test_magic_auth_created_round_trip(self): - data = load_fixture("magic_auth_created.json") - instance = MagicAuthCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = MagicAuthCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_magic_auth_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "magic_auth.created", - "data": { - "object": "magic_auth", - "id": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = MagicAuthCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_magic_auth_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "magic_auth.created", - "data": { - "object": "magic_auth", - "id": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = MagicAuthCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_magic_auth_created_data_round_trip(self): - data = load_fixture("magic_auth_created_data.json") - instance = MagicAuthCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = MagicAuthCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_magic_auth_created_data_minimal_payload(self): - data = { - "object": "magic_auth", - "id": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = MagicAuthCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_created_round_trip(self): - data = load_fixture("organization_created.json") - instance = OrganizationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.created", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.created", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_created_data_round_trip(self): - data = load_fixture("organization_created_data.json") - instance = OrganizationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_created_data_minimal_payload(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["domains"] == data["domains"] - assert serialized["metadata"] == data["metadata"] - assert serialized["external_id"] == data["external_id"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_created_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "stripe_customer_id" not in serialized - - def test_organization_created_data_preserves_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["external_id"] is None - - def test_organization_created_data_domain_round_trip(self): - data = load_fixture("organization_created_data_domain.json") - instance = OrganizationCreatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationCreatedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_created_data_domain_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_created_data_domain_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_created_data_domain_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_created_data_domain_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationCreatedDataDomain.from_dict(data) - assert instance.to_dict() == data - - def test_organization_deleted_round_trip(self): - data = load_fixture("organization_deleted.json") - instance = OrganizationDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.deleted", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.deleted", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_deleted_data_round_trip(self): - data = load_fixture("organization_deleted_data.json") - instance = OrganizationDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_deleted_data_minimal_payload(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["domains"] == data["domains"] - assert serialized["metadata"] == data["metadata"] - assert serialized["external_id"] == data["external_id"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_deleted_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "stripe_customer_id" not in serialized - - def test_organization_deleted_data_preserves_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["external_id"] is None - - def test_organization_deleted_data_domain_round_trip(self): - data = load_fixture("organization_deleted_data_domain.json") - instance = OrganizationDeletedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDeletedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_deleted_data_domain_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_deleted_data_domain_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_deleted_data_domain_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_deleted_data_domain_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDeletedDataDomain.from_dict(data) - assert instance.to_dict() == data - - def test_organization_domain_created_round_trip(self): - data = load_fixture("organization_domain_created.json") - instance = OrganizationDomainCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.created", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_domain_created_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.created", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_domain_created_data_round_trip(self): - data = load_fixture("organization_domain_created_data.json") - instance = OrganizationDomainCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_created_data_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_created_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_created_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_created_data_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_domain_deleted_round_trip(self): - data = load_fixture("organization_domain_deleted.json") - instance = OrganizationDomainDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.deleted", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_domain_deleted_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.deleted", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_domain_deleted_data_round_trip(self): - data = load_fixture("organization_domain_deleted_data.json") - instance = OrganizationDomainDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_deleted_data_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_deleted_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_deleted_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_deleted_data_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_domain_updated_round_trip(self): - data = load_fixture("organization_domain_updated.json") - instance = OrganizationDomainUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.updated", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_domain_updated_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.updated", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_domain_updated_data_round_trip(self): - data = load_fixture("organization_domain_updated_data.json") - instance = OrganizationDomainUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_updated_data_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_updated_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_updated_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_updated_data_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainUpdatedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_domain_verification_failed_round_trip(self): - data = load_fixture("organization_domain_verification_failed.json") - instance = OrganizationDomainVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainVerificationFailed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_verification_failed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.verification_failed", - "data": { - "reason": "domain_verification_period_expired", - "organization_domain": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_domain_verification_failed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.verification_failed", - "data": { - "reason": "domain_verification_period_expired", - "organization_domain": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerificationFailed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_domain_verification_failed_data_round_trip(self): - data = load_fixture("organization_domain_verification_failed_data.json") - instance = OrganizationDomainVerificationFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainVerificationFailedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_verification_failed_data_minimal_payload(self): - data = { - "reason": "domain_verification_period_expired", - "organization_domain": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = OrganizationDomainVerificationFailedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["reason"] == data["reason"] - assert serialized["organization_domain"] == data["organization_domain"] - - def test_organization_domain_verification_failed_data_round_trips_unknown_enum_values( - self, - ): - data = { - "reason": "unexpected_organization_domain_verification_failed_data_reason", - "organization_domain": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = OrganizationDomainVerificationFailedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_domain_verification_failed_data_organization_domain_round_trip( - self, - ): - data = load_fixture( - "organization_domain_verification_failed_data_organization_domain.json" - ) - instance = OrganizationDomainVerificationFailedDataOrganizationDomain.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainVerificationFailedDataOrganizationDomain.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_organization_domain_verification_failed_data_organization_domain_minimal_payload( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerificationFailedDataOrganizationDomain.from_dict( - data - ) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_verification_failed_data_organization_domain_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerificationFailedDataOrganizationDomain.from_dict( - data - ) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_verification_failed_data_organization_domain_round_trips_unknown_enum_values( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_verification_failed_data_organization_domain_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerificationFailedDataOrganizationDomain.from_dict( - data - ) - assert instance.to_dict() == data - - def test_organization_domain_verified_round_trip(self): - data = load_fixture("organization_domain_verified.json") - instance = OrganizationDomainVerified.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainVerified.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_verified_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.verified", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerified.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_domain_verified_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_domain.verified", - "data": { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerified.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_domain_verified_data_round_trip(self): - data = load_fixture("organization_domain_verified_data.json") - instance = OrganizationDomainVerifiedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainVerifiedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_verified_data_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerifiedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_verified_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerifiedData.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_verified_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_verified_data_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomainVerifiedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_membership_created_round_trip(self): - data = load_fixture("organization_membership_created.json") - instance = OrganizationMembershipCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.created", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_membership_created_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.created", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_membership_created_data_round_trip(self): - data = load_fixture("organization_membership_created_data.json") - instance = OrganizationMembershipCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_created_data_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["role"] == data["role"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_membership_created_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "roles" not in serialized - - def test_organization_membership_created_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "unexpected_organization_membership_created_data_status", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_membership_deleted_round_trip(self): - data = load_fixture("organization_membership_deleted.json") - instance = OrganizationMembershipDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.deleted", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_membership_deleted_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.deleted", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_membership_deleted_data_round_trip(self): - data = load_fixture("organization_membership_deleted_data.json") - instance = OrganizationMembershipDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_deleted_data_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["role"] == data["role"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_membership_deleted_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "roles" not in serialized - - def test_organization_membership_deleted_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "unexpected_organization_membership_deleted_data_status", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_membership_updated_round_trip(self): - data = load_fixture("organization_membership_updated.json") - instance = OrganizationMembershipUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.updated", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_membership_updated_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_membership.updated", - "data": { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_membership_updated_data_round_trip(self): - data = load_fixture("organization_membership_updated_data.json") - instance = OrganizationMembershipUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembershipUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_updated_data_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["role"] == data["role"] - assert serialized["custom_attributes"] == data["custom_attributes"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_membership_updated_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "active", - "role": {"slug": "admin"}, - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "roles" not in serialized - - def test_organization_membership_updated_data_round_trips_unknown_enum_values(self): - data = { - "object": "organization_membership", - "id": "om_01EHWNCE74X7JSDV0X3SZ3KJNY", - "user_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "status": "unexpected_organization_membership_updated_data_status", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "custom_attributes": {"key": {}}, - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationMembershipUpdatedData.from_dict(data) - assert instance.to_dict() == data - - def test_organization_role_created_round_trip(self): - data = load_fixture("organization_role_created.json") - instance = OrganizationRoleCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.created", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_role_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.created", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_role_created_data_round_trip(self): - data = load_fixture("organization_role_created_data.json") - instance = OrganizationRoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_created_data_minimal_payload(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_role_created_data_preserves_nullable_fields(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_organization_role_deleted_round_trip(self): - data = load_fixture("organization_role_deleted.json") - instance = OrganizationRoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.deleted", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_role_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.deleted", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_role_deleted_data_round_trip(self): - data = load_fixture("organization_role_deleted_data.json") - instance = OrganizationRoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_deleted_data_minimal_payload(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_role_deleted_data_preserves_nullable_fields(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_organization_role_updated_round_trip(self): - data = load_fixture("organization_role_updated.json") - instance = OrganizationRoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.updated", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_role_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization_role.updated", - "data": { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": "Can manage billing settings.", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_role_updated_data_round_trip(self): - data = load_fixture("organization_role_updated_data.json") - instance = OrganizationRoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationRoleUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_role_updated_data_minimal_payload(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_role_updated_data_preserves_nullable_fields(self): - data = { - "object": "organization_role", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing-admin", - "name": "Billing Administrator", - "description": None, - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationRoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_organization_updated_round_trip(self): - data = load_fixture("organization_updated.json") - instance = OrganizationUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.updated", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_organization_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "organization.updated", - "data": { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_organization_updated_data_round_trip(self): - data = load_fixture("organization_updated_data.json") - instance = OrganizationUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_updated_data_minimal_payload(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["domains"] == data["domains"] - assert serialized["metadata"] == data["metadata"] - assert serialized["external_id"] == data["external_id"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_updated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "stripe_customer_id" not in serialized - - def test_organization_updated_data_preserves_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["external_id"] is None - - def test_organization_updated_data_domain_round_trip(self): - data = load_fixture("organization_updated_data_domain.json") - instance = OrganizationUpdatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationUpdatedDataDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_updated_data_domain_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_updated_data_domain_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedDataDomain.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_updated_data_domain_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_updated_data_domain_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationUpdatedDataDomain.from_dict(data) - assert instance.to_dict() == data - - def test_password_reset_created_round_trip(self): - data = load_fixture("password_reset_created.json") - instance = PasswordResetCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PasswordResetCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_password_reset_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "password_reset.created", - "data": { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_password_reset_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "password_reset.created", - "data": { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_password_reset_created_data_round_trip(self): - data = load_fixture("password_reset_created_data.json") - instance = PasswordResetCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PasswordResetCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_password_reset_created_data_minimal_payload(self): - data = { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - - def test_password_reset_succeeded_round_trip(self): - data = load_fixture("password_reset_succeeded.json") - instance = PasswordResetSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PasswordResetSucceeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_password_reset_succeeded_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "password_reset.succeeded", - "data": { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetSucceeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_password_reset_succeeded_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "password_reset.succeeded", - "data": { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetSucceeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_password_reset_succeeded_data_round_trip(self): - data = load_fixture("password_reset_succeeded_data.json") - instance = PasswordResetSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PasswordResetSucceededData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_password_reset_succeeded_data_minimal_payload(self): - data = { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PasswordResetSucceededData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - - def test_permission_created_round_trip(self): - data = load_fixture("permission_created.json") - instance = PermissionCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.created", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_permission_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.created", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_permission_created_data_round_trip(self): - data = load_fixture("permission_created_data.json") - instance = PermissionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_created_data_minimal_payload(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["system"] == data["system"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_permission_created_data_preserves_nullable_fields(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_permission_deleted_round_trip(self): - data = load_fixture("permission_deleted.json") - instance = PermissionDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.deleted", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_permission_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.deleted", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_permission_deleted_data_round_trip(self): - data = load_fixture("permission_deleted_data.json") - instance = PermissionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_deleted_data_minimal_payload(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["system"] == data["system"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_permission_deleted_data_preserves_nullable_fields(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_permission_updated_round_trip(self): - data = load_fixture("permission_updated.json") - instance = PermissionUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.updated", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_permission_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "permission.updated", - "data": { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": "Allows managing billing settings.", - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_permission_updated_data_round_trip(self): - data = load_fixture("permission_updated_data.json") - instance = PermissionUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PermissionUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_updated_data_minimal_payload(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["system"] == data["system"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_permission_updated_data_preserves_nullable_fields(self): - data = { - "object": "permission", - "id": "perm_01EHWNCE74X7JSDV0X3SZ3KJNY", - "slug": "billing:manage", - "name": "Manage Billing", - "description": None, - "system": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = PermissionUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_pipes_connected_account_connected_round_trip(self): - data = load_fixture("pipes_connected_account_connected.json") - instance = PipesConnectedAccountConnected.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PipesConnectedAccountConnected.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_pipes_connected_account_connected_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.connected", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountConnected.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_pipes_connected_account_connected_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.connected", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountConnected.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_pipes_connected_account_disconnected_round_trip(self): - data = load_fixture("pipes_connected_account_disconnected.json") - instance = PipesConnectedAccountDisconnected.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PipesConnectedAccountDisconnected.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_pipes_connected_account_disconnected_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.disconnected", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountDisconnected.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_pipes_connected_account_disconnected_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.disconnected", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountDisconnected.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_pipes_connected_account_reauthorization_needed_round_trip(self): - data = load_fixture("pipes_connected_account_reauthorization_needed.json") - instance = PipesConnectedAccountReauthorizationNeeded.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PipesConnectedAccountReauthorizationNeeded.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_pipes_connected_account_reauthorization_needed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.reauthorization_needed", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountReauthorizationNeeded.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_pipes_connected_account_reauthorization_needed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "pipes.connected_account.reauthorization_needed", - "data": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "data_integration_id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "provider_slug": "github", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = PipesConnectedAccountReauthorizationNeeded.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_role_created_round_trip(self): - data = load_fixture("role_created.json") - instance = RoleCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.created", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_role_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.created", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_role_created_data_round_trip(self): - data = load_fixture("role_created_data.json") - instance = RoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_created_data_minimal_payload(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["slug"] == data["slug"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_role_created_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "permissions" not in serialized - - def test_role_deleted_round_trip(self): - data = load_fixture("role_deleted.json") - instance = RoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.deleted", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_role_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.deleted", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_role_deleted_data_round_trip(self): - data = load_fixture("role_deleted_data.json") - instance = RoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_deleted_data_minimal_payload(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["slug"] == data["slug"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_role_deleted_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleDeletedData.from_dict(data) - serialized = instance.to_dict() - assert "permissions" not in serialized - - def test_role_updated_round_trip(self): - data = load_fixture("role_updated.json") - instance = RoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.updated", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_role_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "role.updated", - "data": { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "permissions": ["users:read", "users:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_role_updated_data_round_trip(self): - data = load_fixture("role_updated_data.json") - instance = RoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RoleUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_role_updated_data_minimal_payload(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["slug"] == data["slug"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_role_updated_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "role", - "slug": "admin", - "resource_type_slug": "organization", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RoleUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert "permissions" not in serialized - - def test_session_created_round_trip(self): - data = load_fixture("session_created.json") - instance = SessionCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "session.created", - "data": { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_session_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "session.created", - "data": { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_session_created_data_round_trip(self): - data = load_fixture("session_created_data.json") - instance = SessionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_created_data_minimal_payload(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["auth_method"] == data["auth_method"] - assert serialized["status"] == data["status"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["ended_at"] == data["ended_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_session_created_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": "198.51.100.42", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert "impersonator" not in serialized - assert "organization_id" not in serialized - - def test_session_created_data_preserves_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": None, - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["ended_at"] is None - - def test_session_created_data_round_trips_unknown_enum_values(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "unexpected_session_created_data_auth_method", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_session_created_data_impersonator_round_trip(self): - data = load_fixture("session_created_data_impersonator.json") - instance = SessionCreatedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionCreatedDataImpersonator.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_created_data_impersonator_minimal_payload(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = SessionCreatedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["reason"] == data["reason"] - - def test_session_created_data_impersonator_preserves_nullable_fields(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = SessionCreatedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["reason"] is None - - def test_session_revoked_round_trip(self): - data = load_fixture("session_revoked.json") - instance = SessionRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionRevoked.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_revoked_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "session.revoked", - "data": { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevoked.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_session_revoked_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "session.revoked", - "data": { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevoked.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_session_revoked_data_round_trip(self): - data = load_fixture("session_revoked_data.json") - instance = SessionRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionRevokedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_revoked_data_minimal_payload(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["auth_method"] == data["auth_method"] - assert serialized["status"] == data["status"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["ended_at"] == data["ended_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_session_revoked_data_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": "198.51.100.42", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevokedData.from_dict(data) - serialized = instance.to_dict() - assert "impersonator" not in serialized - assert "organization_id" not in serialized - - def test_session_revoked_data_preserves_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": None, - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevokedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["ended_at"] is None - - def test_session_revoked_data_round_trips_unknown_enum_values(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "unexpected_session_revoked_data_auth_method", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = SessionRevokedData.from_dict(data) - assert instance.to_dict() == data - - def test_session_revoked_data_impersonator_round_trip(self): - data = load_fixture("session_revoked_data_impersonator.json") - instance = SessionRevokedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SessionRevokedDataImpersonator.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_session_revoked_data_impersonator_minimal_payload(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = SessionRevokedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["reason"] == data["reason"] - - def test_session_revoked_data_impersonator_preserves_nullable_fields(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = SessionRevokedDataImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["reason"] is None - - def test_user_created_round_trip(self): - data = load_fixture("user_created.json") - instance = UserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.created", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_user_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.created", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_user_deleted_round_trip(self): - data = load_fixture("user_deleted.json") - instance = UserDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.deleted", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_user_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.deleted", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_user_updated_round_trip(self): - data = load_fixture("user_updated.json") - instance = UserUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.updated", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_user_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "user.updated", - "data": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = UserUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_byok_key_deleted_round_trip(self): - data = load_fixture("vault_byok_key_deleted.json") - instance = VaultByokKeyDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultByokKeyDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_byok_key_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.byok_key.deleted", - "data": { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultByokKeyDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_byok_key_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.byok_key.deleted", - "data": { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultByokKeyDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_byok_key_deleted_data_round_trip(self): - data = load_fixture("vault_byok_key_deleted_data.json") - instance = VaultByokKeyDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultByokKeyDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_byok_key_deleted_data_minimal_payload(self): - data = { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - } - instance = VaultByokKeyDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["key_provider"] == data["key_provider"] - - def test_vault_byok_key_deleted_data_round_trips_unknown_enum_values(self): - data = { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "unexpected_vault_byok_key_deleted_data_key_provider", - } - instance = VaultByokKeyDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_byok_key_verification_completed_round_trip(self): - data = load_fixture("vault_byok_key_verification_completed.json") - instance = VaultByokKeyVerificationCompleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultByokKeyVerificationCompleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_byok_key_verification_completed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.byok_key.verification_completed", - "data": { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - "verified": True, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultByokKeyVerificationCompleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_byok_key_verification_completed_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.byok_key.verification_completed", - "data": { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - "verified": True, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultByokKeyVerificationCompleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_byok_key_verification_completed_data_round_trip(self): - data = load_fixture("vault_byok_key_verification_completed_data.json") - instance = VaultByokKeyVerificationCompletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultByokKeyVerificationCompletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_byok_key_verification_completed_data_minimal_payload(self): - data = { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "AWS_KMS", - "verified": True, - } - instance = VaultByokKeyVerificationCompletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert serialized["key_provider"] == data["key_provider"] - assert serialized["verified"] == data["verified"] - - def test_vault_byok_key_verification_completed_data_round_trips_unknown_enum_values( - self, - ): - data = { - "organization_id": "org_01EHT88Z8J8795GZNQ4ZP1J81T", - "key_provider": "unexpected_vault_byok_key_verification_completed_data_key_provider", - "verified": True, - } - instance = VaultByokKeyVerificationCompletedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_data_created_round_trip(self): - data = load_fixture("vault_data_created.json") - instance = VaultDataCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.created", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_data_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.created", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_data_created_data_round_trip(self): - data = load_fixture("vault_data_created_data.json") - instance = VaultDataCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_created_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - } - instance = VaultDataCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["kv_name"] == data["kv_name"] - assert serialized["key_id"] == data["key_id"] - assert serialized["key_context"] == data["key_context"] - - def test_vault_data_created_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_data_created_data_actor_source", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - } - instance = VaultDataCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_data_deleted_round_trip(self): - data = load_fixture("vault_data_deleted.json") - instance = VaultDataDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataDeleted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_deleted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.deleted", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataDeleted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_data_deleted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.deleted", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataDeleted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_data_deleted_data_round_trip(self): - data = load_fixture("vault_data_deleted_data.json") - instance = VaultDataDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataDeletedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_deleted_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - } - instance = VaultDataDeletedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["kv_name"] == data["kv_name"] - - def test_vault_data_deleted_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_data_deleted_data_actor_source", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - } - instance = VaultDataDeletedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_data_read_round_trip(self): - data = load_fixture("vault_data_read.json") - instance = VaultDataRead.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataRead.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_read_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataRead.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_data_read_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataRead.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_data_read_data_round_trip(self): - data = load_fixture("vault_data_read_data.json") - instance = VaultDataReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataReadData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_read_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultDataReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["kv_name"] == data["kv_name"] - assert serialized["key_id"] == data["key_id"] - - def test_vault_data_read_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_data_read_data_actor_source", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultDataReadData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_data_updated_round_trip(self): - data = load_fixture("vault_data_updated.json") - instance = VaultDataUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataUpdated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_updated_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.updated", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataUpdated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_data_updated_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.data.updated", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDataUpdated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_data_updated_data_round_trip(self): - data = load_fixture("vault_data_updated_data.json") - instance = VaultDataUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDataUpdatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_data_updated_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - } - instance = VaultDataUpdatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["kv_name"] == data["kv_name"] - assert serialized["key_id"] == data["key_id"] - assert serialized["key_context"] == data["key_context"] - - def test_vault_data_updated_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_data_updated_data_actor_source", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - "key_context": {"key": "test_value"}, - } - instance = VaultDataUpdatedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_dek_decrypted_round_trip(self): - data = load_fixture("vault_dek_decrypted.json") - instance = VaultDekDecrypted.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDekDecrypted.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_dek_decrypted_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.dek.decrypted", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDekDecrypted.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_dek_decrypted_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.dek.decrypted", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDekDecrypted.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_dek_decrypted_data_round_trip(self): - data = load_fixture("vault_dek_decrypted_data.json") - instance = VaultDekDecryptedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDekDecryptedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_dek_decrypted_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultDekDecryptedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["key_id"] == data["key_id"] - - def test_vault_dek_decrypted_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_dek_decrypted_data_actor_source", - "actor_name": "Jane Doe", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultDekDecryptedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_dek_read_round_trip(self): - data = load_fixture("vault_dek_read.json") - instance = VaultDekRead.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDekRead.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_dek_read_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.dek.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_ids": ["dek_01EHWNCE74X7JSDV0X3SZ3KJNY"], - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDekRead.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_dek_read_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.dek.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_ids": ["dek_01EHWNCE74X7JSDV0X3SZ3KJNY"], - "key_context": {"key": "test_value"}, - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultDekRead.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_dek_read_data_round_trip(self): - data = load_fixture("vault_dek_read_data.json") - instance = VaultDekReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultDekReadData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_dek_read_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_ids": ["dek_01EHWNCE74X7JSDV0X3SZ3KJNY"], - "key_context": {"key": "test_value"}, - } - instance = VaultDekReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["key_ids"] == data["key_ids"] - assert serialized["key_context"] == data["key_context"] - - def test_vault_dek_read_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_dek_read_data_actor_source", - "actor_name": "Jane Doe", - "key_ids": ["dek_01EHWNCE74X7JSDV0X3SZ3KJNY"], - "key_context": {"key": "test_value"}, - } - instance = VaultDekReadData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_kek_created_round_trip(self): - data = load_fixture("vault_kek_created.json") - instance = VaultKekCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultKekCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_kek_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.kek.created", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_name": "production-kek", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultKekCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_kek_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.kek.created", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_name": "production-kek", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultKekCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_kek_created_data_round_trip(self): - data = load_fixture("vault_kek_created_data.json") - instance = VaultKekCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultKekCreatedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_kek_created_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "key_name": "production-kek", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultKekCreatedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["key_name"] == data["key_name"] - assert serialized["key_id"] == data["key_id"] - - def test_vault_kek_created_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_kek_created_data_actor_source", - "actor_name": "Jane Doe", - "key_name": "production-kek", - "key_id": "key_01EHWNCE74X7JSDV0X3SZ3KJNY", - } - instance = VaultKekCreatedData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_metadata_read_round_trip(self): - data = load_fixture("vault_metadata_read.json") - instance = VaultMetadataRead.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultMetadataRead.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_metadata_read_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.metadata.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultMetadataRead.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_metadata_read_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.metadata.read", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultMetadataRead.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_metadata_read_data_round_trip(self): - data = load_fixture("vault_metadata_read_data.json") - instance = VaultMetadataReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultMetadataReadData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_metadata_read_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - } - instance = VaultMetadataReadData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - assert serialized["kv_name"] == data["kv_name"] - - def test_vault_metadata_read_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_metadata_read_data_actor_source", - "actor_name": "Jane Doe", - "kv_name": "user-secrets", - } - instance = VaultMetadataReadData.from_dict(data) - assert instance.to_dict() == data - - def test_vault_names_listed_round_trip(self): - data = load_fixture("vault_names_listed.json") - instance = VaultNamesListed.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultNamesListed.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_names_listed_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.names.listed", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultNamesListed.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_vault_names_listed_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "vault.names.listed", - "data": { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = VaultNamesListed.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_vault_names_listed_data_round_trip(self): - data = load_fixture("vault_names_listed_data.json") - instance = VaultNamesListedData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VaultNamesListedData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_vault_names_listed_data_minimal_payload(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "api", - "actor_name": "Jane Doe", - } - instance = VaultNamesListedData.from_dict(data) - serialized = instance.to_dict() - assert serialized["actor_id"] == data["actor_id"] - assert serialized["actor_source"] == data["actor_source"] - assert serialized["actor_name"] == data["actor_name"] - - def test_vault_names_listed_data_round_trips_unknown_enum_values(self): - data = { - "actor_id": "user_01EHWNCE74X7JSDV0X3SZ3KJNY", - "actor_source": "unexpected_vault_names_listed_data_actor_source", - "actor_name": "Jane Doe", - } - instance = VaultNamesListedData.from_dict(data) - assert instance.to_dict() == data - - def test_waitlist_user_approved_round_trip(self): - data = load_fixture("waitlist_user_approved.json") - instance = WaitlistUserApproved.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WaitlistUserApproved.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_waitlist_user_approved_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.approved", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserApproved.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_waitlist_user_approved_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.approved", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserApproved.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_waitlist_user_created_round_trip(self): - data = load_fixture("waitlist_user_created.json") - instance = WaitlistUserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WaitlistUserCreated.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_waitlist_user_created_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.created", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserCreated.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_waitlist_user_created_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.created", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserCreated.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_waitlist_user_denied_round_trip(self): - data = load_fixture("waitlist_user_denied.json") - instance = WaitlistUserDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WaitlistUserDenied.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_waitlist_user_denied_minimal_payload(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.denied", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserDenied.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["event"] == data["event"] - assert serialized["data"] == data["data"] - assert serialized["created_at"] == data["created_at"] - - def test_waitlist_user_denied_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "event", - "id": "event_01EHZNVPK3SFK441A1RGBFSHRT", - "event": "waitlist_user.denied", - "data": { - "object": "waitlist_user", - "id": "wl_user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "approved_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = WaitlistUserDenied.from_dict(data) - serialized = instance.to_dict() - assert "context" not in serialized - - def test_flag_round_trip(self): - data = load_fixture("flag.json") - instance = Flag.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Flag.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Flag.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_flag_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": True, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Flag.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_organization_api_key_round_trip(self): - data = load_fixture("organization_api_key.json") - instance = OrganizationApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationApiKey.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_api_key_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_api_key_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_organization_api_key_with_value_round_trip(self): - data = load_fixture("organization_api_key_with_value.json") - instance = OrganizationApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationApiKeyWithValue.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_api_key_with_value_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "value": "sk_abcdefghijklmnop123456", - } - instance = OrganizationApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["value"] == data["value"] - - def test_organization_api_key_with_value_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"}, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "value": "sk_abcdefghijklmnop123456", - } - instance = OrganizationApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_organization_round_trip(self): - data = load_fixture("organization.json") - instance = Organization.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Organization.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_minimal_payload(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Organization.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["domains"] == data["domains"] - assert serialized["metadata"] == data["metadata"] - assert serialized["external_id"] == data["external_id"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": "2fe01467-f7ea-4dd2-8b79-c2b4f56d0191", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Organization.from_dict(data) - serialized = instance.to_dict() - assert "stripe_customer_id" not in serialized - assert "allow_profiles_outside_organization" not in serialized - - def test_organization_preserves_nullable_fields(self): - data = { - "object": "organization", - "id": "org_01EHWNCE74X7JSDV0X3SZ3KJNY", - "name": "Acme Inc.", - "domains": [ - { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "pending", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - ], - "metadata": {"tier": "diamond"}, - "external_id": None, - "stripe_customer_id": "cus_R9qWAGMQ6nGE7V", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "allow_profiles_outside_organization": False, - } - instance = Organization.from_dict(data) - serialized = instance.to_dict() - assert serialized["external_id"] is None - - def test_audit_log_configuration_round_trip(self): - data = load_fixture("audit_log_configuration.json") - instance = AuditLogConfiguration.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogConfiguration.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_configuration_minimal_payload(self): - data = { - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "retention_period_in_days": 30, - "state": "active", - } - instance = AuditLogConfiguration.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] == data["organization_id"] - assert ( - serialized["retention_period_in_days"] == data["retention_period_in_days"] - ) - assert serialized["state"] == data["state"] - - def test_audit_log_configuration_omits_absent_optional_non_nullable_fields(self): - data = { - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "retention_period_in_days": 30, - "state": "active", - } - instance = AuditLogConfiguration.from_dict(data) - serialized = instance.to_dict() - assert "log_stream" not in serialized - - def test_audit_log_configuration_round_trips_unknown_enum_values(self): - data = { - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "retention_period_in_days": 30, - "state": "unexpected_audit_log_configuration_state", - "log_stream": { - "id": "als_01EHZNVPK3SFK441A1RGBFSHRT", - "type": "Datadog", - "state": "active", - "last_synced_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = AuditLogConfiguration.from_dict(data) - assert instance.to_dict() == data - - def test_data_integration_credentials_round_trip(self): - data = load_fixture("data_integration_credentials.json") - instance = DataIntegrationCredentials.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationCredentials.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_credentials_minimal_payload(self): - data = { - "credentials_type": "organization", - "has_credentials": True, - "client_id": None, - "client_secret_last_four": None, - "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", - } - instance = DataIntegrationCredentials.from_dict(data) - serialized = instance.to_dict() - assert serialized["credentials_type"] == data["credentials_type"] - assert serialized["has_credentials"] == data["has_credentials"] - assert serialized["client_id"] == data["client_id"] - assert serialized["client_secret_last_four"] == data["client_secret_last_four"] - assert serialized["redirect_uri"] == data["redirect_uri"] - - def test_data_integration_credentials_preserves_nullable_fields(self): - data = { - "credentials_type": "organization", - "has_credentials": True, - "client_id": None, - "client_secret_last_four": None, - "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", - } - instance = DataIntegrationCredentials.from_dict(data) - serialized = instance.to_dict() - assert serialized["client_id"] is None - assert serialized["client_secret_last_four"] is None - - def test_data_integration_credentials_round_trips_unknown_enum_values(self): - data = { - "credentials_type": "unexpected_data_integration_credentials_credentials_type", - "has_credentials": True, - "client_id": "client_01EHZNVPK3SFK441A1RGBFSHRT", - "client_secret_last_four": "1a2b", - "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", - } - instance = DataIntegrationCredentials.from_dict(data) - assert instance.to_dict() == data - - def test_data_integration_configuration_response_round_trip(self): - data = load_fixture("data_integration_configuration_response.json") - instance = DataIntegrationConfigurationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationConfigurationResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_configuration_response_minimal_payload(self): - data = { - "object": "data_integration_configuration", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "github", - "name": "GitHub", - "enabled": True, - "scopes": None, - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - } - instance = DataIntegrationConfigurationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["enabled"] == data["enabled"] - assert serialized["scopes"] == data["scopes"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_data_integration_configuration_response_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "data_integration_configuration", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "github", - "name": "GitHub", - "enabled": True, - "scopes": ["repo", "user:email"], - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - } - instance = DataIntegrationConfigurationResponse.from_dict(data) - serialized = instance.to_dict() - assert "credentials" not in serialized - - def test_data_integration_configuration_response_preserves_nullable_fields(self): - data = { - "object": "data_integration_configuration", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "github", - "name": "GitHub", - "enabled": True, - "scopes": None, - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "credentials": { - "credentials_type": "organization", - "has_credentials": True, - "client_id": "client_01EHZNVPK3SFK441A1RGBFSHRT", - "client_secret_last_four": "1a2b", - "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", - }, - } - instance = DataIntegrationConfigurationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["scopes"] is None - - def test_data_integration_configuration_list_response_round_trip(self): - data = load_fixture("data_integration_configuration_list_response.json") - instance = DataIntegrationConfigurationListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationConfigurationListResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_configuration_list_response_minimal_payload(self): - data = { - "object": "list", - "data": [ - { - "object": "data_integration_configuration", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "github", - "name": "GitHub", - "enabled": True, - "scopes": ["repo", "user:email"], - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "credentials": { - "credentials_type": "organization", - "has_credentials": True, - "client_id": "client_01EHZNVPK3SFK441A1RGBFSHRT", - "client_secret_last_four": "1a2b", - "redirect_uri": "https://api.workos.com/data-integrations/github/dik_01EHZNVPK3SFK441A1RGBFSHRT/callback", - }, - } - ], - } - instance = DataIntegrationConfigurationListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["data"] == data["data"] - - def test_data_integration_authorize_url_response_round_trip(self): - data = load_fixture("data_integration_authorize_url_response.json") - instance = DataIntegrationAuthorizeUrlResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationAuthorizeUrlResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_authorize_url_response_minimal_payload(self): - data = { - "url": "https://api.workos.com/data-integrations/q2czJKmVAraSBg8xFpT7M9uR/authorize-redirect" - } - instance = DataIntegrationAuthorizeUrlResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["url"] == data["url"] - - def test_data_integration_access_token_response_round_trip(self): - data = load_fixture("data_integration_access_token_response.json") - instance = DataIntegrationAccessTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationAccessTokenResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_access_token_response_minimal_payload(self): - data = {} - instance = DataIntegrationAccessTokenResponse.from_dict(data) - assert instance.to_dict() is not None - - def test_data_integration_access_token_response_omits_absent_optional_non_nullable_fields( - self, - ): - data = {} - instance = DataIntegrationAccessTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert "active" not in serialized - assert "access_token" not in serialized - assert "error" not in serialized - - def test_data_integration_access_token_response_round_trips_unknown_enum_values( - self, - ): - data = { - "active": True, - "access_token": { - "object": "access_token", - "access_token": "gho_16C7e42F292c6912E7710c838347Ae178B4a", - "expires_at": "2025-12-31T23:59:59.000Z", - "scopes": ["repo", "user:email"], - "missing_scopes": [], - }, - "error": "unexpected_data_integration_access_token_response_error", - } - instance = DataIntegrationAccessTokenResponse.from_dict(data) - assert instance.to_dict() == data - - def test_connected_account_round_trip(self): - data = load_fixture("connected_account.json") - instance = ConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectedAccount.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connected_account_minimal_payload(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - } - instance = ConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["scopes"] == data["scopes"] - assert serialized["state"] == data["state"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_connected_account_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - } - instance = ConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert "auth_method" not in serialized - - def test_connected_account_preserves_nullable_fields(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "oauth", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - } - instance = ConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["user_id"] is None - assert serialized["organization_id"] is None - assert serialized["api_key_last_4"] is None - - def test_connected_account_round_trips_unknown_enum_values(self): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "unexpected_connected_account_auth_method", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - } - instance = ConnectedAccount.from_dict(data) - assert instance.to_dict() == data - - def test_data_integrations_list_response_round_trip(self): - data = load_fixture("data_integrations_list_response.json") - instance = DataIntegrationsListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationsListResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integrations_list_response_minimal_payload(self): - data = { - "object": "list", - "data": [ - { - "object": "data_provider", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "name": "GitHub", - "description": "Connect your GitHub account to access repositories.", - "slug": "github", - "integration_type": "github", - "credentials_type": "oauth2", - "scopes": ["repo", "user:email"], - "auth_methods": ["oauth"], - "ownership": "userland_user", - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "connected_account": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "oauth", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": "test_userlandUserId", - }, - } - ], - } - instance = DataIntegrationsListResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["data"] == data["data"] - - def test_portal_link_response_round_trip(self): - data = load_fixture("portal_link_response.json") - instance = PortalLinkResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PortalLinkResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_portal_link_response_minimal_payload(self): - data = { - "link": "https://setup.workos.com?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." - } - instance = PortalLinkResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["link"] == data["link"] - - def test_radar_standalone_response_round_trip(self): - data = load_fixture("radar_standalone_response.json") - instance = RadarStandaloneResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RadarStandaloneResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_radar_standalone_response_minimal_payload(self): - data = { - "verdict": "block", - "reason": "Detected enabled Radar control", - "attempt_id": "radar_att_01HZBC6N1EB1ZY7KG32X", - } - instance = RadarStandaloneResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["verdict"] == data["verdict"] - assert serialized["reason"] == data["reason"] - assert serialized["attempt_id"] == data["attempt_id"] - - def test_radar_standalone_response_omits_absent_optional_non_nullable_fields(self): - data = { - "verdict": "block", - "reason": "Detected enabled Radar control", - "attempt_id": "radar_att_01HZBC6N1EB1ZY7KG32X", - } - instance = RadarStandaloneResponse.from_dict(data) - serialized = instance.to_dict() - assert "control" not in serialized - assert "blocklist_type" not in serialized - - def test_radar_standalone_response_round_trips_unknown_enum_values(self): - data = { - "verdict": "unexpected_radar_standalone_response_verdict", - "reason": "Detected enabled Radar control", - "attempt_id": "radar_att_01HZBC6N1EB1ZY7KG32X", - "control": "bot_detection", - "blocklist_type": "ip_address", - } - instance = RadarStandaloneResponse.from_dict(data) - assert instance.to_dict() == data - - def test_radar_list_entry_already_present_response_round_trip(self): - data = load_fixture("radar_list_entry_already_present_response.json") - instance = RadarListEntryAlreadyPresentResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RadarListEntryAlreadyPresentResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_radar_list_entry_already_present_response_minimal_payload(self): - data = {"message": "Entry already present in list"} - instance = RadarListEntryAlreadyPresentResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["message"] == data["message"] - - def test_redirect_uri_round_trip(self): - data = load_fixture("redirect_uri.json") - instance = RedirectUri.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = RedirectUri.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_redirect_uri_minimal_payload(self): - data = { - "object": "redirect_uri", - "id": "ruri_01EHZNVPK3SFK441A1RGBFSHRT", - "uri": "https://example.com/callback", - "default": True, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = RedirectUri.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["uri"] == data["uri"] - assert serialized["default"] == data["default"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_user_authentication_factor_enroll_response_round_trip(self): - data = load_fixture("user_authentication_factor_enroll_response.json") - instance = UserAuthenticationFactorEnrollResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserAuthenticationFactorEnrollResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_authentication_factor_enroll_response_minimal_payload(self): - data = { - "authentication_factor": { - "object": "authentication_factor", - "id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "type": "totp", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "sms": {"phone_number": "+15005550006"}, - "totp": { - "issuer": "WorkOS", - "user": "user@example.com", - "secret": "JBSWY3DPEHPK3PXP", - "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", - "uri": "otpauth://totp/WorkOS:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=WorkOS", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "authentication_challenge": { - "object": "authentication_challenge", - "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "expires_at": "2026-01-15T12:00:00.000Z", - "code": "123456", - "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserAuthenticationFactorEnrollResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["authentication_factor"] == data["authentication_factor"] - assert ( - serialized["authentication_challenge"] == data["authentication_challenge"] - ) - - def test_magic_auth_round_trip(self): - data = load_fixture("magic_auth.json") - instance = MagicAuth.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = MagicAuth.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_magic_auth_minimal_payload(self): - data = { - "object": "magic_auth", - "id": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "code": "123456", - } - instance = MagicAuth.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["code"] == data["code"] - - def test_user_invite_round_trip(self): - data = load_fixture("user_invite.json") - instance = UserInvite.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserInvite.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_invite_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = UserInvite.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["token"] == data["token"] - assert serialized["accept_invitation_url"] == data["accept_invitation_url"] - - def test_user_invite_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "pending", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = UserInvite.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_user_invite_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_user_invite_state", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": None, - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = UserInvite.from_dict(data) - assert instance.to_dict() == data - - def test_user_organization_membership_round_trip(self): - data = load_fixture("user_organization_membership.json") - instance = UserOrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserOrganizationMembership.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_organization_membership_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["role"] == data["role"] - assert serialized["roles"] == data["roles"] - assert serialized["user"] == data["user"] - - def test_user_organization_membership_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert "organization_name" not in serialized - assert "custom_attributes" not in serialized - - def test_user_organization_membership_round_trips_unknown_enum_values(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "unexpected_user_organization_membership_status", - "directory_managed": False, - "organization_name": "Acme Corp", - "custom_attributes": { - "department": "Engineering", - "title": "Developer Experience Engineer", - "location": "Brooklyn", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembership.from_dict(data) - assert instance.to_dict() == data - - def test_user_api_key_round_trip(self): - data = load_fixture("user_api_key.json") - instance = UserApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKey.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_user_api_key_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserApiKey.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_user_api_key_with_value_round_trip(self): - data = load_fixture("user_api_key_with_value.json") - instance = UserApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyWithValue.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_with_value_minimal_payload(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "value": "sk_abcdefghijklmnop123456", - } - instance = UserApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["owner"] == data["owner"] - assert serialized["name"] == data["name"] - assert serialized["obfuscated_value"] == data["obfuscated_value"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["permissions"] == data["permissions"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["value"] == data["value"] - - def test_user_api_key_with_value_preserves_nullable_fields(self): - data = { - "object": "api_key", - "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", - "owner": { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - "name": "Production API Key", - "obfuscated_value": "sk_...3456", - "last_used_at": None, - "expires_at": None, - "permissions": ["posts:read", "posts:write"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "value": "sk_abcdefghijklmnop123456", - } - instance = UserApiKeyWithValue.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - assert serialized["expires_at"] is None - - def test_email_verification_round_trip(self): - data = load_fixture("email_verification.json") - instance = EmailVerification.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailVerification.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_verification_minimal_payload(self): - data = { - "object": "email_verification", - "id": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "code": "123456", - } - instance = EmailVerification.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["code"] == data["code"] - - def test_send_verification_email_response_round_trip(self): - data = load_fixture("send_verification_email_response.json") - instance = SendVerificationEmailResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SendVerificationEmailResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_send_verification_email_response_minimal_payload(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - } - instance = SendVerificationEmailResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["user"] == data["user"] - - def test_verify_email_response_round_trip(self): - data = load_fixture("verify_email_response.json") - instance = VerifyEmailResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = VerifyEmailResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_verify_email_response_minimal_payload(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - } - instance = VerifyEmailResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["user"] == data["user"] - - def test_password_reset_round_trip(self): - data = load_fixture("password_reset.json") - instance = PasswordReset.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = PasswordReset.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_password_reset_minimal_payload(self): - data = { - "object": "password_reset", - "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - "password_reset_token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "password_reset_url": "https://your-app.com/reset-password?token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = PasswordReset.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["email"] == data["email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["password_reset_token"] == data["password_reset_token"] - assert serialized["password_reset_url"] == data["password_reset_url"] - - def test_reset_password_response_round_trip(self): - data = load_fixture("reset_password_response.json") - instance = ResetPasswordResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ResetPasswordResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_reset_password_response_minimal_payload(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - } - instance = ResetPasswordResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["user"] == data["user"] - - def test_email_change_round_trip(self): - data = load_fixture("email_change.json") - instance = EmailChange.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailChange.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_change_minimal_payload(self): - data = { - "object": "email_change", - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "new_email": "new.email@example.com", - "expires_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailChange.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["user"] == data["user"] - assert serialized["new_email"] == data["new_email"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["created_at"] == data["created_at"] - - def test_authenticate_response_round_trip(self): - data = load_fixture("authenticate_response.json") - instance = AuthenticateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticateResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authenticate_response_minimal_payload(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", - "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", - } - instance = AuthenticateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["user"] == data["user"] - assert serialized["access_token"] == data["access_token"] - assert serialized["refresh_token"] == data["refresh_token"] - - def test_authenticate_response_omits_absent_optional_non_nullable_fields(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", - "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", - } - instance = AuthenticateResponse.from_dict(data) - serialized = instance.to_dict() - assert "organization_id" not in serialized - assert "authkit_authorization_code" not in serialized - assert "authentication_method" not in serialized - assert "impersonator" not in serialized - assert "oauth_tokens" not in serialized - - def test_authenticate_response_round_trips_unknown_enum_values(self): - data = { - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "authkit_authorization_code": "authkit_authz_code_abc123", - "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", - "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", - "authentication_method": "unexpected_authenticate_response_authentication_method", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "oauth_tokens": { - "provider": "GoogleOAuth", - "refresh_token": "1//04g...", - "access_token": "ya29.a0ARrdaM...", - "expires_at": 1735141800, - "scopes": ["profile", "email", "openid"], - }, - } - instance = AuthenticateResponse.from_dict(data) - assert instance.to_dict() == data - - def test_device_authorization_response_round_trip(self): - data = load_fixture("device_authorization_response.json") - instance = DeviceAuthorizationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DeviceAuthorizationResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_device_authorization_response_minimal_payload(self): - data = { - "device_code": "CVE2wOfIFK4vhmiDBntpX9s8KT2f0qngpWYL0LGy9HxYgBRXUKIUkZB9BgIFho5h", - "user_code": "BCDF-GHJK", - "verification_uri": "https://authkit_domain/device", - "expires_in": 300, - } - instance = DeviceAuthorizationResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["device_code"] == data["device_code"] - assert serialized["user_code"] == data["user_code"] - assert serialized["verification_uri"] == data["verification_uri"] - assert serialized["expires_in"] == data["expires_in"] - - def test_device_authorization_response_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "device_code": "CVE2wOfIFK4vhmiDBntpX9s8KT2f0qngpWYL0LGy9HxYgBRXUKIUkZB9BgIFho5h", - "user_code": "BCDF-GHJK", - "verification_uri": "https://authkit_domain/device", - "expires_in": 300, - } - instance = DeviceAuthorizationResponse.from_dict(data) - serialized = instance.to_dict() - assert "verification_uri_complete" not in serialized - assert "interval" not in serialized - - def test_webhook_endpoint_round_trip(self): - data = load_fixture("webhook_endpoint.json") - instance = WebhookEndpoint.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WebhookEndpoint.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_webhook_endpoint_minimal_payload(self): - data = { - "object": "webhook_endpoint", - "id": "we_0123456789", - "endpoint_url": "https://example.com/webhooks", - "secret": "whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4", - "status": "enabled", - "events": ["user.created", "dsync.user.created"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = WebhookEndpoint.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["endpoint_url"] == data["endpoint_url"] - assert serialized["secret"] == data["secret"] - assert serialized["status"] == data["status"] - assert serialized["events"] == data["events"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_webhook_endpoint_round_trips_unknown_enum_values(self): - data = { - "object": "webhook_endpoint", - "id": "we_0123456789", - "endpoint_url": "https://example.com/webhooks", - "secret": "whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4", - "status": "unexpected_webhook_endpoint_status", - "events": ["user.created", "dsync.user.created"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = WebhookEndpoint.from_dict(data) - assert instance.to_dict() == data - - def test_widget_session_token_response_round_trip(self): - data = load_fixture("widget_session_token_response.json") - instance = WidgetSessionTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = WidgetSessionTokenResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_widget_session_token_response_minimal_payload(self): - data = {"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNlc3Npb24..."} - instance = WidgetSessionTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["token"] == data["token"] - - def test_client_api_token_response_round_trip(self): - data = load_fixture("client_api_token_response.json") - instance = ClientApiTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ClientApiTokenResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_client_api_token_response_minimal_payload(self): - data = {"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNlc3Npb24..."} - instance = ClientApiTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["token"] == data["token"] - - def test_sso_authorize_url_response_round_trip(self): - data = load_fixture("sso_authorize_url_response.json") - instance = SSOAuthorizeUrlResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SSOAuthorizeUrlResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_sso_authorize_url_response_minimal_payload(self): - data = { - "url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=example&redirect_uri=https%3A%2F%2Fapi.workos.com%2Fsso%2Fcallback&response_type=code&scope=openid%20profile%20email" - } - instance = SSOAuthorizeUrlResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["url"] == data["url"] - - def test_profile_round_trip(self): - data = load_fixture("profile.json") - instance = Profile.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Profile.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_profile_minimal_payload(self): - data = { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": None, - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": None, - "last_name": None, - "name": None, - "raw_attributes": {"key": {}}, - } - instance = Profile.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["connection_id"] == data["connection_id"] - assert serialized["connection_type"] == data["connection_type"] - assert serialized["idp_id"] == data["idp_id"] - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - assert serialized["name"] == data["name"] - assert serialized["raw_attributes"] == data["raw_attributes"] - - def test_profile_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": "org_01EHQMYV6MBK39QC5PZXHY59C3", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": "Todd", - "last_name": "Rundgren", - "name": "Todd Rundgren", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "raw_attributes": {"key": {}}, - } - instance = Profile.from_dict(data) - serialized = instance.to_dict() - assert "groups" not in serialized - assert "custom_attributes" not in serialized - - def test_profile_preserves_nullable_fields(self): - data = { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": None, - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": None, - "last_name": None, - "name": None, - "role": None, - "roles": None, - "groups": ["Engineering", "Admins"], - "custom_attributes": {"key": {}}, - "raw_attributes": {"key": {}}, - } - instance = Profile.from_dict(data) - serialized = instance.to_dict() - assert serialized["organization_id"] is None - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["role"] is None - assert serialized["roles"] is None - - def test_profile_round_trips_unknown_enum_values(self): - data = { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": "org_01EHQMYV6MBK39QC5PZXHY59C3", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "unexpected_profile_connection_type", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": "Todd", - "last_name": "Rundgren", - "name": "Todd Rundgren", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "groups": ["Engineering", "Admins"], - "custom_attributes": {"key": {}}, - "raw_attributes": {"key": {}}, - } - instance = Profile.from_dict(data) - assert instance.to_dict() == data - - def test_sso_token_response_round_trip(self): - data = load_fixture("sso_token_response.json") - instance = SSOTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SSOTokenResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_sso_token_response_minimal_payload(self): - data = { - "token_type": "Bearer", - "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNzby...", - "expires_in": 600, - "profile": { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": "org_01EHQMYV6MBK39QC5PZXHY59C3", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": "Todd", - "last_name": "Rundgren", - "name": "Todd Rundgren", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "groups": ["Engineering", "Admins"], - "custom_attributes": {"key": {}}, - "raw_attributes": {"key": {}}, - }, - } - instance = SSOTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["token_type"] == data["token_type"] - assert serialized["access_token"] == data["access_token"] - assert serialized["expires_in"] == data["expires_in"] - assert serialized["profile"] == data["profile"] - - def test_sso_token_response_omits_absent_optional_non_nullable_fields(self): - data = { - "token_type": "Bearer", - "access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InNzby...", - "expires_in": 600, - "profile": { - "object": "profile", - "id": "prof_01DMC79VCBZ0NY2099737PSVF1", - "organization_id": "org_01EHQMYV6MBK39QC5PZXHY59C3", - "connection_id": "conn_01E4ZCR3C56J083X43JQXF3JK5", - "connection_type": "OktaSAML", - "idp_id": "103456789012345678901", - "email": "todd@example.com", - "first_name": "Todd", - "last_name": "Rundgren", - "name": "Todd Rundgren", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "groups": ["Engineering", "Admins"], - "custom_attributes": {"key": {}}, - "raw_attributes": {"key": {}}, - }, - } - instance = SSOTokenResponse.from_dict(data) - serialized = instance.to_dict() - assert "oauth_tokens" not in serialized - - def test_sso_logout_authorize_response_round_trip(self): - data = load_fixture("sso_logout_authorize_response.json") - instance = SSOLogoutAuthorizeResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SSOLogoutAuthorizeResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_sso_logout_authorize_response_minimal_payload(self): - data = { - "logout_url": "https://auth.workos.com/sso/logout?token=eyJhbGciOiJSUzI1NiJ9", - "logout_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9maWxlX2lkIjoicHJvZl8wMUdXUTFHMEgyRk02QVNFRjBIUzEzSENXOS0zMDRrZzAzZyIsImV4cCI6IjE1MTYyMzkwMjIifQ.Wru9Qlnf5DpohtGCKhZU4cVOd3zpiu7QQ-XEX--5A_4", - } - instance = SSOLogoutAuthorizeResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["logout_url"] == data["logout_url"] - assert serialized["logout_token"] == data["logout_token"] - - def test_jwks_response_round_trip(self): - data = load_fixture("jwks_response.json") - instance = JwksResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = JwksResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_jwks_response_minimal_payload(self): - data = { - "keys": [ - { - "alg": "RS256", - "kty": "RSA", - "use": "sig", - "x5c": ["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBCwUA..."], - "n": "0vx7agoebGc...eKnNs", - "e": "AQAB", - "kid": "key_01HXYZ123456789ABCDEFGHIJ", - "x5t#S256": "ZjQzYjI0OT...NmNjU0", - } - ] - } - instance = JwksResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["keys"] == data["keys"] - - def test_jwt_template_response_round_trip(self): - data = load_fixture("jwt_template_response.json") - instance = JWTTemplateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = JWTTemplateResponse.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_jwt_template_response_minimal_payload(self): - data = { - "object": "jwt_template", - "content": '{"urn:myapp:full_name": "{{user.first_name}} {{user.last_name}}", "urn:myapp:email": "{{user.email}}"}', - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = JWTTemplateResponse.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["content"] == data["content"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_round_trip(self): - data = load_fixture("organization_domain.json") - instance = OrganizationDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_minimal_payload(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["domain"] == data["domain"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_organization_domain_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomain.from_dict(data) - serialized = instance.to_dict() - assert "state" not in serialized - assert "verification_prefix" not in serialized - assert "verification_token" not in serialized - assert "verification_strategy" not in serialized - - def test_organization_domain_round_trips_unknown_enum_values(self): - data = { - "object": "organization_domain", - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "organization_id": "org_01HE8GSH8FQPASKSY27THRKRBP", - "domain": "foo-corp.com", - "state": "unexpected_organization_domain_state", - "verification_prefix": "superapp-domain-verification-z3kjny", - "verification_token": "m5Oztg3jdK4NJLgs8uIlIprMw", - "verification_strategy": "dns", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = OrganizationDomain.from_dict(data) - assert instance.to_dict() == data - - def test_jwks_response_keys_round_trip(self): - data = load_fixture("jwks_response_keys.json") - instance = JwksResponseKeys.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = JwksResponseKeys.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_jwks_response_keys_minimal_payload(self): - data = { - "alg": "RS256", - "kty": "RSA", - "use": "sig", - "x5c": ["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBCwUA..."], - "n": "0vx7agoebGc...eKnNs", - "e": "AQAB", - "kid": "key_01HXYZ123456789ABCDEFGHIJ", - "x5t#S256": "ZjQzYjI0OT...NmNjU0", - } - instance = JwksResponseKeys.from_dict(data) - serialized = instance.to_dict() - assert serialized["alg"] == data["alg"] - assert serialized["kty"] == data["kty"] - assert serialized["use"] == data["use"] - assert serialized["x5c"] == data["x5c"] - assert serialized["n"] == data["n"] - assert serialized["e"] == data["e"] - assert serialized["kid"] == data["kid"] - assert serialized["x5t#S256"] == data["x5t#S256"] - - def test_sso_token_response_oauth_token_round_trip(self): - data = load_fixture("sso_token_response_oauth_token.json") - instance = SSOTokenResponseOAuthToken.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = SSOTokenResponseOAuthToken.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_sso_token_response_oauth_token_minimal_payload(self): - data = { - "provider": "GoogleOAuth", - "refresh_token": "1//04g...", - "access_token": "ya29.a0ARrdaM...", - "expires_at": 1735141800, - "scopes": ["profile", "email", "openid"], - } - instance = SSOTokenResponseOAuthToken.from_dict(data) - serialized = instance.to_dict() - assert serialized["provider"] == data["provider"] - assert serialized["refresh_token"] == data["refresh_token"] - assert serialized["access_token"] == data["access_token"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["scopes"] == data["scopes"] - - def test_authenticate_response_impersonator_round_trip(self): - data = load_fixture("authenticate_response_impersonator.json") - instance = AuthenticateResponseImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticateResponseImpersonator.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authenticate_response_impersonator_minimal_payload(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = AuthenticateResponseImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["reason"] == data["reason"] - - def test_authenticate_response_impersonator_preserves_nullable_fields(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = AuthenticateResponseImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["reason"] is None - - def test_authenticate_response_oauth_token_round_trip(self): - data = load_fixture("authenticate_response_oauth_token.json") - instance = AuthenticateResponseOAuthToken.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticateResponseOAuthToken.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authenticate_response_oauth_token_minimal_payload(self): - data = { - "provider": "GoogleOAuth", - "refresh_token": "1//04g...", - "access_token": "ya29.a0ARrdaM...", - "expires_at": 1735141800, - "scopes": ["profile", "email", "openid"], - } - instance = AuthenticateResponseOAuthToken.from_dict(data) - serialized = instance.to_dict() - assert serialized["provider"] == data["provider"] - assert serialized["refresh_token"] == data["refresh_token"] - assert serialized["access_token"] == data["access_token"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["scopes"] == data["scopes"] - - def test_user_api_key_with_value_owner_round_trip(self): - data = load_fixture("user_api_key_with_value_owner.json") - instance = UserApiKeyWithValueOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyWithValueOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_with_value_owner_minimal_payload(self): - data = { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - } - instance = UserApiKeyWithValueOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - - def test_user_api_key_owner_round_trip(self): - data = load_fixture("user_api_key_owner.json") - instance = UserApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserApiKeyOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_api_key_owner_minimal_payload(self): - data = { - "type": "user", - "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - } - instance = UserApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - assert serialized["organization_id"] == data["organization_id"] - - def test_data_integrations_list_response_data_round_trip(self): - data = load_fixture("data_integrations_list_response_data.json") - instance = DataIntegrationsListResponseData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationsListResponseData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integrations_list_response_data_minimal_payload(self): - data = { - "object": "data_provider", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "name": "GitHub", - "description": None, - "slug": "github", - "integration_type": "github", - "credentials_type": "oauth2", - "scopes": None, - "ownership": "userland_user", - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "connected_account": None, - } - instance = DataIntegrationsListResponseData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["slug"] == data["slug"] - assert serialized["integration_type"] == data["integration_type"] - assert serialized["credentials_type"] == data["credentials_type"] - assert serialized["scopes"] == data["scopes"] - assert serialized["ownership"] == data["ownership"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["connected_account"] == data["connected_account"] - - def test_data_integrations_list_response_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "data_provider", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "name": "GitHub", - "description": "Connect your GitHub account to access repositories.", - "slug": "github", - "integration_type": "github", - "credentials_type": "oauth2", - "scopes": ["repo", "user:email"], - "ownership": "userland_user", - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "connected_account": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "oauth", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": "test_userlandUserId", - }, - } - instance = DataIntegrationsListResponseData.from_dict(data) - serialized = instance.to_dict() - assert "auth_methods" not in serialized - - def test_data_integrations_list_response_data_preserves_nullable_fields(self): - data = { - "object": "data_provider", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "name": "GitHub", - "description": None, - "slug": "github", - "integration_type": "github", - "credentials_type": "oauth2", - "scopes": None, - "auth_methods": ["oauth"], - "ownership": "userland_user", - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "connected_account": None, - } - instance = DataIntegrationsListResponseData.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["scopes"] is None - assert serialized["connected_account"] is None - - def test_data_integrations_list_response_data_round_trips_unknown_enum_values(self): - data = { - "object": "data_provider", - "id": "data_integration_01EHZNVPK3SFK441A1RGBFSHRT", - "name": "GitHub", - "description": "Connect your GitHub account to access repositories.", - "slug": "github", - "integration_type": "github", - "credentials_type": "oauth2", - "scopes": ["repo", "user:email"], - "auth_methods": ["oauth"], - "ownership": "unexpected_data_integrations_list_response_data_ownership", - "created_at": "2024-01-15T10:30:00.000Z", - "updated_at": "2024-01-15T10:30:00.000Z", - "connected_account": { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "oauth", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": "test_userlandUserId", - }, - } - instance = DataIntegrationsListResponseData.from_dict(data) - assert instance.to_dict() == data - - def test_data_integration_access_token_response_access_token_round_trip(self): - data = load_fixture("data_integration_access_token_response_access_token.json") - instance = DataIntegrationAccessTokenResponseAccessToken.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationAccessTokenResponseAccessToken.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_data_integration_access_token_response_access_token_minimal_payload(self): - data = { - "object": "access_token", - "access_token": "gho_16C7e42F292c6912E7710c838347Ae178B4a", - "expires_at": None, - "scopes": ["repo", "user:email"], - "missing_scopes": [], - } - instance = DataIntegrationAccessTokenResponseAccessToken.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["access_token"] == data["access_token"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["scopes"] == data["scopes"] - assert serialized["missing_scopes"] == data["missing_scopes"] - - def test_data_integration_access_token_response_access_token_preserves_nullable_fields( - self, - ): - data = { - "object": "access_token", - "access_token": "gho_16C7e42F292c6912E7710c838347Ae178B4a", - "expires_at": None, - "scopes": ["repo", "user:email"], - "missing_scopes": [], - } - instance = DataIntegrationAccessTokenResponseAccessToken.from_dict(data) - serialized = instance.to_dict() - assert serialized["expires_at"] is None - - def test_audit_log_configuration_log_stream_round_trip(self): - data = load_fixture("audit_log_configuration_log_stream.json") - instance = AuditLogConfigurationLogStream.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogConfigurationLogStream.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_configuration_log_stream_minimal_payload(self): - data = { - "id": "als_01EHZNVPK3SFK441A1RGBFSHRT", - "type": "Datadog", - "state": "active", - "last_synced_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogConfigurationLogStream.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["type"] == data["type"] - assert serialized["state"] == data["state"] - assert serialized["last_synced_at"] == data["last_synced_at"] - assert serialized["created_at"] == data["created_at"] - - def test_audit_log_configuration_log_stream_preserves_nullable_fields(self): - data = { - "id": "als_01EHZNVPK3SFK441A1RGBFSHRT", - "type": "Datadog", - "state": "active", - "last_synced_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogConfigurationLogStream.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_synced_at"] is None - - def test_audit_log_configuration_log_stream_round_trips_unknown_enum_values(self): - data = { - "id": "als_01EHZNVPK3SFK441A1RGBFSHRT", - "type": "unexpected_audit_log_configuration_log_stream_type", - "state": "active", - "last_synced_at": "2026-01-15T12:00:00.000Z", - "created_at": "2026-01-15T12:00:00.000Z", - } - instance = AuditLogConfigurationLogStream.from_dict(data) - assert instance.to_dict() == data - - def test_organization_api_key_with_value_owner_round_trip(self): - data = load_fixture("organization_api_key_with_value_owner.json") - instance = OrganizationApiKeyWithValueOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationApiKeyWithValueOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_api_key_with_value_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"} - instance = OrganizationApiKeyWithValueOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_organization_api_key_owner_round_trip(self): - data = load_fixture("organization_api_key_owner.json") - instance = OrganizationApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationApiKeyOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_api_key_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"} - instance = OrganizationApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_flag_owner_round_trip(self): - data = load_fixture("flag_owner.json") - instance = FlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FlagOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_flag_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_flag_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_event_list_list_metadata_round_trip(self): - data = load_fixture("event_list_list_metadata.json") - instance = EventListListMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EventListListMetadata.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_event_list_list_metadata_minimal_payload(self): - data = {"after": None} - instance = EventListListMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["after"] == data["after"] - - def test_event_list_list_metadata_preserves_nullable_fields(self): - data = {"after": None} - instance = EventListListMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["after"] is None - - def test_directory_user_email_round_trip(self): - data = load_fixture("directory_user_email.json") - instance = DirectoryUserEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryUserEmail.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_user_email_minimal_payload(self): - data = {} - instance = DirectoryUserEmail.from_dict(data) - assert instance.to_dict() is not None - - def test_directory_user_email_omits_absent_optional_non_nullable_fields(self): - data = {"value": "marcelina.davis@example.com"} - instance = DirectoryUserEmail.from_dict(data) - serialized = instance.to_dict() - assert "primary" not in serialized - assert "type" not in serialized - - def test_directory_user_email_preserves_nullable_fields(self): - data = {"primary": True, "type": "work", "value": None} - instance = DirectoryUserEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized["value"] is None - - def test_event_context_google_analytics_session_round_trip(self): - data = load_fixture("event_context_google_analytics_session.json") - instance = EventContextGoogleAnalyticsSession.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EventContextGoogleAnalyticsSession.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_event_context_google_analytics_session_minimal_payload(self): - data = {"containerId": "GTM-ABCDEF"} - instance = EventContextGoogleAnalyticsSession.from_dict(data) - serialized = instance.to_dict() - assert serialized["containerId"] == data["containerId"] - - def test_event_context_google_analytics_session_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"containerId": "GTM-ABCDEF"} - instance = EventContextGoogleAnalyticsSession.from_dict(data) - serialized = instance.to_dict() - assert "sessionId" not in serialized - assert "sessionNumber" not in serialized - - def test_user_organization_membership_base_list_data_round_trip(self): - data = load_fixture("user_organization_membership_base_list_data.json") - instance = UserOrganizationMembershipBaseListData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserOrganizationMembershipBaseListData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_organization_membership_base_list_data_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembershipBaseListData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["user"] == data["user"] - - def test_user_organization_membership_base_list_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembershipBaseListData.from_dict(data) - serialized = instance.to_dict() - assert "organization_name" not in serialized - assert "custom_attributes" not in serialized - - def test_user_organization_membership_base_list_data_round_trips_unknown_enum_values( - self, - ): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - "status": "unexpected_user_organization_membership_base_list_data_status", - "directory_managed": False, - "organization_name": "Acme Corp", - "custom_attributes": { - "department": "Engineering", - "title": "Developer Experience Engineer", - "location": "Brooklyn", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = UserOrganizationMembershipBaseListData.from_dict(data) - assert instance.to_dict() == data - - def test_directory_user_with_groups_email_round_trip(self): - data = load_fixture("directory_user_with_groups_email.json") - instance = DirectoryUserWithGroupsEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryUserWithGroupsEmail.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_user_with_groups_email_minimal_payload(self): - data = {} - instance = DirectoryUserWithGroupsEmail.from_dict(data) - assert instance.to_dict() is not None - - def test_directory_user_with_groups_email_omits_absent_optional_non_nullable_fields( - self, - ): - data = {"value": "marcelina.davis@example.com"} - instance = DirectoryUserWithGroupsEmail.from_dict(data) - serialized = instance.to_dict() - assert "primary" not in serialized - assert "type" not in serialized - - def test_directory_user_with_groups_email_preserves_nullable_fields(self): - data = {"primary": True, "type": "work", "value": None} - instance = DirectoryUserWithGroupsEmail.from_dict(data) - serialized = instance.to_dict() - assert serialized["value"] is None - - def test_directory_metadata_round_trip(self): - data = load_fixture("directory_metadata.json") - instance = DirectoryMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryMetadata.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_metadata_minimal_payload(self): - data = {"users": {"active": 42, "inactive": 3}, "groups": 5} - instance = DirectoryMetadata.from_dict(data) - serialized = instance.to_dict() - assert serialized["users"] == data["users"] - assert serialized["groups"] == data["groups"] - - def test_connection_domain_round_trip(self): - data = load_fixture("connection_domain.json") - instance = ConnectionDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionDomain.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_domain_minimal_payload(self): - data = { - "id": "org_domain_01EHZNVPK2QXHMVWCEDQEKY69A", - "object": "connection_domain", - "domain": "foo-corp.com", - } - instance = ConnectionDomain.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["object"] == data["object"] - assert serialized["domain"] == data["domain"] - - def test_connection_option_round_trip(self): - data = load_fixture("connection_option.json") - instance = ConnectionOption.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ConnectionOption.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_connection_option_minimal_payload(self): - data = {"signing_cert": None} - instance = ConnectionOption.from_dict(data) - serialized = instance.to_dict() - assert serialized["signing_cert"] == data["signing_cert"] - - def test_connection_option_preserves_nullable_fields(self): - data = {"signing_cert": None} - instance = ConnectionOption.from_dict(data) - serialized = instance.to_dict() - assert serialized["signing_cert"] is None - - def test_user_role_assignment_resource_round_trip(self): - data = load_fixture("user_role_assignment_resource.json") - instance = UserRoleAssignmentResource.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserRoleAssignmentResource.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_role_assignment_resource_minimal_payload(self): - data = { - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - } - instance = UserRoleAssignmentResource.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["external_id"] == data["external_id"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - - def test_group_role_assignment_resource_round_trip(self): - data = load_fixture("group_role_assignment_resource.json") - instance = GroupRoleAssignmentResource.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = GroupRoleAssignmentResource.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_group_role_assignment_resource_minimal_payload(self): - data = { - "id": "authz_resource_01HXYZ123456789ABCDEFGH", - "external_id": "proj-456", - "resource_type_slug": "project", - } - instance = GroupRoleAssignmentResource.from_dict(data) - serialized = instance.to_dict() - assert serialized["id"] == data["id"] - assert serialized["external_id"] == data["external_id"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - - def test_authentication_factor_sms_round_trip(self): - data = load_fixture("authentication_factor_sms.json") - instance = AuthenticationFactorSms.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactorSms.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_sms_minimal_payload(self): - data = {"phone_number": "+15005550006"} - instance = AuthenticationFactorSms.from_dict(data) - serialized = instance.to_dict() - assert serialized["phone_number"] == data["phone_number"] - - def test_authentication_factor_totp_round_trip(self): - data = load_fixture("authentication_factor_totp.json") - instance = AuthenticationFactorTotp.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactorTotp.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_totp_minimal_payload(self): - data = {"issuer": "WorkOS", "user": "user@example.com"} - instance = AuthenticationFactorTotp.from_dict(data) - serialized = instance.to_dict() - assert serialized["issuer"] == data["issuer"] - assert serialized["user"] == data["user"] - - def test_authentication_factor_enrolled_sms_round_trip(self): - data = load_fixture("authentication_factor_enrolled_sms.json") - instance = AuthenticationFactorEnrolledSms.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactorEnrolledSms.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_enrolled_sms_minimal_payload(self): - data = {"phone_number": "+15005550006"} - instance = AuthenticationFactorEnrolledSms.from_dict(data) - serialized = instance.to_dict() - assert serialized["phone_number"] == data["phone_number"] - - def test_authentication_factor_enrolled_totp_round_trip(self): - data = load_fixture("authentication_factor_enrolled_totp.json") - instance = AuthenticationFactorEnrolledTotp.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthenticationFactorEnrolledTotp.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authentication_factor_enrolled_totp_minimal_payload(self): - data = { - "issuer": "WorkOS", - "user": "user@example.com", - "secret": "JBSWY3DPEHPK3PXP", - "qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", - "uri": "otpauth://totp/WorkOS:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=WorkOS", - } - instance = AuthenticationFactorEnrolledTotp.from_dict(data) - serialized = instance.to_dict() - assert serialized["issuer"] == data["issuer"] - assert serialized["user"] == data["user"] - assert serialized["secret"] == data["secret"] - assert serialized["qr_code"] == data["qr_code"] - assert serialized["uri"] == data["uri"] - - def test_audit_log_schema_actor_round_trip(self): - data = load_fixture("audit_log_schema_actor.json") - instance = AuditLogSchemaActor.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogSchemaActor.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_schema_actor_minimal_payload(self): - data = {"metadata": {"key": {}}} - instance = AuditLogSchemaActor.from_dict(data) - serialized = instance.to_dict() - assert serialized["metadata"] == data["metadata"] - - def test_audit_log_schema_target_round_trip(self): - data = load_fixture("audit_log_schema_target.json") - instance = AuditLogSchemaTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuditLogSchemaTarget.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_audit_log_schema_target_minimal_payload(self): - data = {"type": "invoice"} - instance = AuditLogSchemaTarget.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - - def test_audit_log_schema_target_omits_absent_optional_non_nullable_fields(self): - data = {"type": "invoice"} - instance = AuditLogSchemaTarget.from_dict(data) - serialized = instance.to_dict() - assert "metadata" not in serialized - - def test_authorized_connect_application_list_data_round_trip(self): - data = load_fixture("authorized_connect_application_list_data.json") - instance = AuthorizedConnectApplicationListData.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = AuthorizedConnectApplicationListData.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_authorized_connect_application_list_data_minimal_payload(self): - data = { - "object": "authorized_connect_application", - "id": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", - "granted_scopes": ["openid", "profile", "email"], - "application": { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": "An application for managing user access", - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "oauth", - "redirect_uris": [ - {"uri": "https://example.com/callback", "default": True} - ], - "uses_pkce": True, - "is_first_party": True, - "was_dynamically_registered": True, - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - } - instance = AuthorizedConnectApplicationListData.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["granted_scopes"] == data["granted_scopes"] - assert serialized["application"] == data["application"] - - def test_authorized_connect_application_list_data_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "authorized_connect_application", - "id": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", - "granted_scopes": ["openid", "profile", "email"], - "application": { - "object": "connect_application", - "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", - "client_id": "client_01HXYZ123456789ABCDEFGHIJ", - "description": "An application for managing user access", - "name": "My Application", - "scopes": ["openid", "profile", "email"], - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "application_type": "oauth", - "redirect_uris": [ - {"uri": "https://example.com/callback", "default": True} - ], - "uses_pkce": True, - "is_first_party": True, - "was_dynamically_registered": True, - "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", - }, - } - instance = AuthorizedConnectApplicationListData.from_dict(data) - serialized = instance.to_dict() - assert "oauth_resource" not in serialized - - def test_api_key_owner_round_trip(self): - data = load_fixture("api_key_owner.json") - instance = ApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApiKeyOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_api_key_owner_minimal_payload(self): - data = {"type": "organization", "id": "org_01EHZNVPK3SFK441A1RGBFSHRT"} - instance = ApiKeyOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["type"] == data["type"] - assert serialized["id"] == data["id"] - - def test_user_consent_option_choice_round_trip(self): - data = load_fixture("user_consent_option_choice.json") - instance = UserConsentOptionChoice.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserConsentOptionChoice.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_consent_option_choice_minimal_payload(self): - data = {} - instance = UserConsentOptionChoice.from_dict(data) - assert instance.to_dict() is not None - - def test_user_consent_option_choice_omits_absent_optional_non_nullable_fields(self): - data = {} - instance = UserConsentOptionChoice.from_dict(data) - serialized = instance.to_dict() - assert "value" not in serialized - assert "label" not in serialized - - def test_permission_round_trip(self): - data = load_fixture("permission.json") - instance = Permission.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Permission.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_permission_minimal_payload(self): - data = { - "object": "permission", - "id": "perm_01HXYZ123456789ABCDEFGHIJ", - "slug": "documents:read", - "name": "View Documents", - "description": None, - "system": False, - "resource_type_slug": "document", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Permission.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["system"] == data["system"] - assert serialized["resource_type_slug"] == data["resource_type_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_permission_preserves_nullable_fields(self): - data = { - "object": "permission", - "id": "perm_01HXYZ123456789ABCDEFGHIJ", - "slug": "documents:read", - "name": "View Documents", - "description": None, - "system": False, - "resource_type_slug": "document", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = Permission.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - - def test_application_credentials_list_item_round_trip(self): - data = load_fixture("application_credentials_list_item.json") - instance = ApplicationCredentialsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = ApplicationCredentialsListItem.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_application_credentials_list_item_minimal_payload(self): - data = { - "object": "connect_application_secret", - "id": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", - "secret_hint": "abc123", - "last_used_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApplicationCredentialsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["secret_hint"] == data["secret_hint"] - assert serialized["last_used_at"] == data["last_used_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_application_credentials_list_item_preserves_nullable_fields(self): - data = { - "object": "connect_application_secret", - "id": "secret_01J9Q2Z3X4Y5W6V7U8T9S0R1Q", - "secret_hint": "abc123", - "last_used_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = ApplicationCredentialsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized["last_used_at"] is None - - def test_feature_flag_round_trip(self): - data = load_fixture("feature_flag.json") - instance = FeatureFlag.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FeatureFlag.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_feature_flag_minimal_payload(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": False, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FeatureFlag.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["slug"] == data["slug"] - assert serialized["name"] == data["name"] - assert serialized["description"] == data["description"] - assert serialized["owner"] == data["owner"] - assert serialized["tags"] == data["tags"] - assert serialized["enabled"] == data["enabled"] - assert serialized["default_value"] == data["default_value"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_feature_flag_preserves_nullable_fields(self): - data = { - "object": "feature_flag", - "id": "flag_01EHZNVPK3SFK441A1RGBFSHRT", - "slug": "advanced-analytics", - "name": "Advanced Analytics", - "description": None, - "owner": None, - "tags": ["reports"], - "enabled": False, - "default_value": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = FeatureFlag.from_dict(data) - serialized = instance.to_dict() - assert serialized["description"] is None - assert serialized["owner"] is None - - def test_feature_flag_owner_round_trip(self): - data = load_fixture("feature_flag_owner.json") - instance = FeatureFlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = FeatureFlagOwner.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_feature_flag_owner_minimal_payload(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FeatureFlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - - def test_feature_flag_owner_preserves_nullable_fields(self): - data = {"email": "jane@example.com", "first_name": None, "last_name": None} - instance = FeatureFlagOwner.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - - def test_invitation_round_trip(self): - data = load_fixture("invitation.json") - instance = Invitation.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = Invitation.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_invitation_minimal_payload(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "accepted", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = Invitation.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["email"] == data["email"] - assert serialized["state"] == data["state"] - assert serialized["accepted_at"] == data["accepted_at"] - assert serialized["revoked_at"] == data["revoked_at"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["inviter_user_id"] == data["inviter_user_id"] - assert serialized["accepted_user_id"] == data["accepted_user_id"] - assert serialized["role_slug"] == data["role_slug"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["token"] == data["token"] - assert serialized["accept_invitation_url"] == data["accept_invitation_url"] - - def test_invitation_preserves_nullable_fields(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "accepted", - "accepted_at": None, - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": None, - "inviter_user_id": None, - "accepted_user_id": None, - "role_slug": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = Invitation.from_dict(data) - serialized = instance.to_dict() - assert serialized["accepted_at"] is None - assert serialized["revoked_at"] is None - assert serialized["organization_id"] is None - assert serialized["inviter_user_id"] is None - assert serialized["accepted_user_id"] is None - assert serialized["role_slug"] is None - - def test_invitation_round_trips_unknown_enum_values(self): - data = { - "object": "invitation", - "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", - "email": "marcelina.davis@example.com", - "state": "unexpected_invitation_state", - "accepted_at": "2026-01-15T12:00:00.000Z", - "revoked_at": None, - "expires_at": "2026-01-15T12:00:00.000Z", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", - "accepted_user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "role_slug": "admin", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", - "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", - } - instance = Invitation.from_dict(data) - assert instance.to_dict() == data - - def test_organization_membership_round_trip(self): - data = load_fixture("organization_membership.json") - instance = OrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationMembership.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_membership_minimal_payload(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = OrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["status"] == data["status"] - assert serialized["directory_managed"] == data["directory_managed"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["role"] == data["role"] - assert serialized["roles"] == data["roles"] - assert serialized["user"] == data["user"] - - def test_organization_membership_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "status": "active", - "directory_managed": False, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = OrganizationMembership.from_dict(data) - serialized = instance.to_dict() - assert "organization_name" not in serialized - assert "custom_attributes" not in serialized - - def test_organization_membership_round_trips_unknown_enum_values(self): - data = { - "object": "organization_membership", - "id": "om_01HXYZ123456789ABCDEFGHIJ", - "user_id": "user_01E4ZCR3C5A4QZ2Z2JQXGKZJ9E", - "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", - "status": "unexpected_organization_membership_status", - "directory_managed": False, - "organization_name": "Acme Corp", - "custom_attributes": { - "department": "Engineering", - "title": "Developer Experience Engineer", - "location": "Brooklyn", - }, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - "role": {"slug": "admin"}, - "roles": [{"slug": "admin"}], - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "marcelina.davis@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = OrganizationMembership.from_dict(data) - assert instance.to_dict() == data - - def test_email_change_confirmation_round_trip(self): - data = load_fixture("email_change_confirmation.json") - instance = EmailChangeConfirmation.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailChangeConfirmation.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_change_confirmation_minimal_payload(self): - data = { - "object": "email_change_confirmation", - "user": { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "new.email@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - }, - } - instance = EmailChangeConfirmation.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["user"] == data["user"] - - def test_email_change_confirmation_user_round_trip(self): - data = load_fixture("email_change_confirmation_user.json") - instance = EmailChangeConfirmationUser.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = EmailChangeConfirmationUser.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_email_change_confirmation_user_minimal_payload(self): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": None, - "last_name": None, - "profile_picture_url": None, - "email": "new.email@example.com", - "email_verified": True, - "external_id": None, - "last_sign_in_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailChangeConfirmationUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["first_name"] == data["first_name"] - assert serialized["last_name"] == data["last_name"] - assert serialized["profile_picture_url"] == data["profile_picture_url"] - assert serialized["email"] == data["email"] - assert serialized["email_verified"] == data["email_verified"] - assert serialized["external_id"] == data["external_id"] - assert serialized["last_sign_in_at"] == data["last_sign_in_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_email_change_confirmation_user_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": "Marcelina", - "last_name": "Davis", - "name": "Marcelina Davis", - "profile_picture_url": "https://workoscdn.com/images/v1/123abc", - "email": "new.email@example.com", - "email_verified": True, - "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", - "last_sign_in_at": "2025-06-25T19:07:33.000Z", - "locale": "en-US", - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailChangeConfirmationUser.from_dict(data) - serialized = instance.to_dict() - assert "metadata" not in serialized - - def test_email_change_confirmation_user_preserves_nullable_fields(self): - data = { - "object": "user", - "id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "first_name": None, - "last_name": None, - "name": None, - "profile_picture_url": None, - "email": "new.email@example.com", - "email_verified": True, - "external_id": None, - "metadata": {"timezone": "America/New_York"}, - "last_sign_in_at": None, - "locale": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = EmailChangeConfirmationUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["first_name"] is None - assert serialized["last_name"] is None - assert serialized["name"] is None - assert serialized["profile_picture_url"] is None - assert serialized["external_id"] is None - assert serialized["last_sign_in_at"] is None - assert serialized["locale"] is None - - def test_user_identities_get_item_round_trip(self): - data = load_fixture("user_identities_get_item.json") - instance = UserIdentitiesGetItem.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserIdentitiesGetItem.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_identities_get_item_minimal_payload(self): - data = { - "idp_id": "4F42ABDE-1E44-4B66-824A-5F733C037A6D", - "type": "OAuth", - "provider": "MicrosoftOAuth", - } - instance = UserIdentitiesGetItem.from_dict(data) - serialized = instance.to_dict() - assert serialized["idp_id"] == data["idp_id"] - assert serialized["type"] == data["type"] - assert serialized["provider"] == data["provider"] - - def test_user_identities_get_item_round_trips_unknown_enum_values(self): - data = { - "idp_id": "4F42ABDE-1E44-4B66-824A-5F733C037A6D", - "type": "OAuth", - "provider": "unexpected_user_identities_get_item_provider", - } - instance = UserIdentitiesGetItem.from_dict(data) - assert instance.to_dict() == data - - def test_user_sessions_list_item_round_trip(self): - data = load_fixture("user_sessions_list_item.json") - instance = UserSessionsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserSessionsListItem.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_sessions_list_item_minimal_payload(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": None, - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserSessionsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["ip_address"] == data["ip_address"] - assert serialized["user_agent"] == data["user_agent"] - assert serialized["user_id"] == data["user_id"] - assert serialized["auth_method"] == data["auth_method"] - assert serialized["status"] == data["status"] - assert serialized["expires_at"] == data["expires_at"] - assert serialized["ended_at"] == data["ended_at"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - - def test_user_sessions_list_item_omits_absent_optional_non_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "ip_address": "198.51.100.42", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserSessionsListItem.from_dict(data) - serialized = instance.to_dict() - assert "impersonator" not in serialized - assert "organization_id" not in serialized - - def test_user_sessions_list_item_preserves_nullable_fields(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": None, - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": None, - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "sso", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserSessionsListItem.from_dict(data) - serialized = instance.to_dict() - assert serialized["ip_address"] is None - assert serialized["user_agent"] is None - assert serialized["ended_at"] is None - - def test_user_sessions_list_item_round_trips_unknown_enum_values(self): - data = { - "object": "session", - "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", - "impersonator": { - "email": "admin@foocorp.com", - "reason": "Investigating an issue with the customer's account.", - }, - "ip_address": "198.51.100.42", - "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", - "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", - "auth_method": "unexpected_user_sessions_list_item_auth_method", - "status": "active", - "expires_at": "2026-01-15T12:00:00.000Z", - "ended_at": None, - "created_at": "2026-01-15T12:00:00.000Z", - "updated_at": "2026-01-15T12:00:00.000Z", - } - instance = UserSessionsListItem.from_dict(data) - assert instance.to_dict() == data - - def test_user_sessions_impersonator_round_trip(self): - data = load_fixture("user_sessions_impersonator.json") - instance = UserSessionsImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = UserSessionsImpersonator.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_user_sessions_impersonator_minimal_payload(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = UserSessionsImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["email"] == data["email"] - assert serialized["reason"] == data["reason"] - - def test_user_sessions_impersonator_preserves_nullable_fields(self): - data = {"email": "admin@foocorp.com", "reason": None} - instance = UserSessionsImpersonator.from_dict(data) - serialized = instance.to_dict() - assert serialized["reason"] is None - - def test_directory_metadata_user_round_trip(self): - data = load_fixture("directory_metadata_user.json") - instance = DirectoryMetadataUser.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DirectoryMetadataUser.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_directory_metadata_user_minimal_payload(self): - data = {"active": 42, "inactive": 3} - instance = DirectoryMetadataUser.from_dict(data) - serialized = instance.to_dict() - assert serialized["active"] == data["active"] - assert serialized["inactive"] == data["inactive"] - - def test_data_integrations_list_response_data_connected_account_round_trip(self): - data = load_fixture( - "data_integrations_list_response_data_connected_account.json" - ) - instance = DataIntegrationsListResponseDataConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = DataIntegrationsListResponseDataConnectedAccount.from_dict( - serialized - ) - assert restored.to_dict() == serialized - - def test_data_integrations_list_response_data_connected_account_minimal_payload( - self, - ): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": None, - } - instance = DataIntegrationsListResponseDataConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["object"] == data["object"] - assert serialized["id"] == data["id"] - assert serialized["user_id"] == data["user_id"] - assert serialized["organization_id"] == data["organization_id"] - assert serialized["scopes"] == data["scopes"] - assert serialized["state"] == data["state"] - assert serialized["created_at"] == data["created_at"] - assert serialized["updated_at"] == data["updated_at"] - assert serialized["userlandUserId"] == data["userlandUserId"] - - def test_data_integrations_list_response_data_connected_account_omits_absent_optional_non_nullable_fields( - self, - ): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": "test_userlandUserId", - } - instance = DataIntegrationsListResponseDataConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert "auth_method" not in serialized - - def test_data_integrations_list_response_data_connected_account_preserves_nullable_fields( - self, - ): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": None, - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "oauth", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": None, - } - instance = DataIntegrationsListResponseDataConnectedAccount.from_dict(data) - serialized = instance.to_dict() - assert serialized["user_id"] is None - assert serialized["organization_id"] is None - assert serialized["api_key_last_4"] is None - assert serialized["userlandUserId"] is None - - def test_data_integrations_list_response_data_connected_account_round_trips_unknown_enum_values( - self, - ): - data = { - "object": "connected_account", - "id": "data_installation_01EHZNVPK3SFK441A1RGBFSHRT", - "user_id": "user_01EHZNVPK3SFK441A1RGBFSHRT", - "organization_id": None, - "scopes": ["repo", "user:email"], - "auth_method": "unexpected_data_integrations_list_response_data_connected_account_auth_method", - "api_key_last_4": None, - "state": "connected", - "created_at": "2024-01-16T14:20:00.000Z", - "updated_at": "2024-01-16T14:20:00.000Z", - "userlandUserId": "test_userlandUserId", - } - instance = DataIntegrationsListResponseDataConnectedAccount.from_dict(data) - assert instance.to_dict() == data - - -class TestDiscriminatorDispatch: - def test_connect_application_dispatches_known_variant(self): - data = load_fixture("connect_application_m2m.json") - result = ConnectApplication.from_dict(data) - assert isinstance(result, ConnectApplicationM2M) - - def test_connect_application_returns_unknown_for_unrecognized_type(self): - data = load_fixture("connect_application_m2m.json") - data = {**data, "application_type": "future.unrecognized.type"} - result = ConnectApplication.from_dict(data) - assert isinstance(result, ConnectApplicationUnknown) - assert result.raw_data == data - - def test_connect_application_raises_on_missing_discriminator(self): - data = load_fixture("connect_application_m2m.json") - data = {k: v for k, v in data.items() if k != "application_type"} - with pytest.raises(Exception): - ConnectApplication.from_dict(data) - - def test_connect_application_raises_on_none_discriminator(self): - data = load_fixture("connect_application_m2m.json") - data = {**data, "application_type": None} - with pytest.raises(Exception): - ConnectApplication.from_dict(data) - - def test_event_schema_dispatches_known_variant(self): - data = load_fixture("action_authentication_denied.json") - result = EventSchema.from_dict(data) - assert isinstance(result, ActionAuthenticationDenied) - - def test_event_schema_returns_unknown_for_unrecognized_type(self): - data = load_fixture("action_authentication_denied.json") - data = {**data, "event": "future.unrecognized.type"} - result = EventSchema.from_dict(data) - assert isinstance(result, EventSchemaUnknown) - assert result.raw_data == data - - def test_event_schema_raises_on_missing_discriminator(self): - data = load_fixture("action_authentication_denied.json") - data = {k: v for k, v in data.items() if k != "event"} - with pytest.raises(Exception): - EventSchema.from_dict(data) - - def test_event_schema_raises_on_none_discriminator(self): - data = load_fixture("action_authentication_denied.json") - data = {**data, "event": None} - with pytest.raises(Exception): - EventSchema.from_dict(data) +This placeholder remains only until the next full generation prunes it.""" diff --git a/tests/test_organizations_models_round_trip.py b/tests/test_organizations_models_round_trip.py new file mode 100644 index 00000000..d17ea5db --- /dev/null +++ b/tests/test_organizations_models_round_trip.py @@ -0,0 +1,31 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.organizations.models import AuditLogsRetention + + +class TestModelRoundTrip: + def test_audit_logs_retention_round_trip(self): + data = load_fixture("audit_logs_retention.json") + instance = AuditLogsRetention.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuditLogsRetention.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_audit_logs_retention_minimal_payload(self): + data = {"retention_period_in_days": None} + instance = AuditLogsRetention.from_dict(data) + serialized = instance.to_dict() + assert ( + serialized["retention_period_in_days"] == data["retention_period_in_days"] + ) + + def test_audit_logs_retention_preserves_nullable_fields(self): + data = {"retention_period_in_days": None} + instance = AuditLogsRetention.from_dict(data) + serialized = instance.to_dict() + assert serialized["retention_period_in_days"] is None diff --git a/tests/test_user_management.py b/tests/test_user_management.py index 3b873140..57c2e809 100644 --- a/tests/test_user_management.py +++ b/tests/test_user_management.py @@ -102,6 +102,35 @@ def test_revoke_session(self, workos, httpx_mock): assert request.method == "POST" assert request.url.path.endswith("/user_management/sessions/revoke") + def test_list_cors_origins(self, workos, httpx_mock): + httpx_mock.add_response( + json=load_fixture("list_cors_origin_response.json"), + ) + page = workos.user_management.list_cors_origins() + assert isinstance(page, SyncPage) + assert len(page.data) == 1 + assert isinstance(page.data[0], CORSOriginResponse) + + def test_list_cors_origins_empty_page(self, workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + page = workos.user_management.list_cors_origins() + assert isinstance(page, SyncPage) + assert page.data == [] + + def test_list_cors_origins_encodes_query_params(self, workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + workos.user_management.list_cors_origins( + limit=10, + before="cursor before", + after="cursor/after", + order=PaginationOrder("value_order"), + ) + request = httpx_mock.get_request() + assert request.url.params["limit"] == "10" + assert request.url.params["before"] == "cursor before" + assert request.url.params["after"] == "cursor/after" + assert request.url.params["order"] == "value_order" + def test_create_cors_origin(self, workos, httpx_mock): httpx_mock.add_response( json=load_fixture("cors_origin_response.json"), @@ -527,6 +556,35 @@ def test_get_magic_auth(self, workos, httpx_mock): assert request.method == "GET" assert request.url.path.endswith("/user_management/magic_auth/test_id") + def test_list_redirect_uris(self, workos, httpx_mock): + httpx_mock.add_response( + json=load_fixture("list_redirect_uri.json"), + ) + page = workos.user_management.list_redirect_uris() + assert isinstance(page, SyncPage) + assert len(page.data) == 1 + assert isinstance(page.data[0], RedirectUri) + + def test_list_redirect_uris_empty_page(self, workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + page = workos.user_management.list_redirect_uris() + assert isinstance(page, SyncPage) + assert page.data == [] + + def test_list_redirect_uris_encodes_query_params(self, workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + workos.user_management.list_redirect_uris( + limit=10, + before="cursor before", + after="cursor/after", + order=PaginationOrder("value_order"), + ) + request = httpx_mock.get_request() + assert request.url.params["limit"] == "10" + assert request.url.params["before"] == "cursor before" + assert request.url.params["after"] == "cursor/after" + assert request.url.params["order"] == "value_order" + def test_create_redirect_uri(self, workos, httpx_mock): httpx_mock.add_response( json=load_fixture("redirect_uri.json"), @@ -863,6 +921,38 @@ async def test_revoke_session(self, async_workos, httpx_mock): assert request.method == "POST" assert request.url.path.endswith("/user_management/sessions/revoke") + @pytest.mark.asyncio + async def test_list_cors_origins(self, async_workos, httpx_mock): + httpx_mock.add_response(json=load_fixture("list_cors_origin_response.json")) + page = await async_workos.user_management.list_cors_origins() + assert isinstance(page, AsyncPage) + assert len(page.data) == 1 + assert isinstance(page.data[0], CORSOriginResponse) + + @pytest.mark.asyncio + async def test_list_cors_origins_empty_page(self, async_workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + page = await async_workos.user_management.list_cors_origins() + assert isinstance(page, AsyncPage) + assert page.data == [] + + @pytest.mark.asyncio + async def test_list_cors_origins_encodes_query_params( + self, async_workos, httpx_mock + ): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + await async_workos.user_management.list_cors_origins( + limit=10, + before="cursor before", + after="cursor/after", + order=PaginationOrder("value_order"), + ) + request = httpx_mock.get_request() + assert request.url.params["limit"] == "10" + assert request.url.params["before"] == "cursor before" + assert request.url.params["after"] == "cursor/after" + assert request.url.params["order"] == "value_order" + @pytest.mark.asyncio async def test_create_cors_origin(self, async_workos, httpx_mock): httpx_mock.add_response(json=load_fixture("cors_origin_response.json")) @@ -1265,6 +1355,38 @@ async def test_get_magic_auth(self, async_workos, httpx_mock): assert request.method == "GET" assert request.url.path.endswith("/user_management/magic_auth/test_id") + @pytest.mark.asyncio + async def test_list_redirect_uris(self, async_workos, httpx_mock): + httpx_mock.add_response(json=load_fixture("list_redirect_uri.json")) + page = await async_workos.user_management.list_redirect_uris() + assert isinstance(page, AsyncPage) + assert len(page.data) == 1 + assert isinstance(page.data[0], RedirectUri) + + @pytest.mark.asyncio + async def test_list_redirect_uris_empty_page(self, async_workos, httpx_mock): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + page = await async_workos.user_management.list_redirect_uris() + assert isinstance(page, AsyncPage) + assert page.data == [] + + @pytest.mark.asyncio + async def test_list_redirect_uris_encodes_query_params( + self, async_workos, httpx_mock + ): + httpx_mock.add_response(json={"data": [], "list_metadata": {}}) + await async_workos.user_management.list_redirect_uris( + limit=10, + before="cursor before", + after="cursor/after", + order=PaginationOrder("value_order"), + ) + request = httpx_mock.get_request() + assert request.url.params["limit"] == "10" + assert request.url.params["before"] == "cursor before" + assert request.url.params["after"] == "cursor/after" + assert request.url.params["order"] == "value_order" + @pytest.mark.asyncio async def test_create_redirect_uri(self, async_workos, httpx_mock): httpx_mock.add_response(json=load_fixture("redirect_uri.json")) diff --git a/tests/test_user_management_models_round_trip.py b/tests/test_user_management_models_round_trip.py new file mode 100644 index 00000000..2512c4f3 --- /dev/null +++ b/tests/test_user_management_models_round_trip.py @@ -0,0 +1,1342 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.user_management.models import ( + AuthenticateResponse, + AuthenticateResponseImpersonator, + AuthenticateResponseOAuthToken, + AuthorizedConnectApplicationListData, + CORSOriginResponse, + DeviceAuthorizationResponse, + EmailChange, + EmailChangeConfirmation, + EmailChangeConfirmationUser, + EmailVerification, + Invitation, + JWTTemplateResponse, + JwksResponse, + JwksResponseKeys, + MagicAuth, + PasswordReset, + RedirectUri, + ResetPasswordResponse, + SendVerificationEmailResponse, + User, + UserApiKey, + UserApiKeyOwner, + UserApiKeyWithValue, + UserApiKeyWithValueOwner, + UserIdentitiesGetItem, + UserInvite, + UserSessionsImpersonator, + UserSessionsListItem, + VerifyEmailResponse, +) + + +class TestModelRoundTrip: + def test_user_round_trip(self): + data = load_fixture("user.json") + instance = User.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = User.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_minimal_payload(self): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": None, + "last_name": None, + "profile_picture_url": None, + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": None, + "last_sign_in_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = User.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["first_name"] == data["first_name"] + assert serialized["last_name"] == data["last_name"] + assert serialized["profile_picture_url"] == data["profile_picture_url"] + assert serialized["email"] == data["email"] + assert serialized["email_verified"] == data["email_verified"] + assert serialized["external_id"] == data["external_id"] + assert serialized["last_sign_in_at"] == data["last_sign_in_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_user_omits_absent_optional_non_nullable_fields(self): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = User.from_dict(data) + serialized = instance.to_dict() + assert "metadata" not in serialized + + def test_user_preserves_nullable_fields(self): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": None, + "last_name": None, + "name": None, + "profile_picture_url": None, + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": None, + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": None, + "locale": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = User.from_dict(data) + serialized = instance.to_dict() + assert serialized["first_name"] is None + assert serialized["last_name"] is None + assert serialized["name"] is None + assert serialized["profile_picture_url"] is None + assert serialized["external_id"] is None + assert serialized["last_sign_in_at"] is None + assert serialized["locale"] is None + + def test_cors_origin_response_round_trip(self): + data = load_fixture("cors_origin_response.json") + instance = CORSOriginResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = CORSOriginResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_cors_origin_response_minimal_payload(self): + data = { + "object": "cors_origin", + "id": "cors_origin_01HXYZ123456789ABCDEFGHIJ", + "origin": "https://example.com", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = CORSOriginResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["origin"] == data["origin"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_redirect_uri_round_trip(self): + data = load_fixture("redirect_uri.json") + instance = RedirectUri.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = RedirectUri.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_redirect_uri_minimal_payload(self): + data = { + "object": "redirect_uri", + "id": "ruri_01EHZNVPK3SFK441A1RGBFSHRT", + "uri": "https://example.com/callback", + "default": True, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = RedirectUri.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["uri"] == data["uri"] + assert serialized["default"] == data["default"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_magic_auth_round_trip(self): + data = load_fixture("magic_auth.json") + instance = MagicAuth.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = MagicAuth.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_magic_auth_minimal_payload(self): + data = { + "object": "magic_auth", + "id": "magic_auth_01HWZBQZY2M3AMQW166Q22K88F", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "expires_at": "2026-01-15T12:00:00.000Z", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "code": "123456", + } + instance = MagicAuth.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["user_id"] == data["user_id"] + assert serialized["email"] == data["email"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["code"] == data["code"] + + def test_user_invite_round_trip(self): + data = load_fixture("user_invite.json") + instance = UserInvite.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserInvite.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_invite_minimal_payload(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "pending", + "accepted_at": None, + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": None, + "inviter_user_id": None, + "accepted_user_id": None, + "role_slug": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = UserInvite.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["email"] == data["email"] + assert serialized["state"] == data["state"] + assert serialized["accepted_at"] == data["accepted_at"] + assert serialized["revoked_at"] == data["revoked_at"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["organization_id"] == data["organization_id"] + assert serialized["inviter_user_id"] == data["inviter_user_id"] + assert serialized["accepted_user_id"] == data["accepted_user_id"] + assert serialized["role_slug"] == data["role_slug"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["token"] == data["token"] + assert serialized["accept_invitation_url"] == data["accept_invitation_url"] + + def test_user_invite_preserves_nullable_fields(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "pending", + "accepted_at": None, + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": None, + "inviter_user_id": None, + "accepted_user_id": None, + "role_slug": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = UserInvite.from_dict(data) + serialized = instance.to_dict() + assert serialized["accepted_at"] is None + assert serialized["revoked_at"] is None + assert serialized["organization_id"] is None + assert serialized["inviter_user_id"] is None + assert serialized["accepted_user_id"] is None + assert serialized["role_slug"] is None + + def test_user_invite_round_trips_unknown_enum_values(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "unexpected_user_invite_state", + "accepted_at": None, + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", + "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "accepted_user_id": None, + "role_slug": "admin", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = UserInvite.from_dict(data) + assert instance.to_dict() == data + + def test_user_api_key_round_trip(self): + data = load_fixture("user_api_key.json") + instance = UserApiKey.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserApiKey.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_api_key_minimal_payload(self): + data = { + "object": "api_key", + "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "owner": { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + "name": "Production API Key", + "obfuscated_value": "sk_...3456", + "last_used_at": None, + "expires_at": None, + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserApiKey.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["owner"] == data["owner"] + assert serialized["name"] == data["name"] + assert serialized["obfuscated_value"] == data["obfuscated_value"] + assert serialized["last_used_at"] == data["last_used_at"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["permissions"] == data["permissions"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_user_api_key_preserves_nullable_fields(self): + data = { + "object": "api_key", + "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "owner": { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + "name": "Production API Key", + "obfuscated_value": "sk_...3456", + "last_used_at": None, + "expires_at": None, + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserApiKey.from_dict(data) + serialized = instance.to_dict() + assert serialized["last_used_at"] is None + assert serialized["expires_at"] is None + + def test_user_api_key_with_value_round_trip(self): + data = load_fixture("user_api_key_with_value.json") + instance = UserApiKeyWithValue.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserApiKeyWithValue.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_api_key_with_value_minimal_payload(self): + data = { + "object": "api_key", + "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "owner": { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + "name": "Production API Key", + "obfuscated_value": "sk_...3456", + "last_used_at": None, + "expires_at": None, + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "value": "sk_abcdefghijklmnop123456", + } + instance = UserApiKeyWithValue.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["owner"] == data["owner"] + assert serialized["name"] == data["name"] + assert serialized["obfuscated_value"] == data["obfuscated_value"] + assert serialized["last_used_at"] == data["last_used_at"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["permissions"] == data["permissions"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["value"] == data["value"] + + def test_user_api_key_with_value_preserves_nullable_fields(self): + data = { + "object": "api_key", + "id": "api_key_01EHZNVPK3SFK441A1RGBFSHRT", + "owner": { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + "name": "Production API Key", + "obfuscated_value": "sk_...3456", + "last_used_at": None, + "expires_at": None, + "permissions": ["posts:read", "posts:write"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "value": "sk_abcdefghijklmnop123456", + } + instance = UserApiKeyWithValue.from_dict(data) + serialized = instance.to_dict() + assert serialized["last_used_at"] is None + assert serialized["expires_at"] is None + + def test_email_verification_round_trip(self): + data = load_fixture("email_verification.json") + instance = EmailVerification.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = EmailVerification.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_email_verification_minimal_payload(self): + data = { + "object": "email_verification", + "id": "email_verification_01E4ZCR3C56J083X43JQXF3JK5", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "expires_at": "2026-01-15T12:00:00.000Z", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "code": "123456", + } + instance = EmailVerification.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["user_id"] == data["user_id"] + assert serialized["email"] == data["email"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["code"] == data["code"] + + def test_send_verification_email_response_round_trip(self): + data = load_fixture("send_verification_email_response.json") + instance = SendVerificationEmailResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = SendVerificationEmailResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_send_verification_email_response_minimal_payload(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + } + instance = SendVerificationEmailResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["user"] == data["user"] + + def test_verify_email_response_round_trip(self): + data = load_fixture("verify_email_response.json") + instance = VerifyEmailResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = VerifyEmailResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_verify_email_response_minimal_payload(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + } + instance = VerifyEmailResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["user"] == data["user"] + + def test_password_reset_round_trip(self): + data = load_fixture("password_reset.json") + instance = PasswordReset.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = PasswordReset.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_password_reset_minimal_payload(self): + data = { + "object": "password_reset", + "id": "password_reset_01E4ZCR3C56J083X43JQXF3JK5", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "expires_at": "2026-01-15T12:00:00.000Z", + "created_at": "2026-01-15T12:00:00.000Z", + "password_reset_token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "password_reset_url": "https://your-app.com/reset-password?token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = PasswordReset.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["user_id"] == data["user_id"] + assert serialized["email"] == data["email"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["password_reset_token"] == data["password_reset_token"] + assert serialized["password_reset_url"] == data["password_reset_url"] + + def test_reset_password_response_round_trip(self): + data = load_fixture("reset_password_response.json") + instance = ResetPasswordResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = ResetPasswordResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_reset_password_response_minimal_payload(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + } + instance = ResetPasswordResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["user"] == data["user"] + + def test_email_change_round_trip(self): + data = load_fixture("email_change.json") + instance = EmailChange.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = EmailChange.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_email_change_minimal_payload(self): + data = { + "object": "email_change", + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + "new_email": "new.email@example.com", + "expires_at": "2026-01-15T12:00:00.000Z", + "created_at": "2026-01-15T12:00:00.000Z", + } + instance = EmailChange.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["user"] == data["user"] + assert serialized["new_email"] == data["new_email"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["created_at"] == data["created_at"] + + def test_authenticate_response_round_trip(self): + data = load_fixture("authenticate_response.json") + instance = AuthenticateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthenticateResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authenticate_response_minimal_payload(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", + "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", + } + instance = AuthenticateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["user"] == data["user"] + assert serialized["access_token"] == data["access_token"] + assert serialized["refresh_token"] == data["refresh_token"] + + def test_authenticate_response_omits_absent_optional_non_nullable_fields(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", + "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", + } + instance = AuthenticateResponse.from_dict(data) + serialized = instance.to_dict() + assert "organization_id" not in serialized + assert "authkit_authorization_code" not in serialized + assert "authentication_method" not in serialized + assert "impersonator" not in serialized + assert "oauth_tokens" not in serialized + + def test_authenticate_response_round_trips_unknown_enum_values(self): + data = { + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "marcelina.davis@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", + "authkit_authorization_code": "authkit_authz_code_abc123", + "access_token": "eyJhb.nNzb19vaWRjX2tleV9.lc5Uk4yWVk5In0", + "refresh_token": "yAjhKk123NLIjdrBdGZPf8pLIDvK", + "authentication_method": "unexpected_authenticate_response_authentication_method", + "impersonator": { + "email": "admin@foocorp.com", + "reason": "Investigating an issue with the customer's account.", + }, + "oauth_tokens": { + "provider": "GoogleOAuth", + "refresh_token": "1//04g...", + "access_token": "ya29.a0ARrdaM...", + "expires_at": 1735141800, + "scopes": ["profile", "email", "openid"], + }, + } + instance = AuthenticateResponse.from_dict(data) + assert instance.to_dict() == data + + def test_device_authorization_response_round_trip(self): + data = load_fixture("device_authorization_response.json") + instance = DeviceAuthorizationResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = DeviceAuthorizationResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_device_authorization_response_minimal_payload(self): + data = { + "device_code": "CVE2wOfIFK4vhmiDBntpX9s8KT2f0qngpWYL0LGy9HxYgBRXUKIUkZB9BgIFho5h", + "user_code": "BCDF-GHJK", + "verification_uri": "https://authkit_domain/device", + "expires_in": 300, + } + instance = DeviceAuthorizationResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["device_code"] == data["device_code"] + assert serialized["user_code"] == data["user_code"] + assert serialized["verification_uri"] == data["verification_uri"] + assert serialized["expires_in"] == data["expires_in"] + + def test_device_authorization_response_omits_absent_optional_non_nullable_fields( + self, + ): + data = { + "device_code": "CVE2wOfIFK4vhmiDBntpX9s8KT2f0qngpWYL0LGy9HxYgBRXUKIUkZB9BgIFho5h", + "user_code": "BCDF-GHJK", + "verification_uri": "https://authkit_domain/device", + "expires_in": 300, + } + instance = DeviceAuthorizationResponse.from_dict(data) + serialized = instance.to_dict() + assert "verification_uri_complete" not in serialized + assert "interval" not in serialized + + def test_jwks_response_round_trip(self): + data = load_fixture("jwks_response.json") + instance = JwksResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = JwksResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_jwks_response_minimal_payload(self): + data = { + "keys": [ + { + "alg": "RS256", + "kty": "RSA", + "use": "sig", + "x5c": ["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBCwUA..."], + "n": "0vx7agoebGc...eKnNs", + "e": "AQAB", + "kid": "key_01HXYZ123456789ABCDEFGHIJ", + "x5t#S256": "ZjQzYjI0OT...NmNjU0", + } + ] + } + instance = JwksResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["keys"] == data["keys"] + + def test_jwt_template_response_round_trip(self): + data = load_fixture("jwt_template_response.json") + instance = JWTTemplateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = JWTTemplateResponse.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_jwt_template_response_minimal_payload(self): + data = { + "object": "jwt_template", + "content": '{"urn:myapp:full_name": "{{user.first_name}} {{user.last_name}}", "urn:myapp:email": "{{user.email}}"}', + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = JWTTemplateResponse.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["content"] == data["content"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_jwks_response_keys_round_trip(self): + data = load_fixture("jwks_response_keys.json") + instance = JwksResponseKeys.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = JwksResponseKeys.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_jwks_response_keys_minimal_payload(self): + data = { + "alg": "RS256", + "kty": "RSA", + "use": "sig", + "x5c": ["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBCwUA..."], + "n": "0vx7agoebGc...eKnNs", + "e": "AQAB", + "kid": "key_01HXYZ123456789ABCDEFGHIJ", + "x5t#S256": "ZjQzYjI0OT...NmNjU0", + } + instance = JwksResponseKeys.from_dict(data) + serialized = instance.to_dict() + assert serialized["alg"] == data["alg"] + assert serialized["kty"] == data["kty"] + assert serialized["use"] == data["use"] + assert serialized["x5c"] == data["x5c"] + assert serialized["n"] == data["n"] + assert serialized["e"] == data["e"] + assert serialized["kid"] == data["kid"] + assert serialized["x5t#S256"] == data["x5t#S256"] + + def test_authenticate_response_impersonator_round_trip(self): + data = load_fixture("authenticate_response_impersonator.json") + instance = AuthenticateResponseImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthenticateResponseImpersonator.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authenticate_response_impersonator_minimal_payload(self): + data = {"email": "admin@foocorp.com", "reason": None} + instance = AuthenticateResponseImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized["email"] == data["email"] + assert serialized["reason"] == data["reason"] + + def test_authenticate_response_impersonator_preserves_nullable_fields(self): + data = {"email": "admin@foocorp.com", "reason": None} + instance = AuthenticateResponseImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized["reason"] is None + + def test_authenticate_response_oauth_token_round_trip(self): + data = load_fixture("authenticate_response_oauth_token.json") + instance = AuthenticateResponseOAuthToken.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthenticateResponseOAuthToken.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authenticate_response_oauth_token_minimal_payload(self): + data = { + "provider": "GoogleOAuth", + "refresh_token": "1//04g...", + "access_token": "ya29.a0ARrdaM...", + "expires_at": 1735141800, + "scopes": ["profile", "email", "openid"], + } + instance = AuthenticateResponseOAuthToken.from_dict(data) + serialized = instance.to_dict() + assert serialized["provider"] == data["provider"] + assert serialized["refresh_token"] == data["refresh_token"] + assert serialized["access_token"] == data["access_token"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["scopes"] == data["scopes"] + + def test_user_api_key_with_value_owner_round_trip(self): + data = load_fixture("user_api_key_with_value_owner.json") + instance = UserApiKeyWithValueOwner.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserApiKeyWithValueOwner.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_api_key_with_value_owner_minimal_payload(self): + data = { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + } + instance = UserApiKeyWithValueOwner.from_dict(data) + serialized = instance.to_dict() + assert serialized["type"] == data["type"] + assert serialized["id"] == data["id"] + assert serialized["organization_id"] == data["organization_id"] + + def test_user_api_key_owner_round_trip(self): + data = load_fixture("user_api_key_owner.json") + instance = UserApiKeyOwner.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserApiKeyOwner.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_api_key_owner_minimal_payload(self): + data = { + "type": "user", + "id": "user_01EHZNVPK3SFK441A1RGBFSHRT", + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + } + instance = UserApiKeyOwner.from_dict(data) + serialized = instance.to_dict() + assert serialized["type"] == data["type"] + assert serialized["id"] == data["id"] + assert serialized["organization_id"] == data["organization_id"] + + def test_authorized_connect_application_list_data_round_trip(self): + data = load_fixture("authorized_connect_application_list_data.json") + instance = AuthorizedConnectApplicationListData.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = AuthorizedConnectApplicationListData.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_authorized_connect_application_list_data_minimal_payload(self): + data = { + "object": "authorized_connect_application", + "id": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", + "granted_scopes": ["openid", "profile", "email"], + "application": { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": "An application for managing user access", + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "oauth", + "redirect_uris": [ + {"uri": "https://example.com/callback", "default": True} + ], + "uses_pkce": True, + "is_first_party": True, + "was_dynamically_registered": True, + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + } + instance = AuthorizedConnectApplicationListData.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["granted_scopes"] == data["granted_scopes"] + assert serialized["application"] == data["application"] + + def test_authorized_connect_application_list_data_omits_absent_optional_non_nullable_fields( + self, + ): + data = { + "object": "authorized_connect_application", + "id": "authorized_connect_app_01HXYZ123456789ABCDEFGHIJ", + "granted_scopes": ["openid", "profile", "email"], + "application": { + "object": "connect_application", + "id": "conn_app_01HXYZ123456789ABCDEFGHIJ", + "client_id": "client_01HXYZ123456789ABCDEFGHIJ", + "description": "An application for managing user access", + "name": "My Application", + "scopes": ["openid", "profile", "email"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "application_type": "oauth", + "redirect_uris": [ + {"uri": "https://example.com/callback", "default": True} + ], + "uses_pkce": True, + "is_first_party": True, + "was_dynamically_registered": True, + "organization_id": "org_01EHZNVPK3SFK441A1RGBFSHRT", + }, + } + instance = AuthorizedConnectApplicationListData.from_dict(data) + serialized = instance.to_dict() + assert "oauth_resource" not in serialized + + def test_invitation_round_trip(self): + data = load_fixture("invitation.json") + instance = Invitation.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = Invitation.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_invitation_minimal_payload(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "accepted", + "accepted_at": None, + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": None, + "inviter_user_id": None, + "accepted_user_id": None, + "role_slug": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = Invitation.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["email"] == data["email"] + assert serialized["state"] == data["state"] + assert serialized["accepted_at"] == data["accepted_at"] + assert serialized["revoked_at"] == data["revoked_at"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["organization_id"] == data["organization_id"] + assert serialized["inviter_user_id"] == data["inviter_user_id"] + assert serialized["accepted_user_id"] == data["accepted_user_id"] + assert serialized["role_slug"] == data["role_slug"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + assert serialized["token"] == data["token"] + assert serialized["accept_invitation_url"] == data["accept_invitation_url"] + + def test_invitation_preserves_nullable_fields(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "accepted", + "accepted_at": None, + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": None, + "inviter_user_id": None, + "accepted_user_id": None, + "role_slug": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = Invitation.from_dict(data) + serialized = instance.to_dict() + assert serialized["accepted_at"] is None + assert serialized["revoked_at"] is None + assert serialized["organization_id"] is None + assert serialized["inviter_user_id"] is None + assert serialized["accepted_user_id"] is None + assert serialized["role_slug"] is None + + def test_invitation_round_trips_unknown_enum_values(self): + data = { + "object": "invitation", + "id": "invitation_01E4ZCR3C56J083X43JQXF3JK5", + "email": "marcelina.davis@example.com", + "state": "unexpected_invitation_state", + "accepted_at": "2026-01-15T12:00:00.000Z", + "revoked_at": None, + "expires_at": "2026-01-15T12:00:00.000Z", + "organization_id": "org_01E4ZCR3C56J083X43JQXF3JK5", + "inviter_user_id": "user_01HYGBX8ZGD19949T3BM4FW1C3", + "accepted_user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "role_slug": "admin", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + "token": "Z1uX3RbwcIl5fIGJJJCXXisdI", + "accept_invitation_url": "https://your-app.com/invite?invitation_token=Z1uX3RbwcIl5fIGJJJCXXisdI", + } + instance = Invitation.from_dict(data) + assert instance.to_dict() == data + + def test_email_change_confirmation_round_trip(self): + data = load_fixture("email_change_confirmation.json") + instance = EmailChangeConfirmation.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = EmailChangeConfirmation.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_email_change_confirmation_minimal_payload(self): + data = { + "object": "email_change_confirmation", + "user": { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "new.email@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + }, + } + instance = EmailChangeConfirmation.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["user"] == data["user"] + + def test_email_change_confirmation_user_round_trip(self): + data = load_fixture("email_change_confirmation_user.json") + instance = EmailChangeConfirmationUser.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = EmailChangeConfirmationUser.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_email_change_confirmation_user_minimal_payload(self): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": None, + "last_name": None, + "profile_picture_url": None, + "email": "new.email@example.com", + "email_verified": True, + "external_id": None, + "last_sign_in_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = EmailChangeConfirmationUser.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["first_name"] == data["first_name"] + assert serialized["last_name"] == data["last_name"] + assert serialized["profile_picture_url"] == data["profile_picture_url"] + assert serialized["email"] == data["email"] + assert serialized["email_verified"] == data["email_verified"] + assert serialized["external_id"] == data["external_id"] + assert serialized["last_sign_in_at"] == data["last_sign_in_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_email_change_confirmation_user_omits_absent_optional_non_nullable_fields( + self, + ): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": "Marcelina", + "last_name": "Davis", + "name": "Marcelina Davis", + "profile_picture_url": "https://workoscdn.com/images/v1/123abc", + "email": "new.email@example.com", + "email_verified": True, + "external_id": "f1ffa2b2-c20b-4d39-be5c-212726e11222", + "last_sign_in_at": "2025-06-25T19:07:33.000Z", + "locale": "en-US", + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = EmailChangeConfirmationUser.from_dict(data) + serialized = instance.to_dict() + assert "metadata" not in serialized + + def test_email_change_confirmation_user_preserves_nullable_fields(self): + data = { + "object": "user", + "id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "first_name": None, + "last_name": None, + "name": None, + "profile_picture_url": None, + "email": "new.email@example.com", + "email_verified": True, + "external_id": None, + "metadata": {"timezone": "America/New_York"}, + "last_sign_in_at": None, + "locale": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = EmailChangeConfirmationUser.from_dict(data) + serialized = instance.to_dict() + assert serialized["first_name"] is None + assert serialized["last_name"] is None + assert serialized["name"] is None + assert serialized["profile_picture_url"] is None + assert serialized["external_id"] is None + assert serialized["last_sign_in_at"] is None + assert serialized["locale"] is None + + def test_user_identities_get_item_round_trip(self): + data = load_fixture("user_identities_get_item.json") + instance = UserIdentitiesGetItem.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserIdentitiesGetItem.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_identities_get_item_minimal_payload(self): + data = { + "idp_id": "4F42ABDE-1E44-4B66-824A-5F733C037A6D", + "type": "OAuth", + "provider": "MicrosoftOAuth", + } + instance = UserIdentitiesGetItem.from_dict(data) + serialized = instance.to_dict() + assert serialized["idp_id"] == data["idp_id"] + assert serialized["type"] == data["type"] + assert serialized["provider"] == data["provider"] + + def test_user_identities_get_item_round_trips_unknown_enum_values(self): + data = { + "idp_id": "4F42ABDE-1E44-4B66-824A-5F733C037A6D", + "type": "OAuth", + "provider": "unexpected_user_identities_get_item_provider", + } + instance = UserIdentitiesGetItem.from_dict(data) + assert instance.to_dict() == data + + def test_user_sessions_list_item_round_trip(self): + data = load_fixture("user_sessions_list_item.json") + instance = UserSessionsListItem.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserSessionsListItem.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_sessions_list_item_minimal_payload(self): + data = { + "object": "session", + "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "ip_address": None, + "user_agent": None, + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "auth_method": "sso", + "status": "active", + "expires_at": "2026-01-15T12:00:00.000Z", + "ended_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserSessionsListItem.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["ip_address"] == data["ip_address"] + assert serialized["user_agent"] == data["user_agent"] + assert serialized["user_id"] == data["user_id"] + assert serialized["auth_method"] == data["auth_method"] + assert serialized["status"] == data["status"] + assert serialized["expires_at"] == data["expires_at"] + assert serialized["ended_at"] == data["ended_at"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_user_sessions_list_item_omits_absent_optional_non_nullable_fields(self): + data = { + "object": "session", + "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "ip_address": "198.51.100.42", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "auth_method": "sso", + "status": "active", + "expires_at": "2026-01-15T12:00:00.000Z", + "ended_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserSessionsListItem.from_dict(data) + serialized = instance.to_dict() + assert "impersonator" not in serialized + assert "organization_id" not in serialized + + def test_user_sessions_list_item_preserves_nullable_fields(self): + data = { + "object": "session", + "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "impersonator": { + "email": "admin@foocorp.com", + "reason": "Investigating an issue with the customer's account.", + }, + "ip_address": None, + "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", + "user_agent": None, + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "auth_method": "sso", + "status": "active", + "expires_at": "2026-01-15T12:00:00.000Z", + "ended_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserSessionsListItem.from_dict(data) + serialized = instance.to_dict() + assert serialized["ip_address"] is None + assert serialized["user_agent"] is None + assert serialized["ended_at"] is None + + def test_user_sessions_list_item_round_trips_unknown_enum_values(self): + data = { + "object": "session", + "id": "session_01H93ZY4F80QPBEZ1R5B2SHQG8", + "impersonator": { + "email": "admin@foocorp.com", + "reason": "Investigating an issue with the customer's account.", + }, + "ip_address": "198.51.100.42", + "organization_id": "org_01H945H0YD4F97JN9MATX7BYAG", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36", + "user_id": "user_01E4ZCR3C56J083X43JQXF3JK5", + "auth_method": "unexpected_user_sessions_list_item_auth_method", + "status": "active", + "expires_at": "2026-01-15T12:00:00.000Z", + "ended_at": None, + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = UserSessionsListItem.from_dict(data) + assert instance.to_dict() == data + + def test_user_sessions_impersonator_round_trip(self): + data = load_fixture("user_sessions_impersonator.json") + instance = UserSessionsImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = UserSessionsImpersonator.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_user_sessions_impersonator_minimal_payload(self): + data = {"email": "admin@foocorp.com", "reason": None} + instance = UserSessionsImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized["email"] == data["email"] + assert serialized["reason"] == data["reason"] + + def test_user_sessions_impersonator_preserves_nullable_fields(self): + data = {"email": "admin@foocorp.com", "reason": None} + instance = UserSessionsImpersonator.from_dict(data) + serialized = instance.to_dict() + assert serialized["reason"] is None diff --git a/tests/test_webhooks_models_round_trip.py b/tests/test_webhooks_models_round_trip.py new file mode 100644 index 00000000..d442b2f3 --- /dev/null +++ b/tests/test_webhooks_models_round_trip.py @@ -0,0 +1,53 @@ +# This file is auto-generated by oagen. Do not edit. + +"""Model round-trip tests: from_dict(to_dict()) preserves data.""" + +from tests.generated_helpers import load_fixture + +from workos.webhooks.models import WebhookEndpoint + + +class TestModelRoundTrip: + def test_webhook_endpoint_round_trip(self): + data = load_fixture("webhook_endpoint.json") + instance = WebhookEndpoint.from_dict(data) + serialized = instance.to_dict() + assert serialized == data + restored = WebhookEndpoint.from_dict(serialized) + assert restored.to_dict() == serialized + + def test_webhook_endpoint_minimal_payload(self): + data = { + "object": "webhook_endpoint", + "id": "we_0123456789", + "endpoint_url": "https://example.com/webhooks", + "secret": "whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4", + "status": "enabled", + "events": ["user.created", "dsync.user.created"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = WebhookEndpoint.from_dict(data) + serialized = instance.to_dict() + assert serialized["object"] == data["object"] + assert serialized["id"] == data["id"] + assert serialized["endpoint_url"] == data["endpoint_url"] + assert serialized["secret"] == data["secret"] + assert serialized["status"] == data["status"] + assert serialized["events"] == data["events"] + assert serialized["created_at"] == data["created_at"] + assert serialized["updated_at"] == data["updated_at"] + + def test_webhook_endpoint_round_trips_unknown_enum_values(self): + data = { + "object": "webhook_endpoint", + "id": "we_0123456789", + "endpoint_url": "https://example.com/webhooks", + "secret": "whsec_0FWAiVGkEfGBqqsJH4aNAGBJ4", + "status": "unexpected_webhook_endpoint_status", + "events": ["user.created", "dsync.user.created"], + "created_at": "2026-01-15T12:00:00.000Z", + "updated_at": "2026-01-15T12:00:00.000Z", + } + instance = WebhookEndpoint.from_dict(data) + assert instance.to_dict() == data From c7b104b9e3185c005ad2e9ef836db37789e16e81 Mon Sep 17 00:00:00 2001 From: "workos-sdk-automation[bot]" <255426317+workos-sdk-automation[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:19:26 +0000 Subject: [PATCH 2/2] chore(generated): add release notes fragment --- ...04603f99d7258ac681b157d7c84bbefc43529ae.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .changelog-pending/2026-07-01T18-19-26-704603f99d7258ac681b157d7c84bbefc43529ae.md diff --git a/.changelog-pending/2026-07-01T18-19-26-704603f99d7258ac681b157d7c84bbefc43529ae.md b/.changelog-pending/2026-07-01T18-19-26-704603f99d7258ac681b157d7c84bbefc43529ae.md new file mode 100644 index 00000000..81a00d1f --- /dev/null +++ b/.changelog-pending/2026-07-01T18-19-26-704603f99d7258ac681b157d7c84bbefc43529ae.md @@ -0,0 +1,49 @@ +* [#683](https://github.com/workos/workos-python/pull/683) fix(generated): regenerate from spec + + **⚠️ Breaking** + * **[user_management](https://workos.com/docs/reference/authkit/user)**: + * Removed model `SessionReauthenticated` + * Removed model `SessionReauthenticatedData` + * Removed model `SessionReauthenticatedDataImpersonator` + * Removed enum `SessionReauthenticatedDataAuthMethod` + * Removed enum `SessionReauthenticatedDataStatus` + + **Features** + * **[webhooks](https://workos.com/docs/reference/webhooks)**: + * Added `agent.registration.created` to `CreateWebhookEndpointEvents` + * Added `agent.registration.claim.attempt.created` to `CreateWebhookEndpointEvents` + * Added `agent.registration.claim.completed` to `CreateWebhookEndpointEvents` + * Added `agent.registration.credential.issued` to `CreateWebhookEndpointEvents` + * Added `agent.registration.organization.switched` to `CreateWebhookEndpointEvents` + * Added `authentication.reauthentication_succeeded` to `CreateWebhookEndpointEvents` + * Added `agent.registration.created` to `UpdateWebhookEndpointEvents` + * Added `agent.registration.claim.attempt.created` to `UpdateWebhookEndpointEvents` + * Added `agent.registration.claim.completed` to `UpdateWebhookEndpointEvents` + * Added `agent.registration.credential.issued` to `UpdateWebhookEndpointEvents` + * Added `agent.registration.organization.switched` to `UpdateWebhookEndpointEvents` + * Added `authentication.reauthentication_succeeded` to `UpdateWebhookEndpointEvents` + * **[webhooks](https://workos.com/docs/reference/webhooks)**: + * Added `session.reauthenticated` to `CreateWebhookEndpointEvents` + * Added `session.reauthenticated` to `UpdateWebhookEndpointEvents` + * **[webhooks](https://workos.com/docs/reference/webhooks)**: + * Added `pipes.connected_account.connection_failed` to `CreateWebhookEndpointEvents` + * Added `pipes.connected_account.connection_failed` to `UpdateWebhookEndpointEvents` + * **[user_management](https://workos.com/docs/reference/authkit/user)**: + * Added model `UserRoleAssignmentSource` + * Added `source` to `UserRoleAssignment` + * Added enum `UserRoleAssignmentSourceType` + * Added parameter `UserManagementAuthentication.authorize.max_age` + * Added endpoint `GET /user_management/cors_origins` + * Added endpoint `GET /user_management/redirect_uris` + * **[audit_logs](https://workos.com/docs/reference/audit-logs)**: + * Changed the format of `AuditLogExportCreation.range_start` + * Changed the format of `AuditLogExportCreation.range_end` + * **[audit_logs](https://workos.com/docs/reference/audit-logs)**: + * Added `expired` to `AuditLogExportState` + + **Fixes** + * **[admin_portal](https://workos.com/docs/reference/admin-portal)**: + * Removed `intent_options` from `GenerateLink` + * **[webhooks](https://workos.com/docs/reference/webhooks)**: + * Removed `session.reauthenticated` from `CreateWebhookEndpointEvents` + * Removed `session.reauthenticated` from `UpdateWebhookEndpointEvents`