from django.contrib.contenttypes.models import ContentType

from sentry.services.hybrid_cloud.user.serial import serialize_rpc_user
from sentry.testutils.cases import TestCase
from sentry.testutils.silo import no_silo_test
from social_auth.utils import ctype_to_model, model_to_ctype


@no_silo_test
class TestSocialAuthUtils(TestCase):
    def test_model_to_ctype(self):
        val = model_to_ctype(1)
        assert val == 1

        val = model_to_ctype(None)
        assert val is None

        user = self.create_user()
        val = model_to_ctype(user)
        assert val == {"pk": user.id, "ctype": ContentType.objects.get_for_model(user).pk}

        rpc_user = serialize_rpc_user(user)
        val = model_to_ctype(rpc_user)
        assert val == rpc_user.dict()

    def test_ctype_to_model(self):
        val = ctype_to_model(1)
        assert val == 1

        val = ctype_to_model(None)
        assert val is None

        user = self.create_user()
        ctype_val = {"pk": user.id, "ctype": ContentType.objects.get_for_model(user).pk}
        assert ctype_to_model(ctype_val) == user

        rpc_user = serialize_rpc_user(user)
        assert ctype_to_model(rpc_user.dict()) == rpc_user