diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/fixtures/requests/attachment1.txt | bin | 0 -> 192053 bytes | |||
-rw-r--r-- | spec/fixtures/requests/attachment2.txt | bin | 0 -> 109078 bytes | |||
-rw-r--r-- | spec/fixtures/xml/mastodon.atom | 261 | ||||
-rw-r--r-- | spec/services/process_feed_service_spec.rb | 50 |
4 files changed, 305 insertions, 6 deletions
diff --git a/spec/fixtures/requests/attachment1.txt b/spec/fixtures/requests/attachment1.txt new file mode 100644 index 000000000..77fd9c836 --- /dev/null +++ b/spec/fixtures/requests/attachment1.txt Binary files differdiff --git a/spec/fixtures/requests/attachment2.txt b/spec/fixtures/requests/attachment2.txt new file mode 100644 index 000000000..917a1d398 --- /dev/null +++ b/spec/fixtures/requests/attachment2.txt Binary files differdiff --git a/spec/fixtures/xml/mastodon.atom b/spec/fixtures/xml/mastodon.atom new file mode 100644 index 000000000..ce28cd77b --- /dev/null +++ b/spec/fixtures/xml/mastodon.atom @@ -0,0 +1,261 @@ +<?xml version="1.0"?> +<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:media="http://purl.org/syndication/atommedia"> + <id>http://kickass.zone/users/localhost.atom</id> + <title>::1</title> + <updated>2016-10-10T13:29:56Z</updated> + <logo>http://kickass.zone/system/accounts/avatars/000/000/001/medium/eris.png</logo> + <author> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>http://kickass.zone/users/localhost</uri> + <name>localhost</name> + <email>localhost@kickass.zone</email> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost"/> + <link rel="avatar" type="image/png" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/001/large/eris.png"/> + <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/001/medium/eris.png"/> + <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/001/small/eris.png"/> + <poco:preferredUsername>localhost</poco:preferredUsername> + <poco:displayName>::1</poco:displayName> + </author> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost"/> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost.atom"/> + <link rel="hub" href="https://pubsubhubbub.superfeedr.com"/> + <link rel="salmon" href="http://kickass.zone/api/salmon/1"/> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=7:objectType=Follow</id> + <published>2016-10-10T13:29:56Z</published> + <updated>2016-10-10T13:29:56Z</updated> + <title>localhost started following kat@mastodon.social</title> + <content type="html">localhost started following kat@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/follow</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/12.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/12"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/kat</uri> + <name>kat</name> + <email>kat@mastodon.social</email> + <summary>#trans #queer</summary> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/kat"/> + <link rel="avatar" type="image/jpeg" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/016/large/kat-20150403T124737-b2mbt44.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/016/medium/kat-20150403T124737-b2mbt44.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/016/small/kat-20150403T124737-b2mbt44.jpg"/> + <poco:preferredUsername>kat</poco:preferredUsername> + <poco:displayName>Kat</poco:displayName> + <poco:note>#trans #queer</poco:note> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=3:objectType=Favourite</id> + <published>2016-10-10T13:29:26Z</published> + <updated>2016-10-10T13:29:26Z</updated> + <title>localhost favourited a status by kat@mastodon.social</title> + <content type="html">localhost favourited a status by kat@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/favorite</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/11.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/11"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <thr:in-reply-to ref="tag:mastodon.social,2016-10-10:objectId=22833:objectType=Status" href="https://mastodon.social/users/kat/updates/16543" type="text/html"/> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/comment</activity:object-type> + <id>tag:mastodon.social,2016-10-10:objectId=22833:objectType=Status</id> + <title>@localhost oooh more mastodons ❤</title> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/kat/updates/16543"/> + <content type="html"><p><a href="http://kickass.zone/users/localhost">@localhost</a> oooh more mastodons ❤</p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <published>2016-10-10T13:23:35Z</published> + <updated>2016-10-10T13:23:35Z</updated> + <author> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/kat</uri> + <name>kat</name> + <email>kat@mastodon.social</email> + <summary>#trans #queer</summary> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/kat"/> + <link rel="avatar" type="image/jpeg" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/016/large/kat-20150403T124737-b2mbt44.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/016/medium/kat-20150403T124737-b2mbt44.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/016/small/kat-20150403T124737-b2mbt44.jpg"/> + <poco:preferredUsername>kat</poco:preferredUsername> + <poco:displayName>Kat</poco:displayName> + <poco:note>#trans #queer</poco:note> + </author> + <link rel="mentioned" href="http://kickass.zone/users/localhost"/> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=2:objectType=Favourite</id> + <published>2016-10-10T13:13:15Z</published> + <updated>2016-10-10T13:13:15Z</updated> + <title>localhost favourited a status by Gargron@mastodon.social</title> + <content type="html">localhost favourited a status by Gargron@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/favorite</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/10.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/10"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <thr:in-reply-to ref="tag:mastodon.social,2016-10-10:objectId=22825:objectType=Status" href="https://mastodon.social/users/Gargron/updates/16538" type="text/html"/> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> + <id>tag:mastodon.social,2016-10-10:objectId=22825:objectType=Status</id> + <title>Deployed some fixes</title> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/Gargron/updates/16538"/> + <content type="html"><p>Deployed some fixes</p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <published>2016-10-10T13:10:37Z</published> + <updated>2016-10-10T13:10:37Z</updated> + <author> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/Gargron</uri> + <name>Gargron</name> + <email>Gargron@mastodon.social</email> + <summary>Developer of Mastodon, a GNU social alternative: https://github.com/Gargron/mastodon</summary> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/Gargron"/> + <link rel="avatar" type="image/png" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/003/large/4375_eugencommish.png"/> + <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/003/medium/4375_eugencommish.png"/> + <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/003/small/4375_eugencommish.png"/> + <poco:preferredUsername>Gargron</poco:preferredUsername> + <poco:displayName>Eugen</poco:displayName> + <poco:note>Developer of Mastodon, a GNU social alternative: https://github.com/Gargron/mastodon</poco:note> + </author> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=17:objectType=Status</id> + <published>2016-10-10T00:41:31Z</published> + <updated>2016-10-10T00:41:31Z</updated> + <title>Social media needs MOAR cats! http://kickass.zone/media/3</title> + <content type="html"><p>Social media needs MOAR cats! <a rel="nofollow noopener" href="http://kickass.zone/media/3">http://kickass.zone/media/3</a></p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/9.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/9"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> + <link rel="enclosure" href="http://kickass.zone/system/media_attachments/files/000/000/003/original/gizmo.jpg?1476060065" type="image/jpeg" length="108841"/> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=14:objectType=Status</id> + <published>2016-10-10T00:38:39Z</published> + <updated>2016-10-10T00:38:39Z</updated> + <title>http://kickass.zone/media/2</title> + <content type="html"><p><a rel="nofollow noopener" href="http://kickass.zone/media/2">http://kickass.zone/media/2</a></p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/8.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/8"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> + <link rel="enclosure" href="http://kickass.zone/system/media_attachments/files/000/000/002/original/morpheus_linux.jpg?1476059910" type="image/jpeg" length="191816"/> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=12:objectType=Status</id> + <published>2016-10-10T00:37:49Z</published> + <updated>2016-10-10T00:37:49Z</updated> + <title/> + <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/7.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/7"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=4:objectType=Follow</id> + <published>2016-10-10T00:23:07Z</published> + <updated>2016-10-10T00:23:07Z</updated> + <title>localhost started following bignimbus@mastodon.social</title> + <content type="html">localhost started following bignimbus@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/follow</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/6.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/6"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/bignimbus</uri> + <name>bignimbus</name> + <email>bignimbus@mastodon.social</email> + <summary>jdauriemma.com</summary> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/bignimbus"/> + <link rel="avatar" type="image/png" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/004/large/jeff_avatar.png"/> + <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/004/medium/jeff_avatar.png"/> + <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/004/small/jeff_avatar.png"/> + <poco:preferredUsername>bignimbus</poco:preferredUsername> + <poco:displayName>Jeff Auriemma</poco:displayName> + <poco:note>jdauriemma.com</poco:note> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=2:objectType=Follow</id> + <published>2016-10-10T00:14:18Z</published> + <updated>2016-10-10T00:14:18Z</updated> + <title>localhost started following Gargron@mastodon.social</title> + <content type="html">localhost started following Gargron@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/follow</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/5.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/5"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/Gargron</uri> + <name>Gargron</name> + <email>Gargron@mastodon.social</email> + <summary>Developer of Mastodon, a GNU social alternative: https://github.com/Gargron/mastodon</summary> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/Gargron"/> + <link rel="avatar" type="image/png" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/003/large/4375_eugencommish.png"/> + <link rel="avatar" type="image/png" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/003/medium/4375_eugencommish.png"/> + <link rel="avatar" type="image/png" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/003/small/4375_eugencommish.png"/> + <poco:preferredUsername>Gargron</poco:preferredUsername> + <poco:displayName>Eugen</poco:displayName> + <poco:note>Developer of Mastodon, a GNU social alternative: https://github.com/Gargron/mastodon</poco:note> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=1:objectType=Follow</id> + <published>2016-10-10T00:09:09Z</published> + <updated>2016-10-10T00:09:09Z</updated> + <title>localhost started following abc@mastodon.social</title> + <content type="html">localhost started following abc@mastodon.social</content> + <activity:verb>http://activitystrea.ms/schema/1.0/follow</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/4.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/4"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + <activity:object> + <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type> + <uri>https://mastodon.social/users/abc</uri> + <name>abc</name> + <email>abc@mastodon.social</email> + <link rel="alternate" type="text/html" href="https://mastodon.social/users/abc"/> + <link rel="avatar" type="image/jpeg" media:width="300" media:height="300" href="http://kickass.zone/system/accounts/avatars/000/000/002/large/cbm64_80x80.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="http://kickass.zone/system/accounts/avatars/000/000/002/medium/cbm64_80x80.jpg"/> + <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="http://kickass.zone/system/accounts/avatars/000/000/002/small/cbm64_80x80.jpg"/> + <poco:preferredUsername>abc</poco:preferredUsername> + <poco:displayName>abc</poco:displayName> + </activity:object> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=3:objectType=Status</id> + <published>2016-10-10T00:02:47Z</published> + <updated>2016-10-10T00:02:47Z</updated> + <title/> + <activity:verb>http://activitystrea.ms/schema/1.0/delete</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/3.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/3"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/activity</activity:object-type> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=2:objectType=Status</id> + <published>2016-10-10T00:02:18Z</published> + <updated>2016-10-10T00:02:18Z</updated> + <title>Yes, that was the obligatory first post. :)</title> + <content type="html"><p>Yes, that was the obligatory first post. :)</p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/2.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/2"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/comment</activity:object-type> + <thr:in-reply-to ref="tag:kickass.zone,2016-10-10:objectId=1:objectType=Status" href="http://kickass.zone/users/localhost/updates/1" type="text/html"/> + </entry> + <entry> + <id>tag:kickass.zone,2016-10-10:objectId=1:objectType=Status</id> + <published>2016-10-10T00:01:56Z</published> + <updated>2016-10-10T00:01:56Z</updated> + <title>Hello, world!</title> + <content type="html"><p>Hello, world!</p></content> + <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> + <link rel="self" type="application/atom+xml" href="http://kickass.zone/users/localhost/updates/1.atom"/> + <link rel="alternate" type="text/html" href="http://kickass.zone/users/localhost/updates/1"/> + <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type> + </entry> +</feed> diff --git a/spec/services/process_feed_service_spec.rb b/spec/services/process_feed_service_spec.rb index 2144c0221..e4e5858ea 100644 --- a/spec/services/process_feed_service_spec.rb +++ b/spec/services/process_feed_service_spec.rb @@ -1,12 +1,50 @@ require 'rails_helper' RSpec.describe ProcessFeedService do + let(:body) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'xml', 'mastodon.atom')) } + let(:account) { Fabricate(:account, username: 'localhost', domain: 'kickass.zone') } + subject { ProcessFeedService.new } - it 'updates remote user\'s account information' - it 'creates posts' - it 'creates reblogs' - it 'creates replies' - it 'creates reblogged replies' - it 'deletes removed posts' + before do + stub_request(:get, "http://kickass.zone/system/accounts/avatars/000/000/001/large/eris.png").to_return(request_fixture('avatar.txt')) + stub_request(:get, "http://kickass.zone/system/media_attachments/files/000/000/002/original/morpheus_linux.jpg?1476059910").to_return(request_fixture('attachment1.txt')) + stub_request(:get, "http://kickass.zone/system/media_attachments/files/000/000/003/original/gizmo.jpg?1476060065").to_return(request_fixture('attachment2.txt')) + + subject.call(body, account) + end + + it 'updates remote user\'s account information' do + expect(account.display_name).to eq '::1' + expect(account).to have_attached_file(:avatar) + end + + it 'creates posts' do + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=1:objectType=Status')).to_not be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Status')).to_not be_nil + end + + it 'ignores delete statuses unless they existed before' do + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=3:objectType=Status')).to be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=12:objectType=Status')).to be_nil + end + + it 'does not create statuses for follows' do + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=1:objectType=Follow')).to be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Follow')).to be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=4:objectType=Follow')).to be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=7:objectType=Follow')).to be_nil + end + + it 'does not create statuses for favourites' do + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=2:objectType=Favourite')).to be_nil + expect(Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=3:objectType=Favourite')).to be_nil + end + + it 'creates posts with media' do + status = Status.find_by(uri: 'tag:kickass.zone,2016-10-10:objectId=14:objectType=Status') + + expect(status).to_not be_nil + expect(status.media_attachments.first).to have_attached_file(:file) + end end |