Skip to content

Commit

Permalink
test: image: improve code coverage by testing BaseImage
Browse files Browse the repository at this point in the history
This adds missing unit tests for BaseImage to improve test coverage.

Signed-off-by: Quentin Schulz <foss+recitale@0leil.net>
  • Loading branch information
QSchulz committed Jan 15, 2022
1 parent 3c3bef2 commit 94d64c8
Showing 1 changed file with 63 additions and 1 deletion.
64 changes: 63 additions & 1 deletion test/test_image.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,68 @@
import pytest

from recitale.image import ImageFactory
from json import dumps as json_dumps
from unittest.mock import patch
from zlib import crc32

from recitale.image import BaseImage, ImageFactory
from recitale.utils import remove_superficial_options


class TestBaseImage:
@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_first_copy_no_resize(self, mock_imgsz):
base = BaseImage({"name": "test.jpg"}, {})
base.copy()
assert base.copysize == (200, 300)

@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_two_copies_no_resize(self, mock_imgsz):
base = BaseImage({"name": "test.jpg"}, {})
base.copy()
base.copy()
assert len(base.thumbnails.keys()) == 1

@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_copy_resize(self, mock_imgsz):
base = BaseImage({"name": "test.jpg", "resize": "50%"}, {})
base.copy()
assert base.copysize == (100, 150)

@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_copy_filepath(self, mock_imgsz):
base = BaseImage({"name": "test.jpg", "resize": "50%"}, {})
copy = base.copy()
assert copy == "test-%s-100x150.jpg" % (
crc32(bytes(json_dumps({}, sort_keys=True), "utf-8"))
)

@patch(
"recitale.image.remove_superficial_options",
side_effect=remove_superficial_options,
)
@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_copy_filepath_remove_superficial_options(
self, mock_imgsz, mock_rm_sup_opt
):
base = BaseImage({"name": "test.jpg", "resize": "50%", "test": "test123"}, {})
copy = base.copy()
mock_rm_sup_opt.called_once_with(
{"name": "test.jpg", "resize": "50%", "test": "test123"}
)
assert copy == "test-%s-100x150.jpg" % (
crc32(bytes(json_dumps({"test": "test123"}, sort_keys=True), "utf-8"))
)

@patch("recitale.image.imagesize.get", return_value=(200, 300))
def test_copy_invalid_resize(self, mock_imgsz, caplog):
base = BaseImage({"name": "test.jpg", "resize": "50"}, {})
with pytest.raises(SystemExit) as sysexit:
base.copy()
assert sysexit.type == SystemExit
assert sysexit.value.code == 1
assert (
caplog.text == "(test.jpg) specified resize setting is not a percentage"
)


# HACK because ImageFactory.base_imgs does not seem to be reset between tests.
Expand Down

0 comments on commit 94d64c8

Please sign in to comment.