Merge branch 'master' into glitch-soc/merge-upstream

This commit is contained in:
Thibaut Girka
2018-10-08 13:51:33 +02:00
58 changed files with 875 additions and 106 deletions

View File

@@ -15,7 +15,7 @@ RSpec.describe Api::SalmonController, type: :controller do
describe 'POST #update' do
context 'with valid post data' do
before do
post :update, params: { id: account.id }, body: File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
post :update, params: { id: account.id }, body: File.read(Rails.root.join('spec', 'fixtures', 'salmon', 'mention.xml'))
end
it 'contains XML in the request body' do
@@ -54,7 +54,7 @@ RSpec.describe Api::SalmonController, type: :controller do
service = double(call: false)
allow(VerifySalmonService).to receive(:new).and_return(service)
post :update, params: { id: account.id }, body: File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml'))
post :update, params: { id: account.id }, body: File.read(Rails.root.join('spec', 'fixtures', 'salmon', 'mention.xml'))
end
it 'returns http client error' do

View File

@@ -33,7 +33,7 @@ RSpec.describe Api::SubscriptionsController, type: :controller do
end
describe 'POST #update' do
let(:feed) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'push', 'feed.atom')) }
let(:feed) { File.read(Rails.root.join('spec', 'fixtures', 'push', 'feed.atom')) }
before do
stub_request(:post, "https://quitter.no/main/push/hub").to_return(:status => 200, :body => "", :headers => {})

View File

@@ -0,0 +1,37 @@
require 'rails_helper'
RSpec.describe Api::V1::ConversationsController, type: :controller do
render_views
let!(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:other) { Fabricate(:user, account: Fabricate(:account, username: 'bob')) }
before do
allow(controller).to receive(:doorkeeper_token) { token }
end
describe 'GET #index' do
let(:scopes) { 'read:statuses' }
before do
PostStatusService.new.call(other.account, 'Hey @alice', nil, visibility: 'direct')
end
it 'returns http success' do
get :index
expect(response).to have_http_status(200)
end
it 'returns pagination headers' do
get :index, params: { limit: 1 }
expect(response.headers['Link'].links.size).to eq(2)
end
it 'returns conversations' do
get :index
json = body_as_json
expect(json.size).to eq 1
end
end
end

View File

@@ -0,0 +1,6 @@
Fabricator(:conversation_account) do
account nil
conversation nil
participant_account_ids ""
last_status nil
end

View File

@@ -2,5 +2,5 @@ Fabricator(:user) do
account
email { sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } }
password "123456789"
confirmed_at { Time.now }
confirmed_at { Time.zone.now }
end

View File

@@ -3,7 +3,7 @@ require "rails_helper"
feature "Log in" do
given(:email) { "test@examle.com" }
given(:password) { "password" }
given(:confirmed_at) { Time.now }
given(:confirmed_at) { Time.zone.now }
background do
Fabricate(:user, email: email, password: password, confirmed_at: confirmed_at)

View File

