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

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):
        login = 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)