from django.apps import apps
from django.contrib.auth.models import Group
from libretimeapi.models import User
from libretimeapi.models.user_constants import DJ, GUEST
from libretimeapi.permission_constants import GROUPS
from rest_framework.test import APITestCase


class TestUserManager(APITestCase):
    def test_create_user(self):
        user = User.objects.create_user(
            "test",
            email="test@example.com",
            password="test",
            type=DJ,
            first_name="test",
            last_name="user",
        )
        db_user = User.objects.get(pk=user.pk)
        self.assertEqual(db_user.username, user.username)

    def test_create_superuser(self):
        user = User.objects.create_superuser(
            "test",
            email="test@example.com",
            password="test",
            first_name="test",
            last_name="user",
        )
        db_user = User.objects.get(pk=user.pk)
        self.assertEqual(db_user.username, user.username)


class TestUser(APITestCase):
    def test_guest_get_group_perms(self):
        user = User.objects.create_user(
            "test",
            email="test@example.com",
            password="test",
            type=GUEST,
            first_name="test",
            last_name="user",
        )
        permissions = user.get_group_permissions()
        # APIRoot permission hardcoded in the check as it isn't a Permission object
        str_perms = [p.codename for p in permissions] + ["view_apiroot"]
        self.assertCountEqual(str_perms, GROUPS[GUEST])