from pathlib import Path
from django.test import TestCase
from django.contrib.auth.models import User
from django.core.files.base import ContentFile
from django.conf import settings

from collector.models import Platform, Ticket, Archive


def delete_test_files(ticket):
    test_file = settings.MEDIA_ROOT_FOR_SENSITIVE_FILES / Path(str(ticket))
    test_file.unlink(missing_ok=True)


class TestModels(TestCase):

    def setUp(self):
        # create test user:
        self.test_user = User.objects.create_user(
            username='oops',
            password='hG2wS231YPWmj3'
        )
        # create test platform and ticket:
        self.test_platform = Platform.objects.create(
            name='vm6',
            pretty_name='VMmanager 6'
        )
        self.test_ticket = Ticket.objects.create(
            number=1488228,
            platform=self.test_platform,
            user=self.test_user
        )

    def test_correct_platform_fields(self):
        self.assertEqual(self.test_platform.name, 'vm6')
        self.assertEqual(self.test_platform.pretty_name, 'VMmanager 6')

    def test_correct_ticket_fields(self):
        self.assertEqual(self.test_ticket.number, 1488228)
        self.assertEqual(self.test_ticket.attempts, 5)
        self.assertEqual(
            self.test_ticket.platform.name,
            self.test_platform.name
        )

    def test_correct_archive_fields(self):
        test_archive = Archive.objects.create(
            file=ContentFile(b'...', name='test.tar.gz'),
            ticket=self.test_ticket
        )
        triple_dots_md5 = '2f43b42fd833d1e77420a8dae7419000'
        self.assertEquals(test_archive.md5, triple_dots_md5)
        self.assertEquals(
            test_archive.file.name,
            f'{self.test_ticket.number}/test.tar.gz'
        )
        # ? workaround delete test file:
        delete_test_files(test_archive.file)