from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from .models import Knowledge
from course.models import Course
from user.models import User

class KnowledgeTests(APITestCase):

    def setUp(self):
        self.user = User.objects.create_user(email='testuser@test.fr', password='testpassword')
        self.course = Course.objects.create(name='Test Course', user=self.user)
        self.knowledge1 = Knowledge.objects.create(title="Knowledge 1", content={"question": "?", "ods": "Content 1"}, course=self.course)
        self.knowledge2 = Knowledge.objects.create(title="Knowledge 2", content={"question": "?", "ods": "Content 2"}, course=self.course)

    def test_knowledge_creation(self):
        self.assertEqual(Knowledge.objects.count(), 2)
        self.assertEqual(self.knowledge1.title, "Knowledge 1")
        self.assertEqual(self.knowledge2.title, "Knowledge 2")

    def test_knowledge_user_assignment(self):
        self.assertEqual(self.knowledge1.user, self.user)
        self.assertEqual(self.knowledge2.user, self.user)

    def test_knowledge_course_relationship(self):
        self.assertEqual(self.knowledge1.course, self.course)
        self.assertEqual(self.knowledge2.course, self.course)

    def test_knowledge_list(self):
        url = reverse('knowledge_list')
        response = self.client.get(url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 2)

    def test_knowledge_detail(self):
        url = reverse('knowledge_detail', kwargs={'pid': str(self.knowledge1.publicIdentifier)})
        response = self.client.get(url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['title'], self.knowledge1.title)
        