from django.test import TestCase
from django.contrib.auth import get_user_model
from rest_framework.test import APIClient
from .models import Group, GroupMember

User = get_user_model()


class GroupModelTestCase(TestCase):
    def setUp(self):
        self.user = User.objects.create_user(
            username='testuser',
            email='test@example.com',
            password='testpass123'
        )
        self.user2 = User.objects.create_user(
            username='testuser2',
            email='test2@example.com',
            password='testpass123'
        )

    def test_create_group(self):
        """Test creating a group"""
        group = Group.objects.create(
            name='Test Group',
            description='A test group',
            created_by=self.user
        )
        self.assertEqual(group.name, 'Test Group')
        self.assertEqual(group.created_by, self.user)
        self.assertFalse(group.is_deleted)

    def test_group_member_roles(self):
        """Test group member role assignment"""
        group = Group.objects.create(
            name='Test Group',
            created_by=self.user
        )

        # Creator should be admin
        admin_member = GroupMember.objects.create(
            user=self.user,
            group=group,
            role='ADMIN'
        )
        self.assertEqual(admin_member.role, 'ADMIN')

        # Add a regular member
        member = GroupMember.objects.create(
            user=self.user2,
            group=group,
            role='MEMBER'
        )
        self.assertEqual(member.role, 'MEMBER')

    def test_soft_delete_group(self):
        """Test group soft deletion"""
        group = Group.objects.create(
            name='Test Group',
            created_by=self.user
        )
        group.is_deleted = True
        group.save()

        # Group should still exist but be marked as deleted
        self.assertTrue(Group.objects.filter(id=group.id).exists())
        self.assertTrue(Group.objects.get(id=group.id).is_deleted)
