diff --git a/.changelog-pending/2026-06-25T20-30-47-053f61e91f935b7602605a97e69c6db058ecabed.md b/.changelog-pending/2026-06-25T20-30-47-053f61e91f935b7602605a97e69c6db058ecabed.md new file mode 100644 index 00000000..edb16e06 --- /dev/null +++ b/.changelog-pending/2026-06-25T20-30-47-053f61e91f935b7602605a97e69c6db058ecabed.md @@ -0,0 +1,5 @@ +* [#676](https://github.com/workos/workos-python/pull/676) fix(generated): regenerate from spec + + **Fixes** + * **[organization_membership](https://workos.com/docs/reference/authkit/organization-membership)**: + * Added `roles` to organization membership models diff --git a/.last-synced-sha b/.last-synced-sha index 409f7391..d5b98283 100644 --- a/.last-synced-sha +++ b/.last-synced-sha @@ -1 +1 @@ -b6a68da8bd60c1478e0a86ca97c75448677e8871 +1a2f47b20f63f2c8f0eb56bbd2adb3b5947d693a diff --git a/src/workos/common/__init__.py b/src/workos/common/__init__.py index 83b7feb6..884a9b6c 100644 --- a/src/workos/common/__init__.py +++ b/src/workos/common/__init__.py @@ -30,6 +30,7 @@ AuthenticateResponseAuthenticationMethod as AuthenticateResponseAuthenticationMethod, ) from .models import AuthenticateResponseImpersonator as AuthenticateResponseImpersonator +from .models import * # noqa: F401,F403 from .models import AuthenticationChallenge as AuthenticationChallenge from .models import ( AuthenticationEmailVerificationFailed as AuthenticationEmailVerificationFailed, @@ -311,12 +312,6 @@ from .models import OrganizationDomainDataState as OrganizationDomainDataState from .models import OrganizationDomainDeleted as OrganizationDomainDeleted from .models import OrganizationDomainDeletedData as OrganizationDomainDeletedData -from .models import ( - OrganizationDomainStandAloneState as OrganizationDomainStandAloneState, -) -from .models import ( - OrganizationDomainStandAloneVerificationStrategy as OrganizationDomainStandAloneVerificationStrategy, -) from .models import OrganizationDomainState as OrganizationDomainState from .models import OrganizationDomainUpdated as OrganizationDomainUpdated from .models import OrganizationDomainUpdatedData as OrganizationDomainUpdatedData diff --git a/src/workos/common/models/__init__.py b/src/workos/common/models/__init__.py index 440e41f3..649a299d 100644 --- a/src/workos/common/models/__init__.py +++ b/src/workos/common/models/__init__.py @@ -42,6 +42,7 @@ from .authenticate_response_impersonator import ( AuthenticateResponseImpersonator as AuthenticateResponseImpersonator, ) +from .authentication_radar_risk_detected_data_action import * # noqa: F401,F403 from .authentication_challenge import AuthenticationChallenge as AuthenticationChallenge from .authentication_email_verification_failed import ( AuthenticationEmailVerificationFailed as AuthenticationEmailVerificationFailed, @@ -221,6 +222,16 @@ ConnectedAccountAuthMethod as ConnectedAccountAuthMethod, ) from .connected_account_state import ConnectedAccountState as ConnectedAccountState +from .connection_activated_data_connection_type import * # noqa: F401,F403 +from .connection_activated_data_state import * # noqa: F401,F403 +from .connection_activated_data_status import * # noqa: F401,F403 +from .connection_deactivated_data_connection_type import * # noqa: F401,F403 +from .connection_deactivated_data_state import * # noqa: F401,F403 +from .connection_deactivated_data_status import * # noqa: F401,F403 +from .connection_deleted_data_connection_type import * # noqa: F401,F403 +from .connection_deleted_data_state import * # noqa: F401,F403 +from .connection_saml_certificate_renewal_required_data_certificate_certificate_type import * # noqa: F401,F403 +from .connection_saml_certificate_renewed_data_certificate_certificate_type import * # noqa: F401,F403 from .connection_activated import ConnectionActivated as ConnectionActivated from .connection_activated_data import ( ConnectionActivatedData as ConnectionActivatedData, @@ -291,6 +302,7 @@ from .data_integrations_list_response_data_ownership import ( DataIntegrationsListResponseDataOwnership as DataIntegrationsListResponseDataOwnership, ) +from .directory_user_state import * # noqa: F401,F403 from .directory_group import DirectoryGroup as DirectoryGroup from .directory_state import DirectoryState as DirectoryState from .directory_type import DirectoryType as DirectoryType @@ -299,6 +311,11 @@ from .directory_user_with_groups_state import ( DirectoryUserWithGroupsState as DirectoryUserWithGroupsState, ) +from .dsync_activated_data_state import * # noqa: F401,F403 +from .dsync_activated_data_type import * # noqa: F401,F403 +from .dsync_deleted_data_state import * # noqa: F401,F403 +from .dsync_deleted_data_type import * # noqa: F401,F403 +from .dsync_user_updated_data_state import * # noqa: F401,F403 from .dsync_activated import DsyncActivated as DsyncActivated from .dsync_activated_data import DsyncActivatedData as DsyncActivatedData from .dsync_activated_data_domain import ( @@ -336,6 +353,7 @@ EmailVerificationCreatedData as EmailVerificationCreatedData, ) from .error_response import ErrorResponse as ErrorResponse +from .event_context_actor_source import * # noqa: F401,F403 from .event_context import EventContext as EventContext from .event_context_actor import EventContextActor as EventContextActor from .event_context_google_analytics_session import ( @@ -344,6 +362,12 @@ from .feature_flag import FeatureFlag as FeatureFlag from .feature_flag_owner import FeatureFlagOwner as FeatureFlagOwner from .flag import Flag as Flag +from .flag_created_context_actor_source import * # noqa: F401,F403 +from .flag_deleted_context_actor_source import * # noqa: F401,F403 +from .flag_rule_updated_context_access_type import * # noqa: F401,F403 +from .flag_rule_updated_context_actor_source import * # noqa: F401,F403 +from .flag_rule_updated_context_previous_attribute_context_access_type import * # noqa: F401,F403 +from .flag_updated_context_actor_source import * # noqa: F401,F403 from .flag_created import FlagCreated as FlagCreated from .flag_created_context import FlagCreatedContext as FlagCreatedContext from .flag_created_context_actor import ( @@ -417,6 +441,10 @@ from .group_member_removed import GroupMemberRemoved as GroupMemberRemoved from .group_member_removed_data import GroupMemberRemovedData as GroupMemberRemovedData from .group_updated import GroupUpdated as GroupUpdated +from .invitation_accepted_data_state import * # noqa: F401,F403 +from .invitation_created_data_state import * # noqa: F401,F403 +from .invitation_resent_data_state import * # noqa: F401,F403 +from .invitation_revoked_data_state import * # noqa: F401,F403 from .invitation_accepted import InvitationAccepted as InvitationAccepted from .invitation_accepted_data import InvitationAcceptedData as InvitationAcceptedData from .invitation_created import InvitationCreated as InvitationCreated @@ -429,6 +457,28 @@ from .list_metadata import ListMetadata as ListMetadata from .magic_auth_created import MagicAuthCreated as MagicAuthCreated from .magic_auth_created_data import MagicAuthCreatedData as MagicAuthCreatedData +from .organization_created_data_domain_state import * # noqa: F401,F403 +from .organization_created_data_domain_verification_strategy import * # noqa: F401,F403 +from .organization_deleted_data_domain_state import * # noqa: F401,F403 +from .organization_deleted_data_domain_verification_strategy import * # noqa: F401,F403 +from .organization_domain_created_data_state import * # noqa: F401,F403 +from .organization_domain_created_data_verification_strategy import * # noqa: F401,F403 +from .organization_domain_deleted_data_state import * # noqa: F401,F403 +from .organization_domain_deleted_data_verification_strategy import * # noqa: F401,F403 +from .organization_domain_stand_alone_state import * # noqa: F401,F403 +from .organization_domain_stand_alone_verification_strategy import * # noqa: F401,F403 +from .organization_domain_updated_data_state import * # noqa: F401,F403 +from .organization_domain_updated_data_verification_strategy import * # noqa: F401,F403 +from .organization_domain_verification_failed_data_organization_domain_state import * # noqa: F401,F403 +from .organization_domain_verification_failed_data_organization_domain_verification_strategy import * # noqa: F401,F403 +from .organization_domain_verification_failed_data_reason import * # noqa: F401,F403 +from .organization_domain_verified_data_state import * # noqa: F401,F403 +from .organization_domain_verified_data_verification_strategy import * # noqa: F401,F403 +from .organization_membership_created_data_status import * # noqa: F401,F403 +from .organization_membership_deleted_data_status import * # noqa: F401,F403 +from .organization_membership_updated_data_status import * # noqa: F401,F403 +from .organization_updated_data_domain_state import * # noqa: F401,F403 +from .organization_updated_data_domain_verification_strategy import * # noqa: F401,F403 from .organization_created import OrganizationCreated as OrganizationCreated from .organization_created_data import ( OrganizationCreatedData as OrganizationCreatedData, @@ -459,12 +509,6 @@ from .organization_domain_deleted_data import ( OrganizationDomainDeletedData as OrganizationDomainDeletedData, ) -from .organization_domain_stand_alone_state import ( - OrganizationDomainStandAloneState as OrganizationDomainStandAloneState, -) -from .organization_domain_stand_alone_verification_strategy import ( - OrganizationDomainStandAloneVerificationStrategy as OrganizationDomainStandAloneVerificationStrategy, -) from .organization_domain_state import ( OrganizationDomainState as OrganizationDomainState, ) @@ -553,6 +597,7 @@ from .permission_deleted_data import PermissionDeletedData as PermissionDeletedData from .permission_updated import PermissionUpdated as PermissionUpdated from .permission_updated_data import PermissionUpdatedData as PermissionUpdatedData +from .pipe_connected_account_state import * # noqa: F401,F403 from .pipe_connected_account import PipeConnectedAccount as PipeConnectedAccount from .pipes_connected_account_connected import ( PipesConnectedAccountConnected as PipesConnectedAccountConnected, @@ -589,6 +634,10 @@ from .role_type import RoleType as RoleType from .role_updated import RoleUpdated as RoleUpdated from .role_updated_data import RoleUpdatedData as RoleUpdatedData +from .session_created_data_auth_method import * # noqa: F401,F403 +from .session_created_data_status import * # noqa: F401,F403 +from .session_revoked_data_auth_method import * # noqa: F401,F403 +from .session_revoked_data_status import * # noqa: F401,F403 from .session_created import SessionCreated as SessionCreated from .session_created_data import SessionCreatedData as SessionCreatedData from .session_created_data_impersonator import ( @@ -641,6 +690,16 @@ from .user_sessions_list_item import UserSessionsListItem as UserSessionsListItem from .user_sessions_status import UserSessionsStatus as UserSessionsStatus from .user_updated import UserUpdated as UserUpdated +from .vault_byok_key_provider import * # noqa: F401,F403 +from .vault_data_created_data_actor_source import * # noqa: F401,F403 +from .vault_data_deleted_data_actor_source import * # noqa: F401,F403 +from .vault_data_read_data_actor_source import * # noqa: F401,F403 +from .vault_data_updated_data_actor_source import * # noqa: F401,F403 +from .vault_dek_decrypted_data_actor_source import * # noqa: F401,F403 +from .vault_dek_read_data_actor_source import * # noqa: F401,F403 +from .vault_kek_created_data_actor_source import * # noqa: F401,F403 +from .vault_metadata_read_data_actor_source import * # noqa: F401,F403 +from .vault_names_listed_data_actor_source import * # noqa: F401,F403 from .vault_byok_key_deleted import VaultByokKeyDeleted as VaultByokKeyDeleted from .vault_byok_key_deleted_data import ( VaultByokKeyDeletedData as VaultByokKeyDeletedData, @@ -669,6 +728,7 @@ from .vault_metadata_read_data import VaultMetadataReadData as VaultMetadataReadData from .vault_names_listed import VaultNamesListed as VaultNamesListed from .vault_names_listed_data import VaultNamesListedData as VaultNamesListedData +from .waitlist_user_state import * # noqa: F401,F403 from .waitlist_user import WaitlistUser as WaitlistUser from .waitlist_user_approved import WaitlistUserApproved as WaitlistUserApproved from .waitlist_user_created import WaitlistUserCreated as WaitlistUserCreated diff --git a/src/workos/organization_domains/models/__init__.py b/src/workos/organization_domains/models/__init__.py index a8435a78..cc7840c8 100644 --- a/src/workos/organization_domains/models/__init__.py +++ b/src/workos/organization_domains/models/__init__.py @@ -3,9 +3,7 @@ from .create_organization_domain import ( CreateOrganizationDomain as CreateOrganizationDomain, ) +from .organization_domain_stand_alone import * # noqa: F401,F403 from workos.common.models.organization_domain import ( OrganizationDomain as OrganizationDomain, ) -from .organization_domain_stand_alone import ( - OrganizationDomainStandAlone as OrganizationDomainStandAlone, -) diff --git a/src/workos/organization_membership/models/organization_membership.py b/src/workos/organization_membership/models/organization_membership.py index 53008d7f..f95f478c 100644 --- a/src/workos/organization_membership/models/organization_membership.py +++ b/src/workos/organization_membership/models/organization_membership.py @@ -6,7 +6,7 @@ from datetime import datetime from enum import Enum from typing import cast -from typing import Any, Dict, Literal, Optional +from typing import Any, Dict, List, Literal, Optional from workos._types import _raise_deserialize_error from workos._types import _format_datetime, _parse_datetime @@ -39,6 +39,8 @@ class OrganizationMembership: """An ISO 8601 timestamp.""" role: "SlimRole" """The primary role assigned to the user within the organization.""" + roles: List["SlimRole"] + """The list of roles assigned to the user within the organization.""" user: "User" """The user that belongs to the organization through this membership.""" organization_name: Optional[str] = None @@ -60,6 +62,10 @@ def from_dict(cls, data: Dict[str, Any]) -> "OrganizationMembership": created_at=_parse_datetime(data["created_at"]), updated_at=_parse_datetime(data["updated_at"]), role=SlimRole.from_dict(cast(Dict[str, Any], data["role"])), + roles=[ + SlimRole.from_dict(cast(Dict[str, Any], item)) + for item in cast(list[Any], data["roles"]) + ], user=User.from_dict(cast(Dict[str, Any], data["user"])), organization_name=data.get("organization_name"), custom_attributes=data.get("custom_attributes"), @@ -81,6 +87,7 @@ def to_dict(self) -> Dict[str, Any]: result["created_at"] = _format_datetime(self.created_at) result["updated_at"] = _format_datetime(self.updated_at) result["role"] = self.role.to_dict() + result["roles"] = [item.to_dict() for item in self.roles] result["user"] = self.user.to_dict() if self.organization_name is not None: result["organization_name"] = self.organization_name diff --git a/tests/fixtures/list_user_organization_membership.json b/tests/fixtures/list_user_organization_membership.json index d97c4dcf..ddc8fdab 100644 --- a/tests/fixtures/list_user_organization_membership.json +++ b/tests/fixtures/list_user_organization_membership.json @@ -18,6 +18,11 @@ "role": { "slug": "admin" }, + "roles": [ + { + "slug": "admin" + } + ], "user": { "object": "user", "id": "user_01E4ZCR3C56J083X43JQXF3JK5", diff --git a/tests/fixtures/organization_membership.json b/tests/fixtures/organization_membership.json index c21b9611..2cc50650 100644 --- a/tests/fixtures/organization_membership.json +++ b/tests/fixtures/organization_membership.json @@ -16,6 +16,11 @@ "role": { "slug": "admin" }, + "roles": [ + { + "slug": "admin" + } + ], "user": { "object": "user", "id": "user_01E4ZCR3C56J083X43JQXF3JK5", diff --git a/tests/fixtures/user_organization_membership.json b/tests/fixtures/user_organization_membership.json index 93a4fff6..127ab8db 100644 --- a/tests/fixtures/user_organization_membership.json +++ b/tests/fixtures/user_organization_membership.json @@ -16,6 +16,11 @@ "role": { "slug": "admin" }, + "roles": [ + { + "slug": "admin" + } + ], "user": { "object": "user", "id": "user_01E4ZCR3C56J083X43JQXF3JK5", diff --git a/tests/test_models_round_trip.py b/tests/test_models_round_trip.py index 162d74cd..341c98c7 100644 --- a/tests/test_models_round_trip.py +++ b/tests/test_models_round_trip.py @@ -334,10 +334,7 @@ AuthenticationFactorTotp, UserAuthenticationFactorEnrollResponse, ) -from workos.organization_domains.models import ( - OrganizationDomain, - OrganizationDomainStandAlone, -) +from workos.organization_domains.models import OrganizationDomain from workos.organization_membership.models import ( OrganizationMembership, UserOrganizationMembership, @@ -14712,66 +14709,6 @@ def test_waitlist_user_denied_omits_absent_optional_non_nullable_fields(self): serialized = instance.to_dict() assert "context" not in serialized - def test_organization_domain_stand_alone_round_trip(self): - data = load_fixture("organization_domain_stand_alone.json") - instance = OrganizationDomainStandAlone.from_dict(data) - serialized = instance.to_dict() - assert serialized == data - restored = OrganizationDomainStandAlone.from_dict(serialized) - assert restored.to_dict() == serialized - - def test_organization_domain_stand_alone_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 = OrganizationDomainStandAlone.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_stand_alone_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 = OrganizationDomainStandAlone.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_stand_alone_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_stand_alone_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 = OrganizationDomainStandAlone.from_dict(data) - assert instance.to_dict() == data - def test_flag_round_trip(self): data = load_fixture("flag.json") instance = Flag.from_dict(data) @@ -15707,6 +15644,7 @@ def test_user_organization_membership_minimal_payload(self): "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", @@ -15735,6 +15673,7 @@ def test_user_organization_membership_minimal_payload(self): 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( @@ -15750,6 +15689,7 @@ def test_user_organization_membership_omits_absent_optional_non_nullable_fields( "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", @@ -15789,6 +15729,7 @@ def test_user_organization_membership_round_trips_unknown_enum_values(self): "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", @@ -16587,6 +16528,64 @@ def test_jwt_template_response_minimal_payload(self): 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) @@ -16935,64 +16934,6 @@ def test_audit_log_configuration_log_stream_round_trips_unknown_enum_values(self instance = AuditLogConfigurationLogStream.from_dict(data) assert instance.to_dict() == data - 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_organization_api_key_with_value_owner_round_trip(self): data = load_fixture("organization_api_key_with_value_owner.json") instance = OrganizationApiKeyWithValueOwner.from_dict(data) @@ -17838,6 +17779,7 @@ def test_organization_membership_minimal_payload(self): "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", @@ -17866,6 +17808,7 @@ def test_organization_membership_minimal_payload(self): 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): @@ -17879,6 +17822,7 @@ def test_organization_membership_omits_absent_optional_non_nullable_fields(self) "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", @@ -17918,6 +17862,7 @@ def test_organization_membership_round_trips_unknown_enum_values(self): "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",