# -*- coding: utf-8 -*
import os

from django.conf import settings
from django.core import serializers
from django.test import TestCase

from wagtail.images.blocks import ImageChooserBlock

from .utils import Image, get_test_image_file


class TestImageChooserBlock(TestCase):
    def setUp(self):
        self.image = Image.objects.create(
            title="Test image",
            file=get_test_image_file(),
        )

        # Create an image with a missing file, by deserializing fom a python object
        # (which bypasses FileField's attempt to read the file)
        self.bad_image = list(
            serializers.deserialize(
                "python",
                [
                    {
                        "fields": {
                            "title": "missing image",
                            "height": 100,
                            "file": "original_images/missing-image.jpg",
                            "width": 100,
                        },
                        "model": "wagtailimages.image",
                    }
                ],
            )
        )[0].object
        self.bad_image.save()

    def get_image_filename(self, image, filterspec):
        """
        Get the generated filename for a resized image
        """
        name, ext = os.path.splitext(os.path.basename(image.file.name))
        return "{}images/{}.{}{}".format(settings.MEDIA_URL, name, filterspec, ext)

    def test_render(self):
        block = ImageChooserBlock()
        html = block.render(self.image)
        expected_html = (
            '<img alt="Test image" src="{}" width="640" height="480">'.format(
                self.get_image_filename(self.image, "original")
            )
        )

        self.assertHTMLEqual(html, expected_html)

    def test_render_missing(self):
        block = ImageChooserBlock()
        html = block.render(self.bad_image)
        expected_html = (
            '<img alt="missing image" src="/media/not-found" width="0" height="0">'
        )

        self.assertHTMLEqual(html, expected_html)
