"""
Tests for the workouts application.
Sources:
https://docs.djangoproject.com/en/4.0/topics/testing/overview/
https://docs.djangoproject.com/en/4.0/topics/testing/tools/
https://docs.djangoproject.com/en/4.0/topics/testing/advanced/
"""
from urllib.request import Request
from django.test import TestCase, Client, RequestFactory

from django.urls import reverse, resolve

from workouts.views import Workout, WorkoutDetail, WorkoutList
from users.models import User
from workouts.models import Workout
import workouts.permissions as Perms

# Create your tests here.

class PermissionsTestCase(TestCase):
    def setUp(self):
        #User setup
        self.user_one = User.objects.create(username = "jorsi", phone_number="12345678", country="Norway", 
        city="Trondheim", street_address="street 3", favourite_exercise="Biceps", main_gym="SIT")

        self.user_one.save()
        #Workout setup
        self.workout_one = Workout.objects.create(name="Curl", date="2022-03-03", notes="nice", 
        owner=self.user_one, visibility="PU")
        self.workout_one.save()

        #Factory setup
        self.factory= RequestFactory()

        #Printstatements
        print("username of user_one: " + self.user_one.username)
        print("Workout: "+ self.workout_one.name + "Owner:" +self.workout_one.owner.username)

    def test_user_database(self):
        user_count=User.objects.all().count()
        self.assertEqual(user_count, 1)

    def test_is_owner(self):
        #Perms.IsOwner.has_object_permission(self, self.user_one,"", self.workout_one)
        #print(Perms.IsOwner.has_object_permission(self.user_one, self.workout_one))

        test_request = self.factory.get('/') 
        test_request.user = self.user_one
        is_owner = Perms.IsOwner.has_object_permission(self, test_request, None, self.workout_one)
        self.assertTrue(is_owner)