Skip to content

Commit

Permalink
added support for primary keys where the field id is missing
Browse files Browse the repository at this point in the history
  • Loading branch information
Jed-Giblin authored and Dresdn committed Nov 21, 2024
1 parent cad3c54 commit f4b8728
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 9 deletions.
6 changes: 5 additions & 1 deletion django_test_app/users/models.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import uuid
from django.db import models

from tenant_users.tenants.models import UserProfile

_NameFieldLength = 64


class GuidUser(UserProfile):
guid = models.UUIDField(default=uuid.uuid4, primary_key=True)


class TenantUser(UserProfile):
"""Simple user model definition for testing."""

Expand Down
2 changes: 1 addition & 1 deletion tenant_users/tenants/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ def add_user(self, user_obj, *, is_superuser: bool = False, is_staff: bool = Fal
is_staff (bool): If True, assigns staff status to the user. Defaults to False.
"""
# User already is linked here..
if self.user_set.filter(id=user_obj.pk).exists():
if self.user_set.filter(pk=user_obj.pk).exists():
raise ExistsError(
f"User already added to tenant: {user_obj}",
)
Expand Down
7 changes: 7 additions & 0 deletions tests/fixtures/tenant.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import pytest
from django.contrib.auth import get_user_model
from django_tenants.utils import get_tenant_model, schema_context
from django_test_app.users.models import GuidUser

#: Constants
TenantModel = get_tenant_model()
TenantUser = get_user_model()
_USER_PASS = "test1234" # noqa: S105


@pytest.fixture()
def guid_tenant_user(db) -> GuidUser:
with schema_context("public"):
return TenantUser.objects.create_user(email="[email protected]")


@pytest.fixture()
def public_tenant(db) -> TenantModel: # noqa: ARG001
"""Returns Public Tenant instance."""
Expand Down
26 changes: 19 additions & 7 deletions tests/test_tenants/test_tenants_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,21 @@
UserModel = get_user_model()


def test_add_guid_based_user_to_tenant(guid_tenant_user) -> None:
"""Test tenant user management with guid based user"""
slug = "sample"
custom_schema_name = "guid_schema"
tenant, _ = provision_tenant(
tenant_name="GUID Tenant",
tenant_slug=slug,
owner=guid_tenant_user,
schema_name=custom_schema_name
)
owner = tenant.owner
tenant.add_user(owner)
assert tenant.user_set.count() == 1


def test_provision_with_schema_name(tenant_user) -> None:
"""Test tenant provisioning with a custom schema name.
Expand All @@ -37,7 +52,7 @@ def test_provision_with_schema_name(tenant_user) -> None:
owner = tenant.owner

with pytest.raises(
ExistsError, match="User already added to tenant: [email protected]"
ExistsError, match="User already added to tenant: [email protected]"
):
tenant.add_user(owner)
error_message = f"Cannot remove owner from tenant: {owner}"
Expand Down Expand Up @@ -77,7 +92,6 @@ def test_deleting_a_provision_tenant(tenant_user) -> None:
assert public_tenant.owner == tenant.owner
assert tenant.user_set.count() == 1
with tenant_context(tenant):

# Verify that the public owner retains permission to the provisioned tenant after deletion
public_owner_has_permission = UserTenantPermissions.objects.filter(
profile=tenant.owner
Expand All @@ -91,7 +105,7 @@ def test_deleting_a_provision_tenant(tenant_user) -> None:
profile=another_user
).exists()
assert (
previous_owner_has_permission == False
previous_owner_has_permission == False
), "The previous owner should not retain permission to the provisioned tenant after deletion."


Expand Down Expand Up @@ -134,11 +148,9 @@ def test_delete_provisioned_tenant_with_assigned_user_roles(tenant_user):


def test_transfer_ownership_to_existing_user(test_tenants, public_tenant):

tenant = test_tenants.first()
assert tenant.owner != public_tenant.owner, "Can't transfer ownership to same owner"
with tenant_context(tenant):

tenant.add_user(public_tenant.owner)
# Assign group or role to user through UserTenantPermissions
tenant.transfer_ownership(public_tenant.owner)
Expand All @@ -148,6 +160,6 @@ def test_transfer_ownership_to_existing_user(test_tenants, public_tenant):
profile=public_tenant.owner
).exists()
assert (
UserTenantPermissions.objects.get(profile=public_tenant.owner).is_superuser
== True
UserTenantPermissions.objects.get(profile=public_tenant.owner).is_superuser
== True
)

0 comments on commit f4b8728

Please sign in to comment.