Merge tag 'v2.7.0rc1' into instance_only_statuses
This commit is contained in:
@ -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
|
||||
|
@ -1,5 +0,0 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe AccountPin, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
@ -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
|
||||
|
4
spec/models/account_stat_spec.rb
Normal file
4
spec/models/account_stat_spec.rb
Normal file
@ -0,0 +1,4 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe AccountStat, type: :model do
|
||||
end
|
38
spec/models/account_tag_stat_spec.rb
Normal file
38
spec/models/account_tag_stat_spec.rb
Normal 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
|
4
spec/models/admin/account_action_spec.rb
Normal file
4
spec/models/admin/account_action_spec.rb
Normal file
@ -0,0 +1,4 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Admin::AccountAction, type: :model do
|
||||
end
|
@ -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
|
||||
|
70
spec/models/custom_emoji_filter_spec.rb
Normal file
70
spec/models/custom_emoji_filter_spec.rb
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
4
spec/models/scheduled_status_spec.rb
Normal file
4
spec/models/scheduled_status_spec.rb
Normal file
@ -0,0 +1,4 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe ScheduledStatus, type: :model do
|
||||
end
|
@ -1,5 +1,4 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe StatusStat, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user