diff --git a/bookwyrm/tests/models/test_fields.py b/bookwyrm/tests/models/test_fields.py index 278272d8..8028a305 100644 --- a/bookwyrm/tests/models/test_fields.py +++ b/bookwyrm/tests/models/test_fields.py @@ -485,6 +485,106 @@ class ModelFields(TestCase): self.assertIsNotNone(book.cover.name) self.assertEqual(book.cover.size, 43200) + @responses.activate + def test_image_field_set_field_from_activity_no_overwrite_no_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=image.tobytes(), + status=200, + ) + book = Edition.objects.create(title="hello") + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=False) + self.assertIsNotNone(book.cover.name) + self.assertEqual(book.cover.size, 43200) + + @responses.activate + def test_image_field_set_field_from_activity_no_overwrite_with_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + + another_image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/logo.png" + ) + another_image = Image.open(another_image_file) + another_output = BytesIO() + another_image.save(another_output, format=another_image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image.tobytes(), + status=200, + ) + book = Edition.objects.create(title="hello") + book.cover.save("test.jpg", ContentFile(output.getvalue())) + self.assertEqual(book.cover.size, 2136) + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=False) + # same cover as before + self.assertEqual(book.cover.size, 2136) + + @responses.activate + def test_image_field_set_field_from_activity_with_overwrite_with_cover(self, *_): + """update a model instance from an activitypub object""" + image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/default_avi.jpg" + ) + image = Image.open(image_file) + output = BytesIO() + image.save(output, format=image.format) + book = Edition.objects.create(title="hello") + book.cover.save("test.jpg", ContentFile(output.getvalue())) + self.assertEqual(book.cover.size, 2136) + + another_image_file = pathlib.Path(__file__).parent.joinpath( + "../../static/images/logo.png" + ) + another_image = Image.open(another_image_file) + another_output = BytesIO() + another_image.save(another_output, format=another_image.format) + + instance = fields.ImageField(activitypub_field="cover", name="cover") + + responses.add( + responses.GET, + "http://www.example.com/image.jpg", + body=another_image.tobytes(), + status=200, + ) + + MockActivity = namedtuple("MockActivity", ("cover")) + mock_activity = MockActivity("http://www.example.com/image.jpg") + + instance.set_field_from_activity(book, mock_activity, overwrite=True) + # new cover + self.assertIsNotNone(book.cover.name) + self.assertEqual(book.cover.size, 376800) + def test_datetime_field(self, *_): """this one is pretty simple, it just has to use isoformat""" instance = fields.DateTimeField()