Merge tag 'v2.7.0rc1' into instance_only_statuses

This commit is contained in:
Renato "Lond" Cerqueira
2019-01-09 10:47:10 +01:00
585 changed files with 16065 additions and 8146 deletions

View File

@ -2,10 +2,10 @@ require 'rails_helper'
describe AccountFilter do
describe 'with empty params' do
it 'defaults to recent account list' do
it 'defaults to recent local not-suspended account list' do
filter = described_class.new({})
expect(filter.results).to eq Account.recent
expect(filter.results).to eq Account.local.recent.without_suspended
end
end
@ -17,23 +17,6 @@ describe AccountFilter do
end
end
describe 'when an IP address is provided' do
it 'filters with IP when valid' do
filter = described_class.new(ip: '127.0.0.1')
allow(User).to receive(:with_recent_ip_address).and_return(User.none)
filter.results
expect(User).to have_received(:with_recent_ip_address).with('127.0.0.1')
end
it 'skips IP when invalid' do
filter = described_class.new(ip: '345.678.901.234')
expect(User).not_to receive(:with_recent_ip_address)
filter.results
end
end
describe 'with valid params' do
it 'combines filters on Account' do
filter = described_class.new(
@ -60,13 +43,13 @@ describe AccountFilter do
end
describe 'that call account methods' do
%i(local remote silenced alphabetic suspended).each do |option|
%i(local remote silenced suspended).each do |option|
it "delegates the #{option} option" do
allow(Account).to receive(option).and_return(Account.none)
filter = described_class.new({ option => true })
filter.results
expect(Account).to have_received(option)
expect(Account).to have_received(option).at_least(1)
end
end
end

View File

@ -1,5 +0,0 @@
require 'rails_helper'
RSpec.describe AccountPin, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end

View File

@ -760,24 +760,6 @@ RSpec.describe Account, type: :model do
expect(Account.suspended).to match_array([account_1])
end
end
describe 'without_followers' do
it 'returns a relation of accounts without followers' do
account_1 = Fabricate(:account)
account_2 = Fabricate(:account)
Fabricate(:follow, account: account_1, target_account: account_2)
expect(Account.without_followers).to match_array([account_1])
end
end
describe 'with_followers' do
it 'returns a relation of accounts with followers' do
account_1 = Fabricate(:account)
account_2 = Fabricate(:account)
Fabricate(:follow, account: account_1, target_account: account_2)
expect(Account.with_followers).to match_array([account_2])
end
end
end
context 'when is local' do

View File

@ -0,0 +1,4 @@
require 'rails_helper'
RSpec.describe AccountStat, type: :model do
end

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AccountTagStat, type: :model do
key = 'accounts_count'
let(:account_tag_stat) { Fabricate(:tag).account_tag_stat }
describe '#increment_count!' do
it 'calls #update' do
args = { key => account_tag_stat.public_send(key) + 1 }
expect(account_tag_stat).to receive(:update).with(args)
account_tag_stat.increment_count!(key)
end
it 'increments value by 1' do
expect do
account_tag_stat.increment_count!(key)
end.to change { account_tag_stat.accounts_count }.by(1)
end
end
describe '#decrement_count!' do
it 'calls #update' do
args = { key => [account_tag_stat.public_send(key) - 1, 0].max }
expect(account_tag_stat).to receive(:update).with(args)
account_tag_stat.decrement_count!(key)
end
it 'decrements value by 1' do
account_tag_stat.update(key => 1)
expect do
account_tag_stat.decrement_count!(key)
end.to change { account_tag_stat.accounts_count }.by(-1)
end
end
end

View File

@ -0,0 +1,4 @@
require 'rails_helper'
RSpec.describe Admin::AccountAction, type: :model do
end

View File

@ -118,5 +118,15 @@ describe StatusThreadingConcern do
viewer.block_domain!('example.com')
expect(status.descendants(4, viewer)).to_not include(reply2)
end
it 'promotes self-replies to the top while leaving the rest in order' do
a = Fabricate(:status, account: alice)
d = Fabricate(:status, account: jeff, thread: a)
e = Fabricate(:status, account: bob, thread: d)
c = Fabricate(:status, account: alice, thread: a)
f = Fabricate(:status, account: bob, thread: c)
expect(a.descendants(20)).to eq [c, d, e, f]
end
end
end

View File

@ -0,0 +1,70 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe CustomEmojiFilter do
describe '#results' do
let!(:custom_emoji_0) { Fabricate(:custom_emoji, domain: 'a') }
let!(:custom_emoji_1) { Fabricate(:custom_emoji, domain: 'b') }
let!(:custom_emoji_2) { Fabricate(:custom_emoji, domain: nil, shortcode: 'hoge') }
subject { described_class.new(params).results }
context 'params have values' do
context 'local' do
let(:params) { { local: true } }
it 'returns ActiveRecord::Relation' do
expect(subject).to be_kind_of(ActiveRecord::Relation)
expect(subject).to match_array([custom_emoji_2])
end
end
context 'remote' do
let(:params) { { remote: true } }
it 'returns ActiveRecord::Relation' do
expect(subject).to be_kind_of(ActiveRecord::Relation)
expect(subject).to match_array([custom_emoji_0, custom_emoji_1])
end
end
context 'by_domain' do
let(:params) { { by_domain: 'a' } }
it 'returns ActiveRecord::Relation' do
expect(subject).to be_kind_of(ActiveRecord::Relation)
expect(subject).to match_array([custom_emoji_0])
end
end
context 'shortcode' do
let(:params) { { shortcode: 'hoge' } }
it 'returns ActiveRecord::Relation' do
expect(subject).to be_kind_of(ActiveRecord::Relation)
expect(subject).to match_array([custom_emoji_2])
end
end
context 'else' do
let(:params) { { else: 'else' } }
it 'raises RuntimeError' do
expect do
subject
end.to raise_error(RuntimeError, /Unknown filter: else/)
end
end
end
context 'params without value' do
let(:params) { { hoge: nil } }
it 'returns ActiveRecord::Relation' do
expect(subject).to be_kind_of(ActiveRecord::Relation)
expect(subject).to match_array([custom_emoji_0, custom_emoji_1, custom_emoji_2])
end
end
end
end

View File

@ -75,4 +75,13 @@ RSpec.describe CustomEmoji, type: :model do
end
end
end
describe 'pre_validation' do
let(:custom_emoji) { Fabricate(:custom_emoji, domain: 'wWw.MaStOdOn.CoM') }
it 'should downcase' do
custom_emoji.valid?
expect(custom_emoji.domain).to eq('www.mastodon.com')
end
end
end

View File

@ -1,5 +1,16 @@
require 'rails_helper'
RSpec.describe Identity, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
describe '.find_for_oauth' do
let(:auth) { Fabricate(:identity, user: Fabricate(:user)) }
it 'calls .find_or_create_by' do
expect(described_class).to receive(:find_or_create_by).with(uid: auth.uid, provider: auth.provider)
described_class.find_for_oauth(auth)
end
it 'returns an instance of Identity' do
expect(described_class.find_for_oauth(auth)).to be_instance_of Identity
end
end
end

View File

@ -1,10 +1,6 @@
require 'rails_helper'
RSpec.describe Notification, type: :model do
describe '#from_account' do
pending
end
describe '#target_status' do
let(:notification) { Fabricate(:notification, activity: activity) }
let(:status) { Fabricate(:status) }
@ -101,7 +97,7 @@ RSpec.describe Notification, type: :model do
before do
allow(accounts_with_ids).to receive(:[]).with(stale_account1.id).and_return(account1)
allow(accounts_with_ids).to receive(:[]).with(stale_account2.id).and_return(account2)
allow(Account).to receive_message_chain(:where, :each_with_object).and_return(accounts_with_ids)
allow(Account).to receive_message_chain(:where, :includes, :each_with_object).and_return(accounts_with_ids)
end
let(:cached_items) do

View File

@ -0,0 +1,4 @@
require 'rails_helper'
RSpec.describe ScheduledStatus, type: :model do
end

View File

@ -1,5 +1,4 @@
require 'rails_helper'
RSpec.describe StatusStat, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end

View File

@ -89,18 +89,6 @@ RSpec.describe User, type: :model do
expect(User.matches_email('specified')).to match_array([specified])
end
end
describe 'with_recent_ip_address' do
it 'returns a relation of users who is, or was at last time, online with the given IP address' do
specifieds = [
Fabricate(:user, current_sign_in_ip: '0.0.0.42', last_sign_in_ip: '0.0.0.0'),
Fabricate(:user, current_sign_in_ip: nil, last_sign_in_ip: '0.0.0.42')
]
Fabricate(:user, current_sign_in_ip: '0.0.0.0', last_sign_in_ip: '0.0.0.0')
expect(User.with_recent_ip_address('0.0.0.42')).to match_array(specifieds)
end
end
end
let(:account) { Fabricate(:account, username: 'alice') }
@ -118,19 +106,19 @@ RSpec.describe User, type: :model do
end
it 'should allow a non-blacklisted user to be created' do
user = User.new(email: 'foo@example.com', account: account, password: password)
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
expect(user.valid?).to be_truthy
end
it 'should not allow a blacklisted user to be created' do
user = User.new(email: 'foo@mvrht.com', account: account, password: password)
user = User.new(email: 'foo@mvrht.com', account: account, password: password, agreement: true)
expect(user.valid?).to be_falsey
end
it 'should not allow a subdomain blacklisted user to be created' do
user = User.new(email: 'foo@mvrht.com.topdomain.tld', account: account, password: password)
user = User.new(email: 'foo@mvrht.com.topdomain.tld', account: account, password: password, agreement: true)
expect(user.valid?).to be_falsey
end
@ -222,17 +210,17 @@ RSpec.describe User, type: :model do
end
it 'should not allow a user to be created unless they are whitelisted' do
user = User.new(email: 'foo@example.com', account: account, password: password)
user = User.new(email: 'foo@example.com', account: account, password: password, agreement: true)
expect(user.valid?).to be_falsey
end
it 'should allow a user to be created if they are whitelisted' do
user = User.new(email: 'foo@mastodon.space', account: account, password: password)
user = User.new(email: 'foo@mastodon.space', account: account, password: password, agreement: true)
expect(user.valid?).to be_truthy
end
it 'should not allow a user with a whitelisted top domain as subdomain in their email address to be created' do
user = User.new(email: 'foo@mastodon.space.userdomain.com', account: account, password: password)
user = User.new(email: 'foo@mastodon.space.userdomain.com', account: account, password: password, agreement: true)
expect(user.valid?).to be_falsey
end
@ -254,7 +242,7 @@ RSpec.describe User, type: :model do
it_behaves_like 'Settings-extended' do
def create!
User.create!(account: Fabricate(:account), email: 'foo@mastodon.space', password: 'abcd1234')
User.create!(account: Fabricate(:account), email: 'foo@mastodon.space', password: 'abcd1234', agreement: true)
end
def fabricate