Add image test

This commit is contained in:
Sonny Bakker 2020-08-08 15:58:44 +02:00
parent 8f971a5c89
commit 9fd3a845e7
4 changed files with 65 additions and 6 deletions

View file

@ -6,3 +6,9 @@ class RuleTypeChoices(TextChoices):
feed = "feed", _("Feed")
subreddit = "subreddit", _("Subreddit")
twitter = "twitter", _("Twitter")
class TwitterPostTypeChoices(TextChoices):
photo = "photo", _("Poto")
video = "video", _("Video")
animated_gif = "animated_gif", _("GIF")

View file

@ -286,7 +286,7 @@ image_mock = [
"retweet_count": 427,
"retweeted": False,
"source": '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>',
"text": "_ https://t.co/VjEeDrL1iA",
"full_text": "_ https://t.co/VjEeDrL1iA",
"truncated": False,
"user": {
"contributors_enabled": False,

View file

@ -9,7 +9,10 @@ from django.utils.html import format_html
import pytz
from newsreader.news.collection.tests.factories import TwitterProfileFactory
from newsreader.news.collection.tests.twitter.builder.mocks import simple_mock
from newsreader.news.collection.tests.twitter.builder.mocks import (
image_mock,
simple_mock,
)
from newsreader.news.collection.twitter import TWITTER_URL, TwitterBuilder
from newsreader.news.core.models import Post
@ -67,9 +70,43 @@ class TwitterBuilderTestCase(TestCase):
# Note that only one media type can be uploaded to an Tweet
# see https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/extended-entities-object
@skip("Not implemented")
def test_images_in_post(self):
pass
builder = TwitterBuilder
profile = TwitterProfileFactory(screen_name="RobertsSpaceInd")
mock_stream = MagicMock(rule=profile)
with builder((image_mock, mock_stream)) as builder:
builder.save()
posts = {post.remote_identifier: post for post in Post.objects.all()}
self.assertCountEqual(("1269039237166321664",), posts.keys())
post = posts["1269039237166321664"]
full_text = "_ https://t.co/VjEeDrL1iA"
self.assertEquals(post.rule, profile)
self.assertEquals(post.title, full_text)
self.assertEquals(post.author, "RobertsSpaceInd")
self.assertEquals(
post.url, f"{TWITTER_URL}/RobertsSpaceInd/1269039237166321664"
)
self.assertEquals(
post.publication_date, pytz.utc.localize(datetime(2020, 6, 5, 22, 51, 46))
)
self.assertIn(full_text, post.body)
self.assertIn(
f"<div><img alt='1269039233072689152' src='https://pbs.twimg.com/media/EZyIdXVU8AACPCz.jpg' loading='lazy' /></div>",
post.body,
)
self.assertIn(
f"<div><img alt='1269039233068527618' src='https://pbs.twimg.com/media/EZyIdXUVcAI3Cju.jpg' loading='lazy' /></div>",
post.body,
)
@skip("Not implemented")
def test_videos_in_post(self):

View file

@ -6,7 +6,7 @@ from django.utils.html import format_html
import pytz
from newsreader.news.collection.base import Builder, Client, Collector, Stream
from newsreader.news.collection.choices import RuleTypeChoices
from newsreader.news.collection.choices import RuleTypeChoices, TwitterPostTypeChoices
from newsreader.news.core.models import Post
@ -37,11 +37,27 @@ class TwitterBuilder(Builder):
publication_date = pytz.utc.localize(
datetime.strptime(post["created_at"], "%a %b %d %H:%M:%S +0000 %Y")
)
body = ""
if "extended_entities" in post:
media_entities = post["extended_entities"]["media"]
for media_entity in media_entities:
media_type = media_entity["type"]
media_url = media_entity["media_url_https"]
title = media_entity["id_str"]
if media_type == TwitterPostTypeChoices.photo:
html_fragment = f"<div><img alt='{title}' src='{media_url}' loading='lazy' /></div>"
body += format_html(html_fragment)
body += format_html(post["full_text"])
data = {
"remote_identifier": remote_identifier,
"title": truncatechars(post["full_text"], 40),
"body": format_html(post["full_text"]),
"body": body,
"author": rule.screen_name,
"publication_date": publication_date,
"url": (f"{TWITTER_URL}/{rule.screen_name}/{remote_identifier}"),