from django.contrib.auth.models import User
from django.http import QueryDict
from django.test import TestCase
from django.urls import reverse
from django.utils.translation import activate
from override_storage import override_storage

from .models import File


@override_storage()
class FileTests(TestCase):

    test_user = "testuser1"
    test_pass = "12345"

    def setUp(self):
        test_user1 = User.objects.create_user(
            username=self.test_user, password=self.test_pass
        )
        test_user1.save()

        activate("en-gb")

        self.file = File.objects.create(user=test_user1)

    def login(self):
        return self.client.login(username=self.test_user, password=self.test_pass)

    def test_post_not_logged_in(self):
        url = reverse("files:upload")

        next_url = QueryDict.fromkeys(["next"], url)
        login_url = reverse("auth_login") + "?" + next_url.urlencode()

        response = self.client.post(url, follow=True)
        self.assertRedirects(response, login_url)

    def test_delete_not_logged_in(self):
        url = reverse("files:delete", kwargs={"pk": self.file.pk})

        next_url = QueryDict.fromkeys(["next"], url)
        login_url = reverse("auth_login") + "?" + next_url.urlencode()

        response = self.client.post(url, follow=True)
        self.assertRedirects(response, login_url)

    def test_post_and_delete(self):
        self.login()

        with open("apps/map/static/map/ojuso-logo-white.png", "rb") as fp:
            response = self.client.post(reverse("files:upload_image"), {"file": fp})

            data = response.json()
            self.assertIsInstance(data["id"], int)
            self.assertEqual(data["is_valid"], True)

        response = self.client.post(
            reverse("files:delete_image", kwargs={"pk": data["id"]})
        )

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(data["success"], True)