Merge branch 'master' into glitch-soc/merge-upstream
This commit is contained in:
@@ -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
|
||||
|
@@ -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 => {})
|
||||
|
37
spec/controllers/api/v1/conversations_controller_spec.rb
Normal file
37
spec/controllers/api/v1/conversations_controller_spec.rb
Normal 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
|
6
spec/fabricators/conversation_account_fabricator.rb
Normal file
6
spec/fabricators/conversation_account_fabricator.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
Fabricator(:conversation_account) do
|
||||
account nil
|
||||
conversation nil
|
||||
participant_account_ids ""
|
||||
last_status nil
|
||||
end
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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'))
|
||||
|
72
spec/models/account_conversation_spec.rb
Normal file
72
spec/models/account_conversation_spec.rb
Normal 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
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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!
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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 }
|
||||
|
@@ -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
|
||||
|
@@ -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 }
|
||||
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user