@@ -728,9 +728,9 @@ RSpec.describe OStatus::AtomSerializer do
it 'appends id element with unique tag' do
block = Fabricate(:block)
time_before = Time.now
time_before = Time.zone.now
block_salmon = OStatus::AtomSerializer.new.block_salmon(block)
time_after = Time.now
time_after = Time.zone.now
expect(block_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
@@ -815,9 +815,9 @@ RSpec.describe OStatus::AtomSerializer do
it 'appends id element with unique tag' do
block = Fabricate(:block)
time_before = Time.now
time_before = Time.zone.now
unblock_salmon = OStatus::AtomSerializer.new.unblock_salmon(block)
time_after = Time.now
time_after = Time.zone.now
expect(unblock_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, block.id, 'Block'))
@@ -994,9 +994,9 @@ RSpec.describe OStatus::AtomSerializer do
it 'appends id element with unique tag' do
favourite = Fabricate(:favourite)
time_before = Time.now
time_before = Time.zone.now
unfavourite_salmon = OStatus::AtomSerializer.new.unfavourite_salmon(favourite)
time_after = Time.now
time_after = Time.zone.now
expect(unfavourite_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, favourite.id, 'Favourite'))
@@ -1179,9 +1179,9 @@ RSpec.describe OStatus::AtomSerializer do
follow = Fabricate(:follow)
follow.destroy!
time_before = Time.now
time_before = Time.zone.now
unfollow_salmon = OStatus::AtomSerializer.new.unfollow_salmon(follow)
time_after = Time.now
time_after = Time.zone.now
expect(unfollow_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow.id, 'Follow'))
@@ -1327,9 +1327,9 @@ RSpec.describe OStatus::AtomSerializer do
it 'appends id element with unique tag' do
follow_request = Fabricate(:follow_request)
time_before = Time.now
time_before = Time.zone.now
authorize_follow_request_salmon = OStatus::AtomSerializer.new.authorize_follow_request_salmon(follow_request)
time_after = Time.now
time_after = Time.zone.now
expect(authorize_follow_request_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))
@@ -1396,9 +1396,9 @@ RSpec.describe OStatus::AtomSerializer do
it 'appends id element with unique tag' do
follow_request = Fabricate(:follow_request)
time_before = Time.now
time_before = Time.zone.now
reject_follow_request_salmon = OStatus::AtomSerializer.new.reject_follow_request_salmon(follow_request)
time_after = Time.now
time_after = Time.zone.now
expect(reject_follow_request_salmon.id.text).to(
eq(OStatus::TagManager.instance.unique_tag(time_before.utc, follow_request.id, 'FollowRequest'))

View File

@@ -0,0 +1,72 @@
require 'rails_helper'
RSpec.describe AccountConversation, type: :model do
let!(:alice) { Fabricate(:account, username: 'alice') }
let!(:bob) { Fabricate(:account, username: 'bob') }
let!(:mark) { Fabricate(:account, username: 'mark') }
describe '.add_status' do
it 'creates new record when no others exist' do
status = Fabricate(:status, account: alice, visibility: :direct)
status.mentions.create(account: bob)
conversation = AccountConversation.add_status(alice, status)
expect(conversation.participant_accounts).to include(bob)
expect(conversation.last_status).to eq status
expect(conversation.status_ids).to eq [status.id]
end
it 'appends to old record when there is a match' do
last_status = Fabricate(:status, account: alice, visibility: :direct)
conversation = AccountConversation.create!(account: alice, conversation: last_status.conversation, participant_account_ids: [bob.id], status_ids: [last_status.id])
status = Fabricate(:status, account: bob, visibility: :direct, thread: last_status)
status.mentions.create(account: alice)
new_conversation = AccountConversation.add_status(alice, status)
expect(new_conversation.id).to eq conversation.id
expect(new_conversation.participant_accounts).to include(bob)
expect(new_conversation.last_status).to eq status
expect(new_conversation.status_ids).to eq [last_status.id, status.id]
end
it 'creates new record when new participants are added' do
last_status = Fabricate(:status, account: alice, visibility: :direct)
conversation = AccountConversation.create!(account: alice, conversation: last_status.conversation, participant_account_ids: [bob.id], status_ids: [last_status.id])
status = Fabricate(:status, account: bob, visibility: :direct, thread: last_status)
status.mentions.create(account: alice)
status.mentions.create(account: mark)
new_conversation = AccountConversation.add_status(alice, status)
expect(new_conversation.id).to_not eq conversation.id
expect(new_conversation.participant_accounts).to include(bob, mark)
expect(new_conversation.last_status).to eq status
expect(new_conversation.status_ids).to eq [status.id]
end
end
describe '.remove_status' do
it 'updates last status to a previous value' do
last_status = Fabricate(:status, account: alice, visibility: :direct)
status = Fabricate(:status, account: alice, visibility: :direct)
conversation = AccountConversation.create!(account: alice, conversation: last_status.conversation, participant_account_ids: [bob.id], status_ids: [status.id, last_status.id])
last_status.mentions.create(account: bob)
last_status.destroy!
conversation.reload
expect(conversation.last_status).to eq status
expect(conversation.status_ids).to eq [status.id]
end
it 'removes the record if no other statuses are referenced' do
last_status = Fabricate(:status, account: alice, visibility: :direct)
conversation = AccountConversation.create!(account: alice, conversation: last_status.conversation, participant_account_ids: [bob.id], status_ids: [last_status.id])
last_status.mentions.create(account: bob)
last_status.destroy!
expect(AccountConversation.where(id: conversation.id).count).to eq 0
end
end
end

View File

@@ -154,7 +154,7 @@ RSpec.describe Status, type: :model do
describe '#target' do
it 'returns nil if the status is self-contained' do
expect(subject.target).to be_nil
expect(subject.target).to be_nil
end
it 'returns nil if the status is a reply' do

View File

@@ -67,7 +67,7 @@ RSpec.describe User, type: :model do
describe 'confirmed' do
it 'returns an array of users who are confirmed' do
user_1 = Fabricate(:user, confirmed_at: nil)
user_2 = Fabricate(:user, confirmed_at: Time.now)
user_2 = Fabricate(:user, confirmed_at: Time.zone.now)
expect(User.confirmed).to match_array([user_2])
end
end

View File

@@ -72,11 +72,11 @@ RSpec::Sidekiq.configure do |config|
end
def request_fixture(name)
File.read(File.join(Rails.root, 'spec', 'fixtures', 'requests', name))
File.read(Rails.root.join('spec', 'fixtures', 'requests', name))
end
def attachment_fixture(name)
File.open(File.join(Rails.root, 'spec', 'fixtures', 'files', name))
File.open(Rails.root.join('spec', 'fixtures', 'files', name))
end
def stub_jsonld_contexts!

View File

@@ -19,7 +19,7 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
Fabricate(:subscription, account: alice, callback_url: 'http://example.com/push', confirmed: true, expires_at: 30.days.from_now)
jeff.user.update(current_sign_in_at: Time.now)
jeff.user.update(current_sign_in_at: Time.zone.now)
jeff.follow!(alice)
hank.follow!(alice)

View File

@@ -19,7 +19,7 @@ RSpec.describe FetchRemoteAccountService, type: :service do
end
let(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } }
let(:xml) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'xml', 'mastodon.atom')) }
let(:xml) { File.read(Rails.root.join('spec', 'fixtures', 'xml', 'mastodon.atom')) }
shared_examples 'return Account' do
it { is_expected.to be_an Account }

View File

@@ -4,7 +4,7 @@ RSpec.describe ProcessFeedService, type: :service do
subject { ProcessFeedService.new }
describe 'processing a feed' do
let(:body) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'xml', 'mastodon.atom')) }
let(:body) { File.read(Rails.root.join('spec', 'fixtures', 'xml', 'mastodon.atom')) }
let(:account) { Fabricate(:account, username: 'localhost', domain: 'kickass.zone') }
before do

View File

@@ -1,7 +1,7 @@
require 'rails_helper'
RSpec.describe UpdateRemoteProfileService, type: :service do
let(:xml) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'push', 'feed.atom')) }
let(:xml) { File.read(Rails.root.join('spec', 'fixtures', 'push', 'feed.atom')) }
subject { UpdateRemoteProfileService.new }

View File

@@ -20,6 +20,7 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do
open_registrations: false,
thumbnail: nil,
hero: nil,
mascot: nil,
user_count: 0,
status_count: 0,
commit_hash: commit_hash,