Merge commit 'b9f59ebcc68e9da0a7158741a1a2ef3564e1321e' into merging-upstream
This commit is contained in:
@@ -50,14 +50,14 @@ describe Api::V1::Accounts::RelationshipsController do
|
||||
json = body_as_json
|
||||
|
||||
expect(json).to be_a Enumerable
|
||||
expect(json.first[:id]).to eq simon.id
|
||||
expect(json.first[:id]).to eq simon.id.to_s
|
||||
expect(json.first[:following]).to be true
|
||||
expect(json.first[:followed_by]).to be false
|
||||
expect(json.first[:muting]).to be false
|
||||
expect(json.first[:requested]).to be false
|
||||
expect(json.first[:domain_blocking]).to be false
|
||||
|
||||
expect(json.second[:id]).to eq lewis.id
|
||||
expect(json.second[:id]).to eq lewis.id.to_s
|
||||
expect(json.second[:following]).to be false
|
||||
expect(json.second[:followed_by]).to be true
|
||||
expect(json.second[:muting]).to be false
|
||||
|
18
spec/controllers/api/v1/custom_emojis_controller_spec.rb
Normal file
18
spec/controllers/api/v1/custom_emojis_controller_spec.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Api::V1::CustomEmojisController, type: :controller do
|
||||
render_views
|
||||
|
||||
describe 'GET #index' do
|
||||
before do
|
||||
Fabricate(:custom_emoji)
|
||||
get :index
|
||||
end
|
||||
|
||||
it 'returns http success' do
|
||||
expect(response).to have_http_status(:success)
|
||||
end
|
||||
end
|
||||
end
|
@@ -53,7 +53,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||
end
|
||||
|
||||
it 'returns media ID in JSON' do
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -75,7 +75,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||
end
|
||||
|
||||
it 'returns media ID in JSON' do
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -97,7 +97,7 @@ RSpec.describe Api::V1::MediaController, type: :controller do
|
||||
end
|
||||
|
||||
xit 'returns media ID in JSON' do
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id
|
||||
expect(body_as_json[:id]).to eq MediaAttachment.first.id.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -36,7 +36,7 @@ describe Api::V1::Statuses::FavouritesController do
|
||||
it 'return json with updated attributes' do
|
||||
hash_body = body_as_json
|
||||
|
||||
expect(hash_body[:id]).to eq status.id
|
||||
expect(hash_body[:id]).to eq status.id.to_s
|
||||
expect(hash_body[:favourites_count]).to eq 1
|
||||
expect(hash_body[:favourited]).to be true
|
||||
end
|
||||
|
@@ -32,7 +32,7 @@ describe Api::V1::Statuses::PinsController do
|
||||
it 'return json with updated attributes' do
|
||||
hash_body = body_as_json
|
||||
|
||||
expect(hash_body[:id]).to eq status.id
|
||||
expect(hash_body[:id]).to eq status.id.to_s
|
||||
expect(hash_body[:pinned]).to be true
|
||||
end
|
||||
end
|
||||
|
@@ -36,7 +36,7 @@ describe Api::V1::Statuses::ReblogsController do
|
||||
it 'return json with updated attributes' do
|
||||
hash_body = body_as_json
|
||||
|
||||
expect(hash_body[:reblog][:id]).to eq status.id
|
||||
expect(hash_body[:reblog][:id]).to eq status.id.to_s
|
||||
expect(hash_body[:reblog][:reblogs_count]).to eq 1
|
||||
expect(hash_body[:reblog][:reblogged]).to be true
|
||||
end
|
||||
|
@@ -1,20 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe EmojiHelper, type: :helper do
|
||||
describe '#emojify' do
|
||||
it 'converts shortcodes to unicode' do
|
||||
text = ':book: Book'
|
||||
expect(emojify(text)).to eq '📖 Book'
|
||||
end
|
||||
|
||||
it 'converts composite emoji shortcodes to unicode' do
|
||||
text = ':couple_ww:'
|
||||
expect(emojify(text)).to eq '👩❤👩'
|
||||
end
|
||||
|
||||
it 'does not convert shortcodes that are part of a string into unicode' do
|
||||
text = ':see_no_evil::hear_no_evil::speak_no_evil:'
|
||||
expect(emojify(text)).to eq text
|
||||
end
|
||||
end
|
||||
end
|
@@ -1,132 +0,0 @@
|
||||
import { expect } from 'chai';
|
||||
import { shallow, mount } from 'enzyme';
|
||||
import sinon from 'sinon';
|
||||
import React from 'react';
|
||||
import DropdownMenu from '../../../app/javascript/mastodon/components/dropdown_menu';
|
||||
import Dropdown, { DropdownTrigger, DropdownContent } from 'react-simple-dropdown';
|
||||
|
||||
const isTrue = () => true;
|
||||
|
||||
describe('<DropdownMenu />', () => {
|
||||
const icon = 'my-icon';
|
||||
const size = 123;
|
||||
let items;
|
||||
let wrapper;
|
||||
let action;
|
||||
|
||||
beforeEach(() => {
|
||||
action = sinon.spy();
|
||||
|
||||
items = [
|
||||
{ text: 'first item', action: action, href: '/some/url' },
|
||||
{ text: 'second item', action: 'noop' },
|
||||
];
|
||||
wrapper = shallow(<DropdownMenu icon={icon} items={items} size={size} />);
|
||||
});
|
||||
|
||||
it('contains one <Dropdown />', () => {
|
||||
expect(wrapper).to.have.exactly(1).descendants(Dropdown);
|
||||
});
|
||||
|
||||
it('contains one <DropdownTrigger />', () => {
|
||||
expect(wrapper.find(Dropdown)).to.have.exactly(1).descendants(DropdownTrigger);
|
||||
});
|
||||
|
||||
it('contains one <DropdownContent />', () => {
|
||||
expect(wrapper.find(Dropdown)).to.have.exactly(1).descendants(DropdownContent);
|
||||
});
|
||||
|
||||
it('does not contain a <DropdownContent /> if isUserTouching', () => {
|
||||
const touchingWrapper = shallow(<DropdownMenu icon={icon} items={items} size={size} isUserTouching={isTrue} />);
|
||||
expect(touchingWrapper.find(Dropdown)).to.have.exactly(0).descendants(DropdownContent);
|
||||
});
|
||||
|
||||
it('does not contain a <DropdownContent /> if isUserTouching', () => {
|
||||
const touchingWrapper = shallow(<DropdownMenu icon={icon} items={items} size={size} isUserTouching={isTrue} />);
|
||||
expect(touchingWrapper.find(Dropdown)).to.have.exactly(0).descendants(DropdownContent);
|
||||
});
|
||||
|
||||
it('uses props.size for <DropdownTrigger /> style values', () => {
|
||||
['font-size', 'width', 'line-height'].map((property) => {
|
||||
expect(wrapper.find(DropdownTrigger)).to.have.style(property, `${size}px`);
|
||||
});
|
||||
});
|
||||
|
||||
it('uses props.icon as icon class name', () => {
|
||||
expect(wrapper.find(DropdownTrigger).find('i')).to.have.className(`fa-${icon}`);
|
||||
});
|
||||
|
||||
it('is not expanded by default', () => {
|
||||
expect(wrapper.state('expanded')).to.be.equal(false);
|
||||
});
|
||||
|
||||
it('does not render the list elements if not expanded', () => {
|
||||
const lis = wrapper.find(DropdownContent).find('li');
|
||||
expect(lis.length).to.be.equal(0);
|
||||
});
|
||||
|
||||
it('sets expanded to true when clicking the trigger', () => {
|
||||
const wrapper = mount(<DropdownMenu icon={icon} items={items} size={size} />);
|
||||
wrapper.find(DropdownTrigger).first().simulate('click');
|
||||
expect(wrapper.state('expanded')).to.be.equal(true);
|
||||
});
|
||||
|
||||
it('calls onModalOpen when clicking the trigger if isUserTouching', () => {
|
||||
const onModalOpen = sinon.spy();
|
||||
const touchingWrapper = mount(<DropdownMenu icon={icon} items={items} status={3.14} size={size} onModalOpen={onModalOpen} isUserTouching={isTrue} />);
|
||||
touchingWrapper.find(DropdownTrigger).first().simulate('click');
|
||||
expect(onModalOpen.calledOnce).to.be.equal(true);
|
||||
expect(onModalOpen.args[0][0]).to.be.deep.equal({ status: 3.14, actions: items, onClick: touchingWrapper.node.handleClick });
|
||||
});
|
||||
|
||||
it('calls onModalClose when clicking an action if isUserTouching and isModalOpen', () => {
|
||||
const onModalOpen = sinon.spy();
|
||||
const onModalClose = sinon.spy();
|
||||
const touchingWrapper = mount(<DropdownMenu icon={icon} items={items} status={3.14} size={size} isModalOpen onModalOpen={onModalOpen} onModalClose={onModalClose} isUserTouching={isTrue} />);
|
||||
touchingWrapper.find(DropdownTrigger).first().simulate('click');
|
||||
touchingWrapper.node.handleClick({ currentTarget: { getAttribute: () => '0' }, preventDefault: () => null });
|
||||
expect(onModalClose.calledOnce).to.be.equal(true);
|
||||
});
|
||||
|
||||
// Error: ReactWrapper::state() can only be called on the root
|
||||
/*it('sets expanded to false when clicking outside', () => {
|
||||
const wrapper = mount((
|
||||
<div>
|
||||
<DropdownMenu icon={icon} items={items} size={size} />
|
||||
<span />
|
||||
</div>
|
||||
));
|
||||
|
||||
wrapper.find(DropdownTrigger).first().simulate('click');
|
||||
expect(wrapper.find(DropdownMenu).first().state('expanded')).to.be.equal(true);
|
||||
|
||||
wrapper.find('span').first().simulate('click');
|
||||
expect(wrapper.find(DropdownMenu).first().state('expanded')).to.be.equal(false);
|
||||
})*/
|
||||
|
||||
it('renders list elements for each props.items if expanded', () => {
|
||||
const wrapper = mount(<DropdownMenu icon={icon} items={items} size={size} />);
|
||||
wrapper.find(DropdownTrigger).first().simulate('click');
|
||||
const lis = wrapper.find(DropdownContent).find('li');
|
||||
expect(lis.length).to.be.equal(items.length);
|
||||
});
|
||||
|
||||
it('uses the href passed in via props.items', () => {
|
||||
wrapper
|
||||
.find(DropdownContent).find('li a')
|
||||
.forEach((a, i) => expect(a).to.have.attr('href', items[i].href));
|
||||
});
|
||||
|
||||
it('uses the text passed in via props.items', () => {
|
||||
wrapper
|
||||
.find(DropdownContent).find('li a')
|
||||
.forEach((a, i) => expect(a).to.have.text(items[i].text));
|
||||
});
|
||||
|
||||
it('uses the action passed in via props.items as click handler', () => {
|
||||
const wrapper = mount(<DropdownMenu icon={icon} items={items} size={size} />);
|
||||
wrapper.find(DropdownTrigger).first().simulate('click');
|
||||
wrapper.find(DropdownContent).find('li a').first().simulate('click');
|
||||
expect(action.calledOnce).to.equal(true);
|
||||
});
|
||||
});
|
@@ -22,23 +22,23 @@ describe('emojify', () => {
|
||||
|
||||
it('does unicode', () => {
|
||||
expect(emojify('\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="👩👩👦👦" title=":family_wwbb:" src="/emoji/1f469-1f469-1f466-1f466.svg" />');
|
||||
expect(emojify('\uD83D\uDC68\uD83D\uDC69\uD83D\uDC67\uD83D\uDC67')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="👨👩👧👧" title=":family_mwgg:" src="/emoji/1f468-1f469-1f467-1f467.svg" />');
|
||||
expect(emojify('\uD83D\uDC69\uD83D\uDC69\uD83D\uDC66')).to.equal('<img draggable="false" class="emojione" alt="👩👩👦" title=":family_wwb:" src="/emoji/1f469-1f469-1f466.svg" />');
|
||||
'<img draggable="false" class="emojione" alt="👩👩👦👦" title=":woman-woman-boy-boy:" src="/emoji/1f469-200d-1f469-200d-1f466-200d-1f466.svg" />');
|
||||
expect(emojify('👨👩👧👧')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="👨👩👧👧" title=":man-woman-girl-girl:" src="/emoji/1f468-200d-1f469-200d-1f467-200d-1f467.svg" />');
|
||||
expect(emojify('👩👩👦')).to.equal('<img draggable="false" class="emojione" alt="👩👩👦" title=":woman-woman-boy:" src="/emoji/1f469-200d-1f469-200d-1f466.svg" />');
|
||||
expect(emojify('\u2757')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
|
||||
});
|
||||
|
||||
it('does multiple unicode', () => {
|
||||
expect(emojify('\u2757 #\uFE0F\u20E3')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" />');
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/23-20e3.svg" />');
|
||||
expect(emojify('\u2757#\uFE0F\u20E3')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /><img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" />');
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /><img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/23-20e3.svg" />');
|
||||
expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).to.equal(
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" /> <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
|
||||
'<img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/23-20e3.svg" /> <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" />');
|
||||
expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).to.equal(
|
||||
'foo <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/0023-20e3.svg" /> bar');
|
||||
'foo <img draggable="false" class="emojione" alt="❗" title=":exclamation:" src="/emoji/2757.svg" /> <img draggable="false" class="emojione" alt="#️⃣" title=":hash:" src="/emoji/23-20e3.svg" /> bar');
|
||||
});
|
||||
|
||||
it('ignores unicode inside of tags', () => {
|
||||
|
@@ -171,6 +171,26 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||
end
|
||||
end
|
||||
|
||||
context 'with mentions missing href' do
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'bar',
|
||||
type: 'Note',
|
||||
content: 'Lorem ipsum',
|
||||
tag: [
|
||||
{
|
||||
type: 'Mention',
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
|
||||
it 'creates status' do
|
||||
status = sender.statuses.first
|
||||
expect(status).to_not be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with media attachments' do
|
||||
let(:object_json) do
|
||||
{
|
||||
@@ -195,6 +215,27 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||
end
|
||||
end
|
||||
|
||||
context 'with media attachments missing url' do
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'bar',
|
||||
type: 'Note',
|
||||
content: 'Lorem ipsum',
|
||||
attachment: [
|
||||
{
|
||||
type: 'Document',
|
||||
mime_type: 'image/png',
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
|
||||
it 'creates status' do
|
||||
status = sender.statuses.first
|
||||
expect(status).to_not be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with hashtags' do
|
||||
let(:object_json) do
|
||||
{
|
||||
@@ -219,6 +260,27 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||
end
|
||||
end
|
||||
|
||||
context 'with hashtags missing name' do
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'bar',
|
||||
type: 'Note',
|
||||
content: 'Lorem ipsum',
|
||||
tag: [
|
||||
{
|
||||
type: 'Hashtag',
|
||||
href: 'http://example.com/blah',
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
|
||||
it 'creates status' do
|
||||
status = sender.statuses.first
|
||||
expect(status).to_not be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with emojis' do
|
||||
let(:object_json) do
|
||||
{
|
||||
@@ -242,5 +304,47 @@ RSpec.describe ActivityPub::Activity::Create do
|
||||
expect(status.emojis.map(&:shortcode)).to include('tinking')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with emojis missing name' do
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'bar',
|
||||
type: 'Note',
|
||||
content: 'Lorem ipsum :tinking:',
|
||||
tag: [
|
||||
{
|
||||
type: 'Emoji',
|
||||
href: 'http://example.com/emoji.png',
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
|
||||
it 'creates status' do
|
||||
status = sender.statuses.first
|
||||
expect(status).to_not be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with emojis missing href' do
|
||||
let(:object_json) do
|
||||
{
|
||||
id: 'bar',
|
||||
type: 'Note',
|
||||
content: 'Lorem ipsum :tinking:',
|
||||
tag: [
|
||||
{
|
||||
type: 'Emoji',
|
||||
name: 'tinking',
|
||||
},
|
||||
],
|
||||
}
|
||||
end
|
||||
|
||||
it 'creates status' do
|
||||
status = sender.statuses.first
|
||||
expect(status).to_not be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -108,7 +108,7 @@ RSpec.describe ActivityPub::TagManager do
|
||||
|
||||
it 'returns the local status for OStatus tag: URI' do
|
||||
status = Fabricate(:status)
|
||||
expect(subject.uri_to_resource(::TagManager.instance.uri_for(status), Status)).to eq status
|
||||
expect(subject.uri_to_resource(OStatus::TagManager.instance.uri_for(status), Status)).to eq status
|
||||
end
|
||||
|
||||
it 'returns the local status for OStatus StreamEntry URL' do
|
||||
|
@@ -1,15 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Emoji do
|
||||
describe '#unicode' do
|
||||
it 'returns a unicode for a shortcode' do
|
||||
expect(Emoji.instance.unicode(':joy:')).to eq '😂'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#names' do
|
||||
it 'returns an array' do
|
||||
expect(Emoji.instance.names).to be_an Array
|
||||
end
|
||||
end
|
||||
end
|
@@ -17,7 +17,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
follow_request_salmon = serialize(follow_request)
|
||||
|
||||
object_type = follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with request_friend type' do
|
||||
@@ -26,7 +26,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
follow_request_salmon = serialize(follow_request)
|
||||
|
||||
verb = follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:request_friend]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:request_friend]
|
||||
end
|
||||
|
||||
it 'appends activity:object with target account' do
|
||||
@@ -44,13 +44,13 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
it 'adds namespaces' do
|
||||
element = serialize
|
||||
|
||||
expect(element['xmlns']).to eq TagManager::XMLNS
|
||||
expect(element['xmlns:thr']).to eq TagManager::THR_XMLNS
|
||||
expect(element['xmlns:activity']).to eq TagManager::AS_XMLNS
|
||||
expect(element['xmlns:poco']).to eq TagManager::POCO_XMLNS
|
||||
expect(element['xmlns:media']).to eq TagManager::MEDIA_XMLNS
|
||||
expect(element['xmlns:ostatus']).to eq TagManager::OS_XMLNS
|
||||
expect(element['xmlns:mastodon']).to eq TagManager::MTDN_XMLNS
|
||||
expect(element['xmlns']).to eq OStatus::TagManager::XMLNS
|
||||
expect(element['xmlns:thr']).to eq OStatus::TagManager::THR_XMLNS
|
||||
expect(element['xmlns:activity']).to eq OStatus::TagManager::AS_XMLNS
|
||||
expect(element['xmlns:poco']).to eq OStatus::TagManager::POCO_XMLNS
|
||||
expect(element['xmlns:media']).to eq OStatus::TagManager::MEDIA_XMLNS
|
||||
expect(element['xmlns:ostatus']).to eq OStatus::TagManager::OS_XMLNS
|
||||
expect(element['xmlns:mastodon']).to eq OStatus::TagManager::MTDN_XMLNS
|
||||
end
|
||||
end
|
||||
|
||||
@@ -98,7 +98,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
mentioned = element.nodes.find do |node|
|
||||
node.name == 'link' &&
|
||||
node[:rel] == 'mentioned' &&
|
||||
node['ostatus:object-type'] == TagManager::TYPES[:person]
|
||||
node['ostatus:object-type'] == OStatus::TagManager::TYPES[:person]
|
||||
end
|
||||
|
||||
expect(mentioned[:href]).to eq 'https://cb6e6126.ngrok.io/users/username'
|
||||
@@ -188,7 +188,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
author = OStatus::AtomSerializer.new.author(account)
|
||||
|
||||
object_type = author.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:person]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:person]
|
||||
end
|
||||
|
||||
it 'appends email element with username and domain for local account' do
|
||||
@@ -358,9 +358,9 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
mentioned_person = entry.nodes.find do |node|
|
||||
node.name == 'link' &&
|
||||
node[:rel] == 'mentioned' &&
|
||||
node['ostatus:object-type'] == TagManager::TYPES[:collection]
|
||||
node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection]
|
||||
end
|
||||
expect(mentioned_person[:href]).to eq TagManager::COLLECTIONS[:public]
|
||||
expect(mentioned_person[:href]).to eq OStatus::TagManager::COLLECTIONS[:public]
|
||||
end
|
||||
|
||||
it 'does not append link element for the public collection if status is not publicly visible' do
|
||||
@@ -371,8 +371,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
entry.nodes.each do |node|
|
||||
if node.name == 'link' &&
|
||||
node[:rel] == 'mentioned' &&
|
||||
node['ostatus:object-type'] == TagManager::TYPES[:collection]
|
||||
expect(mentioned_collection[:href]).not_to eq TagManager::COLLECTIONS[:public]
|
||||
node['ostatus:object-type'] == OStatus::TagManager::TYPES[:collection]
|
||||
expect(mentioned_collection[:href]).not_to eq OStatus::TagManager::COLLECTIONS[:public]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -506,7 +506,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
status = Fabricate(:status)
|
||||
entry = OStatus::AtomSerializer.new.entry(status.stream_entry)
|
||||
object_type = entry.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:note]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:note]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with object type' do
|
||||
@@ -515,7 +515,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
entry = OStatus::AtomSerializer.new.entry(status.stream_entry)
|
||||
|
||||
object_type = entry.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(object_type.text).to eq TagManager::VERBS[:post]
|
||||
expect(object_type.text).to eq OStatus::TagManager::VERBS[:post]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with target if present' do
|
||||
@@ -739,8 +739,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(block_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
|
||||
.or(eq(TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
|
||||
.or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -769,7 +769,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
|
||||
|
||||
object_type = block_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with block' do
|
||||
@@ -778,7 +778,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
|
||||
|
||||
verb = block_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:block]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:block]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with target account' do
|
||||
@@ -826,8 +826,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(unblock_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
|
||||
.or(eq(TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
|
||||
.or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, block.id, 'Block')))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -856,7 +856,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
|
||||
|
||||
object_type = unblock_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with block' do
|
||||
@@ -865,7 +865,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
|
||||
|
||||
verb = unblock_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:unblock]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:unblock]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with target account' do
|
||||
@@ -934,7 +934,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
favourite_salmon = OStatus::AtomSerializer.new.favourite_salmon(favourite)
|
||||
|
||||
verb = favourite_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:favorite]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:favorite]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with status' do
|
||||
@@ -1005,8 +1005,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(unfavourite_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite'))
|
||||
.or(eq(TagManager.instance.unique_tag(time_after.utc, favourite.id, 'Favourite')))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite'))
|
||||
.or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, favourite.id, 'Favourite')))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -1034,7 +1034,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite)
|
||||
|
||||
verb = unfavourite_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:unfavorite]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:unfavorite]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with status' do
|
||||
@@ -1117,7 +1117,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow)
|
||||
|
||||
object_type = follow_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with follow' do
|
||||
@@ -1126,7 +1126,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
follow_salmon = OStatus::AtomSerializer.new.follow_salmon(follow)
|
||||
|
||||
verb = follow_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:follow]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:follow]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with target account' do
|
||||
@@ -1190,8 +1190,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(unfollow_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow'))
|
||||
.or(eq(TagManager.instance.unique_tag(time_after.utc, follow.id, 'Follow')))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow'))
|
||||
.or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow.id, 'Follow')))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -1234,7 +1234,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
|
||||
|
||||
object_type = unfollow_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with follow' do
|
||||
@@ -1244,7 +1244,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
|
||||
|
||||
verb = unfollow_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:unfollow]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:unfollow]
|
||||
end
|
||||
|
||||
it 'appends activity:object element with target account' do
|
||||
@@ -1338,8 +1338,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(authorize_follow_request_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
|
||||
.or(eq(TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest')))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
|
||||
.or(eq(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest')))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -1359,7 +1359,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)
|
||||
|
||||
object_type = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with authorize' do
|
||||
@@ -1368,7 +1368,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)
|
||||
|
||||
verb = authorize_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:authorize]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:authorize]
|
||||
end
|
||||
|
||||
it 'returns element whose rendered view creates follow from follow request when processed' do
|
||||
@@ -1407,8 +1407,8 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
time_after = Time.now
|
||||
|
||||
expect(reject_follow_request_salmon.id.text).to(
|
||||
eq(TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
|
||||
.or(TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest'))
|
||||
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
|
||||
.or(OStatus::TagManager.instance.unique_tag(time_after.utc, follow_request.id, 'FollowRequest'))
|
||||
)
|
||||
end
|
||||
|
||||
@@ -1424,14 +1424,14 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
follow_request = Fabricate(:follow_request)
|
||||
reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)
|
||||
object_type = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:activity]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:activity]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with authorize' do
|
||||
follow_request = Fabricate(:follow_request)
|
||||
reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)
|
||||
verb = reject_follow_request_salmon.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(verb.text).to eq TagManager::VERBS[:reject]
|
||||
expect(verb.text).to eq OStatus::TagManager::VERBS[:reject]
|
||||
end
|
||||
|
||||
it 'returns element whose rendered view deletes follow request when processed' do
|
||||
@@ -1503,7 +1503,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
entry = OStatus::AtomSerializer.new.object(status)
|
||||
|
||||
object_type = entry.nodes.find { |node| node.name == 'activity:object-type' }
|
||||
expect(object_type.text).to eq TagManager::TYPES[:note]
|
||||
expect(object_type.text).to eq OStatus::TagManager::TYPES[:note]
|
||||
end
|
||||
|
||||
it 'appends activity:verb element with verb' do
|
||||
@@ -1512,7 +1512,7 @@ RSpec.describe OStatus::AtomSerializer do
|
||||
entry = OStatus::AtomSerializer.new.object(status)
|
||||
|
||||
object_type = entry.nodes.find { |node| node.name == 'activity:verb' }
|
||||
expect(object_type.text).to eq TagManager::VERBS[:post]
|
||||
expect(object_type.text).to eq OStatus::TagManager::VERBS[:post]
|
||||
end
|
||||
|
||||
it 'appends link element for an alternative' do
|
||||
|
70
spec/lib/ostatus/tag_manager_spec.rb
Normal file
70
spec/lib/ostatus/tag_manager_spec.rb
Normal file
@@ -0,0 +1,70 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe OStatus::TagManager do
|
||||
describe '#unique_tag' do
|
||||
it 'returns a unique tag' do
|
||||
expect(OStatus::TagManager.instance.unique_tag(Time.utc(2000), 12, 'Status')).to eq 'tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#unique_tag_to_local_id' do
|
||||
it 'returns the ID part' do
|
||||
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status', 'Status')).to eql '12'
|
||||
end
|
||||
|
||||
it 'returns nil if it is not local id' do
|
||||
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:remote,2000-01-01:objectId=12:objectType=Status', 'Status')).to eq nil
|
||||
end
|
||||
|
||||
it 'returns nil if it is not expected type' do
|
||||
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Block', 'Status')).to eq nil
|
||||
end
|
||||
|
||||
it 'returns nil if it does not have object ID' do
|
||||
expect(OStatus::TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectType=Status', 'Status')).to eq nil
|
||||
end
|
||||
end
|
||||
|
||||
describe '#local_id?' do
|
||||
it 'returns true for a local ID' do
|
||||
expect(OStatus::TagManager.instance.local_id?('tag:cb6e6126.ngrok.io;objectId=12:objectType=Status')).to be true
|
||||
end
|
||||
|
||||
it 'returns false for a foreign ID' do
|
||||
expect(OStatus::TagManager.instance.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe '#uri_for' do
|
||||
subject { OStatus::TagManager.instance.uri_for(target) }
|
||||
|
||||
context 'comment object' do
|
||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
|
||||
|
||||
it 'returns the unique tag for status' do
|
||||
expect(target.object_type).to eq :comment
|
||||
is_expected.to eq target.uri
|
||||
end
|
||||
end
|
||||
|
||||
context 'note object' do
|
||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
|
||||
|
||||
it 'returns the unique tag for status' do
|
||||
expect(target.object_type).to eq :note
|
||||
is_expected.to eq target.uri
|
||||
end
|
||||
end
|
||||
|
||||
context 'person object' do
|
||||
let(:target) { Fabricate(:account, username: 'alice') }
|
||||
|
||||
it 'returns the URL for account' do
|
||||
expect(target.object_type).to eq :person
|
||||
is_expected.to eq 'https://cb6e6126.ngrok.io/users/alice'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@@ -120,71 +120,6 @@ RSpec.describe TagManager do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#unique_tag' do
|
||||
it 'returns a unique tag' do
|
||||
expect(TagManager.instance.unique_tag(Time.utc(2000), 12, 'Status')).to eq 'tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status'
|
||||
end
|
||||
end
|
||||
|
||||
describe '#unique_tag_to_local_id' do
|
||||
it 'returns the ID part' do
|
||||
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Status', 'Status')).to eql '12'
|
||||
end
|
||||
|
||||
it 'returns nil if it is not local id' do
|
||||
expect(TagManager.instance.unique_tag_to_local_id('tag:remote,2000-01-01:objectId=12:objectType=Status', 'Status')).to eq nil
|
||||
end
|
||||
|
||||
it 'returns nil if it is not expected type' do
|
||||
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectId=12:objectType=Block', 'Status')).to eq nil
|
||||
end
|
||||
|
||||
it 'returns nil if it does not have object ID' do
|
||||
expect(TagManager.instance.unique_tag_to_local_id('tag:cb6e6126.ngrok.io,2000-01-01:objectType=Status', 'Status')).to eq nil
|
||||
end
|
||||
end
|
||||
|
||||
describe '#local_id?' do
|
||||
it 'returns true for a local ID' do
|
||||
expect(TagManager.instance.local_id?('tag:cb6e6126.ngrok.io;objectId=12:objectType=Status')).to be true
|
||||
end
|
||||
|
||||
it 'returns false for a foreign ID' do
|
||||
expect(TagManager.instance.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
|
||||
end
|
||||
end
|
||||
|
||||
describe '#uri_for' do
|
||||
subject { TagManager.instance.uri_for(target) }
|
||||
|
||||
context 'comment object' do
|
||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: true) }
|
||||
|
||||
it 'returns the unique tag for status' do
|
||||
expect(target.object_type).to eq :comment
|
||||
is_expected.to eq target.uri
|
||||
end
|
||||
end
|
||||
|
||||
context 'note object' do
|
||||
let(:target) { Fabricate(:status, created_at: '2000-01-01T00:00:00Z', reply: false, thread: nil) }
|
||||
|
||||
it 'returns the unique tag for status' do
|
||||
expect(target.object_type).to eq :note
|
||||
is_expected.to eq target.uri
|
||||
end
|
||||
end
|
||||
|
||||
context 'person object' do
|
||||
let(:target) { Fabricate(:account, username: 'alice') }
|
||||
|
||||
it 'returns the URL for account' do
|
||||
expect(target.object_type).to eq :person
|
||||
is_expected.to eq 'https://cb6e6126.ngrok.io/users/alice'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#url_for' do
|
||||
let(:alice) { Fabricate(:account, username: 'alice') }
|
||||
|
||||
|
@@ -173,6 +173,22 @@ RSpec.describe Status, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
describe '.not_in_filtered_languages' do
|
||||
context 'for accounts with language filters' do
|
||||
let(:user) { Fabricate(:user, filtered_languages: ['en']) }
|
||||
|
||||
it 'does not include statuses in filtered languages' do
|
||||
status = Fabricate(:status, language: 'en')
|
||||
expect(Status.not_in_filtered_languages(user.account)).not_to include status
|
||||
end
|
||||
|
||||
it 'includes status with unknown language' do
|
||||
status = Fabricate(:status, language: nil)
|
||||
expect(Status.not_in_filtered_languages(user.account)).to include status
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.as_home_timeline' do
|
||||
let(:account) { Fabricate(:account) }
|
||||
let(:followed) { Fabricate(:account) }
|
||||
|
@@ -1,7 +1,7 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe ActivityPub::ProcessCollectionService do
|
||||
let(:actor) { Fabricate(:account) }
|
||||
let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/account') }
|
||||
|
||||
let(:payload) do
|
||||
{
|
||||
@@ -24,7 +24,7 @@ RSpec.describe ActivityPub::ProcessCollectionService do
|
||||
describe '#call' do
|
||||
context 'when actor is the sender'
|
||||
context 'when actor differs from sender' do
|
||||
let(:forwarder) { Fabricate(:account) }
|
||||
let(:forwarder) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/other_account') }
|
||||
|
||||
it 'processes payload with sender if no signature exists' do
|
||||
expect_any_instance_of(ActivityPub::LinkedDataSignature).not_to receive(:verify_account!)
|
||||
|
@@ -42,7 +42,7 @@ RSpec.describe AuthorizeFollowService do
|
||||
it 'sends a follow request authorization salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:authorize])
|
||||
xml.match(OStatus::TagManager::VERBS[:authorize])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -50,14 +50,14 @@ RSpec.describe BatchedRemoveStatusService do
|
||||
|
||||
it 'sends PuSH update to PuSH subscribers' do
|
||||
expect(a_request(:post, 'http://example.com/push').with { |req|
|
||||
matches = req.body.match(TagManager::VERBS[:delete])
|
||||
matches = req.body.match(OStatus::TagManager::VERBS[:delete])
|
||||
}).to have_been_made.at_least_once
|
||||
end
|
||||
|
||||
it 'sends Salmon slap to previously mentioned users' do
|
||||
expect(a_request(:post, "http://example.com/salmon").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:delete])
|
||||
xml.match(OStatus::TagManager::VERBS[:delete])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
|
||||
|
@@ -32,7 +32,7 @@ RSpec.describe BlockService do
|
||||
it 'sends a block salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:block])
|
||||
xml.match(OStatus::TagManager::VERBS[:block])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -34,7 +34,7 @@ RSpec.describe FavouriteService do
|
||||
it 'sends a salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:favorite])
|
||||
xml.match(OStatus::TagManager::VERBS[:favorite])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -60,7 +60,7 @@ RSpec.describe FollowService do
|
||||
it 'sends a follow request salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:request_friend])
|
||||
xml.match(OStatus::TagManager::VERBS[:request_friend])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
@@ -81,7 +81,7 @@ RSpec.describe FollowService do
|
||||
it 'sends a follow salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:follow])
|
||||
xml.match(OStatus::TagManager::VERBS[:follow])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
|
||||
|
@@ -42,7 +42,7 @@ RSpec.describe RejectFollowService do
|
||||
it 'sends a follow request rejection salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:reject])
|
||||
xml.match(OStatus::TagManager::VERBS[:reject])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -34,7 +34,7 @@ RSpec.describe RemoveStatusService do
|
||||
|
||||
it 'sends PuSH update to PuSH subscribers' do
|
||||
expect(a_request(:post, 'http://example.com/push').with { |req|
|
||||
req.body.match(TagManager::VERBS[:delete])
|
||||
req.body.match(OStatus::TagManager::VERBS[:delete])
|
||||
}).to have_been_made
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ RSpec.describe RemoveStatusService do
|
||||
it 'sends Salmon slap to previously mentioned users' do
|
||||
expect(a_request(:post, "http://example.com/salmon").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:delete])
|
||||
xml.match(OStatus::TagManager::VERBS[:delete])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
|
||||
|
@@ -34,7 +34,7 @@ RSpec.describe UnblockService do
|
||||
it 'sends an unblock salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:unblock])
|
||||
xml.match(OStatus::TagManager::VERBS[:unblock])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -34,7 +34,7 @@ RSpec.describe UnfollowService do
|
||||
it 'sends an unfollow salmon slap' do
|
||||
expect(a_request(:post, "http://salmon.example.com/").with { |req|
|
||||
xml = OStatus2::Salmon.new.unpack(req.body)
|
||||
xml.match(TagManager::VERBS[:unfollow])
|
||||
xml.match(OStatus::TagManager::VERBS[:unfollow])
|
||||
}).to have_been_made.once
|
||||
end
|
||||
end
|
||||
|
@@ -18,48 +18,11 @@ describe Pubsubhubbub::DistributionWorker do
|
||||
it 'delivers payload to all subscriptions' do
|
||||
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
|
||||
subject.perform(status.stream_entry.id)
|
||||
expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([anonymous_subscription, subscription_with_follower])
|
||||
end
|
||||
end
|
||||
|
||||
context 'when OStatus privacy is used' do
|
||||
around do |example|
|
||||
before_val = Rails.configuration.x.use_ostatus_privacy
|
||||
Rails.configuration.x.use_ostatus_privacy = true
|
||||
example.run
|
||||
Rails.configuration.x.use_ostatus_privacy = before_val
|
||||
end
|
||||
|
||||
describe 'with private status' do
|
||||
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) }
|
||||
|
||||
it 'delivers payload only to subscriptions with followers' do
|
||||
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
|
||||
subject.perform(status.stream_entry.id)
|
||||
expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([subscription_with_follower])
|
||||
expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk).with([anonymous_subscription])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'with direct status' do
|
||||
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :direct) }
|
||||
|
||||
it 'does not deliver payload' do
|
||||
allow(Pubsubhubbub::DeliveryWorker).to receive(:push_bulk)
|
||||
subject.perform(status.stream_entry.id)
|
||||
expect(Pubsubhubbub::DeliveryWorker).to_not have_received(:push_bulk)
|
||||
end
|
||||
expect(Pubsubhubbub::DeliveryWorker).to have_received(:push_bulk).with([anonymous_subscription.id, subscription_with_follower.id])
|
||||
end
|
||||
end
|
||||
|
||||
context 'when OStatus privacy is not used' do
|
||||
around do |example|
|
||||
before_val = Rails.configuration.x.use_ostatus_privacy
|
||||
Rails.configuration.x.use_ostatus_privacy = false
|
||||
example.run
|
||||
Rails.configuration.x.use_ostatus_privacy = before_val
|
||||
end
|
||||
|
||||
describe 'with private status' do
|
||||
let(:status) { Fabricate(:status, account: alice, text: 'Hello', visibility: :private) }
|
||||
|
||||
|
Reference in New Issue
Block a user