Merge remote-tracking branch 'parent/main' into upstream-20240109

This commit is contained in:
KMY 2025-01-09 13:20:56 +09:00
commit d35fa72842
333 changed files with 4444 additions and 2541 deletions

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::AccountActionsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -8,7 +8,7 @@ RSpec.describe Admin::AccountsController do
before { sign_in current_user, scope: :user }
describe 'GET #index' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
let(:params) do
{
origin: 'local',
@ -53,7 +53,7 @@ RSpec.describe Admin::AccountsController do
end
describe 'GET #show' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
describe 'account moderation notes' do
let(:account) { Fabricate(:account) }

View file

@ -16,7 +16,7 @@ RSpec.describe Admin::ActionLogsController do
describe 'GET #index' do
it 'returns 200' do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin'))
sign_in Fabricate(:admin_user)
get :index, params: { page: 1 }
expect(response).to have_http_status(200)

View file

@ -20,7 +20,7 @@ RSpec.describe Admin::BaseController do
it 'returns private cache control headers' do
routes.draw { get 'success' => 'admin/base#success' }
sign_in(Fabricate(:user, role: UserRole.find_by(name: 'Moderator')))
sign_in(Fabricate(:moderator_user))
get :success
expect(response.headers['Cache-Control']).to include('private, no-store')
@ -28,14 +28,14 @@ RSpec.describe Admin::BaseController do
it 'renders admin layout as a moderator' do
routes.draw { get 'success' => 'admin/base#success' }
sign_in(Fabricate(:user, role: UserRole.find_by(name: 'Moderator')))
sign_in(Fabricate(:moderator_user))
get :success
expect(response).to render_template layout: 'admin'
end
it 'renders admin layout as an admin' do
routes.draw { get 'success' => 'admin/base#success' }
sign_in(Fabricate(:user, role: UserRole.find_by(name: 'Admin')))
sign_in(Fabricate(:admin_user))
get :success
expect(response).to render_template layout: 'admin'
end

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::ChangeEmailsController do
render_views
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:admin) { Fabricate(:admin_user) }
before do
sign_in admin

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::ConfirmationsController do
render_views
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'POST #create' do

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::DashboardController do
render_views
describe 'GET #index' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Owner')) }
let(:user) { Fabricate(:owner_user) }
before do
stub_system_checks

View file

@ -16,7 +16,7 @@ RSpec.describe Admin::Disputes::AppealsController do
let(:appeal) { Fabricate(:appeal, strike: strike, account: target_account) }
describe 'GET #index' do
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
before { appeal }
@ -32,7 +32,7 @@ RSpec.describe Admin::Disputes::AppealsController do
describe 'POST #approve' do
subject { post :approve, params: { id: appeal.id } }
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
it 'redirects back to the strike page and notifies target account about approved appeal', :inline_jobs do
emails = capture_emails { subject }
@ -56,7 +56,7 @@ RSpec.describe Admin::Disputes::AppealsController do
describe 'POST #reject' do
subject { post :reject, params: { id: appeal.id } }
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
it 'redirects back to the strike page and notifies target account about rejected appeal', :inline_jobs do
emails = capture_emails { subject }

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::DomainBlocksController do
render_views
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'GET #new' do

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::EmailDomainBlocksController do
render_views
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'GET #index' do

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::ExportDomainAllowsController do
render_views
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'GET #new' do

View file

@ -6,7 +6,7 @@ RSpec.describe Admin::ExportDomainBlocksController do
render_views
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'GET #new' do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::FollowRecommendationsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::InstancesController do
render_views
let(:current_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:current_user) { Fabricate(:admin_user) }
let!(:account_popular_main) { Fabricate(:account, domain: 'popular') }

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::RelationshipsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -1,100 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Admin::RelaysController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
before do
sign_in user, scope: :user
end
describe 'GET #index' do
it 'returns http success' do
get :index
expect(response).to have_http_status(:success)
end
end
describe 'GET #new' do
it 'returns http success and renders view' do
get :new
expect(response).to have_http_status(:success)
expect(response).to render_template(:new)
end
end
describe 'POST #create' do
context 'with valid data' do
let(:inbox_url) { 'https://example.com/inbox' }
before do
stub_request(:post, inbox_url).to_return(status: 200)
end
it 'creates a new relay and redirects' do
expect do
post :create, params: { relay: { inbox_url: inbox_url } }
end.to change(Relay, :count).by(1)
expect(response).to redirect_to(admin_relays_path)
end
end
context 'with invalid data' do
it 'does not create new a relay and renders new' do
expect do
post :create, params: { relay: { inbox_url: 'invalid' } }
end.to_not change(Relay, :count)
expect(response).to have_http_status(:success)
expect(response).to render_template(:new)
end
end
end
describe 'DELETE #destroy' do
let(:relay) { Fabricate(:relay) }
it 'deletes an existing relay' do
delete :destroy, params: { id: relay.id }
expect { relay.reload }.to raise_error(ActiveRecord::RecordNotFound)
expect(response).to redirect_to(admin_relays_path)
end
end
describe 'POST #enable' do
let(:relay) { Fabricate(:relay, state: :idle) }
before do
stub_request(:post, /example.com/).to_return(status: 200)
end
it 'updates a relay from idle to pending' do
post :enable, params: { id: relay.id }
expect(relay.reload).to be_pending
expect(response).to redirect_to(admin_relays_path)
end
end
describe 'POST #disable' do
let(:relay) { Fabricate(:relay, state: :pending) }
before do
stub_request(:post, /example.com/).to_return(status: 200)
end
it 'updates a relay from pending to idle' do
post :disable, params: { id: relay.id }
expect(relay.reload).to be_idle
expect(response).to redirect_to(admin_relays_path)
end
end
end

View file

@ -1,104 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Admin::ReportNotesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
before do
sign_in user, scope: :user
end
describe 'POST #create' do
subject { post :create, params: params }
let(:report) { Fabricate(:report, action_taken_at: action_taken, action_taken_by_account_id: account_id) }
context 'when parameter is valid' do
context 'when report is unsolved' do
let(:action_taken) { nil }
let(:account_id) { nil }
context 'when create_and_resolve flag is on' do
let(:params) { { report_note: { report_id: report.id, content: 'test content' }, create_and_resolve: nil } }
it 'creates a report note and resolves report' do
expect { subject }.to change(ReportNote, :count).by(1)
expect(report.reload).to be_action_taken
expect(response).to redirect_to admin_reports_path
end
end
context 'when create_and_resolve flag is false' do
let(:params) { { report_note: { report_id: report.id, content: 'test content' } } }
it 'creates a report note and does not resolve report' do
expect { subject }.to change(ReportNote, :count).by(1)
expect(report.reload).to_not be_action_taken
expect(response).to redirect_to admin_report_path(report)
end
end
end
context 'when report is resolved' do
let(:action_taken) { Time.now.utc }
let(:account_id) { user.account.id }
context 'when create_and_unresolve flag is on' do
let(:params) { { report_note: { report_id: report.id, content: 'test content' }, create_and_unresolve: nil } }
it 'creates a report note and unresolves report' do
expect { subject }.to change(ReportNote, :count).by(1)
expect(report.reload).to_not be_action_taken
expect(response).to redirect_to admin_report_path(report)
end
end
context 'when create_and_unresolve flag is false' do
let(:params) { { report_note: { report_id: report.id, content: 'test content' } } }
it 'creates a report note and does not unresolve report' do
expect { subject }.to change(ReportNote, :count).by(1)
expect(report.reload).to be_action_taken
expect(response).to redirect_to admin_report_path(report)
end
end
end
end
context 'when content is too short' do
let(:params) { { report_note: { report_id: report.id, content: '' } } }
let(:action_taken) { nil }
let(:account_id) { nil }
it 'renders admin/reports/show' do
expect { subject }.to_not change(ReportNote, :count)
expect(subject).to render_template 'admin/reports/show'
end
end
context 'when content is too long' do
let(:params) { { report_note: { report_id: report.id, content: 'test' * ReportNote::CONTENT_SIZE_LIMIT } } }
let(:action_taken) { nil }
let(:account_id) { nil }
it 'renders admin/reports/show' do
expect { subject }.to_not change(ReportNote, :count)
expect(subject).to render_template 'admin/reports/show'
end
end
end
describe 'DELETE #destroy' do
subject { delete :destroy, params: { id: report_note.id } }
let!(:report_note) { Fabricate(:report_note) }
it 'deletes note' do
expect { subject }.to change(ReportNote, :count).by(-1)
expect(response).to redirect_to admin_report_path(report_note.report)
end
end
end

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Reports::ActionsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::ReportsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -1,85 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Admin::RulesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
before do
sign_in user, scope: :user
end
describe 'GET #index' do
it 'returns http success' do
get :index
expect(response).to have_http_status(:success)
end
end
describe 'GET #edit' do
let(:rule) { Fabricate(:rule) }
it 'returns http success and renders edit' do
get :edit, params: { id: rule.id }
expect(response).to have_http_status(:success)
expect(response).to render_template(:edit)
end
end
describe 'POST #create' do
context 'with valid data' do
it 'creates a new rule and redirects' do
expect do
post :create, params: { rule: { text: 'The rule text.' } }
end.to change(Rule, :count).by(1)
expect(response).to redirect_to(admin_rules_path)
end
end
context 'with invalid data' do
it 'does creates a new rule and renders index' do
expect do
post :create, params: { rule: { text: '' } }
end.to_not change(Rule, :count)
expect(response).to render_template(:index)
end
end
end
describe 'PUT #update' do
let(:rule) { Fabricate(:rule, text: 'Original text') }
context 'with valid data' do
it 'updates the rule and redirects' do
put :update, params: { id: rule.id, rule: { text: 'Updated text.' } }
expect(response).to redirect_to(admin_rules_path)
end
end
context 'with invalid data' do
it 'does not update the rule and renders index' do
put :update, params: { id: rule.id, rule: { text: '' } }
expect(response).to render_template(:edit)
end
end
end
describe 'DELETE #destroy' do
let!(:rule) { Fabricate(:rule) }
it 'destroys the rule and redirects' do
delete :destroy, params: { id: rule.id }
expect(rule.reload).to be_discarded
expect(response).to redirect_to(admin_rules_path)
end
end
end

View file

@ -7,7 +7,7 @@ RSpec.describe Admin::Settings::BrandingController do
describe 'When signed in as an admin' do
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'PUT #update' do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::SiteUploadsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::StatusesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:account) { Fabricate(:account) }
let!(:status) { Fabricate(:status, account: account) }
let(:media_attached_status) { Fabricate(:status, account: account, sensitive: !sensitive) }

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::DistributionsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
before do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::DraftsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::GeneratesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::HistoriesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::PreviewsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
before do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfService::TestsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:terms_of_service) { Fabricate(:terms_of_service, notification_sent_at: nil) }
before do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::TermsOfServiceController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Trends::Links::PreviewCardProvidersController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Trends::LinksController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Trends::StatusesController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Trends::TagsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -9,7 +9,7 @@ RSpec.describe Admin::Users::TwoFactorAuthenticationsController do
let(:user) { Fabricate(:user) }
before do
sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')), scope: :user
sign_in Fabricate(:admin_user), scope: :user
end
describe 'DELETE #destroy' do

View file

@ -1,85 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Admin::WarningPresetsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
before do
sign_in user, scope: :user
end
describe 'GET #index' do
it 'returns http success' do
get :index
expect(response).to have_http_status(:success)
end
end
describe 'GET #edit' do
let(:account_warning_preset) { Fabricate(:account_warning_preset) }
it 'returns http success and renders edit' do
get :edit, params: { id: account_warning_preset.id }
expect(response).to have_http_status(:success)
expect(response).to render_template(:edit)
end
end
describe 'POST #create' do
context 'with valid data' do
it 'creates a new account_warning_preset and redirects' do
expect do
post :create, params: { account_warning_preset: { text: 'The account_warning_preset text.' } }
end.to change(AccountWarningPreset, :count).by(1)
expect(response).to redirect_to(admin_warning_presets_path)
end
end
context 'with invalid data' do
it 'does creates a new account_warning_preset and renders index' do
expect do
post :create, params: { account_warning_preset: { text: '' } }
end.to_not change(AccountWarningPreset, :count)
expect(response).to render_template(:index)
end
end
end
describe 'PUT #update' do
let(:account_warning_preset) { Fabricate(:account_warning_preset, text: 'Original text') }
context 'with valid data' do
it 'updates the account_warning_preset and redirects' do
put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: 'Updated text.' } }
expect(response).to redirect_to(admin_warning_presets_path)
end
end
context 'with invalid data' do
it 'does not update the account_warning_preset and renders index' do
put :update, params: { id: account_warning_preset.id, account_warning_preset: { text: '' } }
expect(response).to render_template(:edit)
end
end
end
describe 'DELETE #destroy' do
let!(:account_warning_preset) { Fabricate(:account_warning_preset) }
it 'destroys the account_warning_preset and redirects' do
delete :destroy, params: { id: account_warning_preset.id }
expect { account_warning_preset.reload }.to raise_error(ActiveRecord::RecordNotFound)
expect(response).to redirect_to(admin_warning_presets_path)
end
end
end

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe Admin::Webhooks::SecretsController do
render_views
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
before do
sign_in user, scope: :user

View file

@ -1,47 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Disputes::AppealsController do
render_views
before { sign_in current_user, scope: :user }
let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
describe '#create' do
subject { post :create, params: params }
context 'with valid params' do
let(:current_user) { Fabricate(:user) }
let(:strike) { Fabricate(:account_warning, target_account: current_user.account) }
let(:params) { { strike_id: strike.id, appeal: { text: 'Foo' } } }
it 'notifies staff about new appeal and redirects back to strike page', :inline_jobs do
emails = capture_emails { subject }
expect(emails.size)
.to eq(1)
expect(emails.first)
.to have_attributes(
to: contain_exactly(admin.email),
subject: eq(I18n.t('admin_mailer.new_appeal.subject', username: current_user.account.acct, instance: Rails.configuration.x.local_domain))
)
expect(response).to redirect_to(disputes_strike_path(strike.id))
end
end
context 'with invalid params' do
let(:current_user) { Fabricate(:user) }
let(:strike) { Fabricate(:account_warning, target_account: current_user.account) }
let(:params) { { strike_id: strike.id, appeal: { text: '' } } }
it 'does not send email and renders strike show page', :inline_jobs do
emails = capture_emails { subject }
expect(emails).to be_empty
expect(response).to render_template('disputes/strikes/show')
end
end
end
end

View file

@ -1,104 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::MigrationsController do
render_views
describe 'GET #show' do
context 'when user is not sign in' do
subject { get :show }
it { is_expected.to redirect_to new_user_session_path }
end
context 'when user is sign in' do
subject { get :show }
let(:user) { Fabricate(:account, moved_to_account: moved_to_account).user }
before { sign_in user, scope: :user }
context 'when user does not have moved to account' do
let(:moved_to_account) { nil }
it 'renders show page' do
expect(subject).to have_http_status 200
expect(subject).to render_template :show
end
end
context 'when user has a moved to account' do
let(:moved_to_account) { Fabricate(:account) }
it 'renders show page' do
expect(subject).to have_http_status 200
expect(subject).to render_template :show
end
end
end
end
describe 'POST #create' do
context 'when user is not sign in' do
subject { post :create }
it { is_expected.to redirect_to new_user_session_path }
end
context 'when user is signed in' do
subject { post :create, params: { account_migration: { acct: acct, current_password: '12345678' } } }
let(:user) { Fabricate(:user, password: '12345678') }
before { sign_in user, scope: :user }
context 'when migration account is changed' do
let(:acct) { Fabricate(:account, also_known_as: [ActivityPub::TagManager.instance.uri_for(user.account)]) }
it 'updates moved to account' do
expect(subject).to redirect_to settings_migration_path
expect(user.account.reload.moved_to_account_id).to eq acct.id
end
end
context 'when acct is the current account' do
let(:acct) { user.account }
it 'does not update the moved account', :aggregate_failures do
subject
expect(user.account.reload.moved_to_account_id).to be_nil
expect(response).to render_template :show
end
end
context 'when target account does not reference the account being moved from' do
let(:acct) { Fabricate(:account, also_known_as: []) }
it 'does not update the moved account', :aggregate_failures do
subject
expect(user.account.reload.moved_to_account_id).to be_nil
expect(response).to render_template :show
end
end
context 'when a recent migration already exists' do
let(:acct) { Fabricate(:account, also_known_as: [ActivityPub::TagManager.instance.uri_for(user.account)]) }
before do
moved_to = Fabricate(:account, also_known_as: [ActivityPub::TagManager.instance.uri_for(user.account)])
user.account.migrations.create!(acct: moved_to.acct)
end
it 'does not update the moved account', :aggregate_failures do
subject
expect(user.account.reload.moved_to_account_id).to be_nil
expect(response).to render_template :show
end
end
end
end
end

View file

@ -13,3 +13,15 @@ Fabricator(:user) do
current_sign_in_at { Time.zone.now }
agreement true
end
Fabricator(:admin_user, from: :user) do
role UserRole.find_by(name: 'Admin')
end
Fabricator(:moderator_user, from: :user) do
role UserRole.find_by(name: 'Moderator')
end
Fabricator(:owner_user, from: :user) do
role UserRole.find_by(name: 'Owner')
end

View file

@ -79,6 +79,26 @@ RSpec.describe ThemeHelper do
end
end
describe '#custom_stylesheet' do
context 'when custom css setting value digest is present' do
before { Rails.cache.write(:setting_digest_custom_css, '1a2s3d4f1a2s3d4f') }
it 'returns value from settings' do
expect(custom_stylesheet)
.to match('/css/custom-1a2s3d4f.css')
end
end
context 'when custom css setting value digest is not present' do
before { Rails.cache.delete(:setting_digest_custom_css) }
it 'returns default value' do
expect(custom_stylesheet)
.to be_blank
end
end
end
private
def html_links

View file

@ -1342,7 +1342,7 @@ RSpec.describe ActivityPub::Activity::Create do
type: 'Document',
mediaType: 'image/png',
url: 'http://example.com/attachment.png',
name: '*' * 1500,
name: '*' * MediaAttachment::MAX_DESCRIPTION_LENGTH,
},
],
}
@ -1354,7 +1354,7 @@ RSpec.describe ActivityPub::Activity::Create do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.media_attachments.map(&:description)).to include('*' * 1500)
expect(status.media_attachments.map(&:description)).to include('*' * MediaAttachment::MAX_DESCRIPTION_LENGTH)
end
end
@ -1369,7 +1369,7 @@ RSpec.describe ActivityPub::Activity::Create do
type: 'Document',
mediaType: 'image/png',
url: 'http://example.com/attachment.png',
summary: '*' * 1500,
summary: '*' * MediaAttachment::MAX_DESCRIPTION_LENGTH,
},
],
}
@ -1381,7 +1381,7 @@ RSpec.describe ActivityPub::Activity::Create do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.media_attachments.map(&:description)).to include('*' * 1500)
expect(status.media_attachments.map(&:description)).to include('*' * MediaAttachment::MAX_DESCRIPTION_LENGTH)
end
end
@ -1486,7 +1486,7 @@ RSpec.describe ActivityPub::Activity::Create do
expect { subject.perform }
.to change(sender.statuses, :count).by(1)
.and change { sender.featured_tags.first.reload.statuses_count }.by(1)
.and change { sender.featured_tags.first.reload.last_status_at }.from(nil).to(be_within(0.1).of(Time.now.utc))
.and change { sender.featured_tags.first.reload.last_status_at }.from(nil).to(be_present)
status = sender.statuses.first

View file

@ -48,14 +48,34 @@ RSpec.describe Account do
end
describe '#local?' do
it 'returns true when the account is local' do
it 'returns true when domain is null' do
account = Fabricate(:account, domain: nil)
expect(account.local?).to be true
expect(account).to be_local
end
it 'returns false when the account is on a different domain' do
it 'returns false when domain is present' do
account = Fabricate(:account, domain: 'foreign.tld')
expect(account.local?).to be false
expect(account).to_not be_local
end
end
describe '#remote?' do
context 'when the domain is null' do
subject { Fabricate.build :account, domain: nil }
it { is_expected.to_not be_remote }
end
context 'when the domain is blank' do
subject { Fabricate.build :account, domain: '' }
it { is_expected.to_not be_remote }
end
context 'when the domain is present' do
subject { Fabricate.build :account, domain: 'host.example' }
it { is_expected.to be_remote }
end
end
@ -1045,6 +1065,9 @@ RSpec.describe Account do
it { is_expected.to validate_length_of(:display_name).is_at_most(described_class::DISPLAY_NAME_LENGTH_LIMIT) }
it { is_expected.to_not allow_values(account_note_over_limit).for(:note) }
it { is_expected.to allow_value(fields_empty_name_value).for(:fields) }
it { is_expected.to_not allow_values(fields_over_limit, fields_empty_name).for(:fields) }
end
context 'when account is remote' do
@ -1077,6 +1100,18 @@ RSpec.describe Account do
def account_note_over_limit
'a' * described_class::NOTE_LENGTH_LIMIT * 2
end
def fields_empty_name_value
Array.new(4) { { 'name' => '', 'value' => '' } }
end
def fields_over_limit
Array.new(described_class::DEFAULT_FIELDS_SIZE + 1) { { 'name' => 'Name', 'value' => 'Value', 'verified_at' => '01/01/1970' } }
end
def fields_empty_name
[{ 'name' => '', 'value' => 'Value', 'verified_at' => '01/01/1970' }]
end
end
describe 'scopes' do

View file

@ -0,0 +1,26 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe AccountSummary do
describe 'Scopes' do
describe '.localized' do
let(:first) { Fabricate :account }
let(:last) { Fabricate :account }
before do
Fabricate :status, account: first, language: 'en'
Fabricate :status, account: last, language: 'es'
described_class.refresh
end
it 'returns records in order of language' do
expect(described_class.localized('en'))
.to contain_exactly(
have_attributes(account_id: first.id, language: 'en'),
have_attributes(account_id: last.id, language: 'es')
)
end
end
end
end

View file

@ -8,7 +8,7 @@ RSpec.describe Admin::AccountAction do
describe '#save!' do
subject { account_action.save! }
let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:account) { Fabricate(:admin_user).account }
let(:target_account) { Fabricate(:account) }
let(:type) { 'disable' }

View file

@ -9,7 +9,7 @@ RSpec.describe Appeal do
it { is_expected.to validate_length_of(:text).is_at_most(described_class::TEXT_LENGTH_LIMIT) }
context 'with a strike created too long ago' do
let(:strike) { Fabricate.build :account_warning, created_at: 100.days.ago }
let(:strike) { Fabricate.build :account_warning, created_at: (described_class::MAX_STRIKE_AGE * 2).ago }
it { is_expected.to_not allow_values(strike).for(:strike).against(:base).on(:create) }
end

View file

@ -0,0 +1,15 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Doorkeeper::Application do
describe 'Associations' do
it { is_expected.to have_many(:created_users).class_name('User').inverse_of(:created_by_application).with_foreign_key(:created_by_application_id) }
end
describe 'Validations' do
it { is_expected.to validate_length_of(:name).is_at_most(described_class::APP_NAME_LIMIT) }
it { is_expected.to validate_length_of(:redirect_uri).is_at_most(described_class::APP_REDIRECT_URI_LIMIT) }
it { is_expected.to validate_length_of(:website).is_at_most(described_class::APP_WEBSITE_LIMIT) }
end
end

View file

@ -8,7 +8,7 @@ RSpec.describe Form::AccountBatch do
describe '#save' do
subject { account_batch.save }
let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:account) { Fabricate(:admin_user).account }
let(:account_ids) { [] }
let(:query) { Account.none }

View file

@ -17,4 +17,40 @@ RSpec.describe Form::AdminSettings do
end
end
end
describe '#save' do
describe 'updating digest values' do
context 'when updating custom css to real value' do
subject { described_class.new(custom_css: css) }
let(:css) { 'body { color: red; }' }
let(:digested) { Digest::SHA256.hexdigest(css) }
it 'changes relevant digest value' do
expect { subject.save }
.to(change { Rails.cache.read(:setting_digest_custom_css) }.to(digested))
end
end
context 'when updating custom css to empty value' do
subject { described_class.new(custom_css: '') }
before { Rails.cache.write(:setting_digest_custom_css, 'previous-value') }
it 'changes relevant digest value' do
expect { subject.save }
.to(change { Rails.cache.read(:setting_digest_custom_css) }.to(be_blank))
end
end
context 'when updating other fields' do
subject { described_class.new(site_contact_email: 'test@example.host') }
it 'does not update digests' do
expect { subject.save }
.to(not_change { Rails.cache.read(:setting_digest_custom_css) })
end
end
end
end
end

View file

@ -7,7 +7,7 @@ RSpec.describe Form::CustomEmojiBatch do
subject { described_class.new({ current_account: account }.merge(options)) }
let(:options) { {} }
let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:account) { Fabricate(:admin_user).account }
context 'with empty custom_emoji_ids' do
let(:options) { { custom_emoji_ids: [] } }

View file

@ -3,6 +3,29 @@
require 'rails_helper'
RSpec.describe SoftwareUpdate do
describe 'Scopes' do
describe '.urgent' do
let!(:urgent_update) { Fabricate :software_update, urgent: true }
let!(:non_urgent_update) { Fabricate :software_update, urgent: false }
it 'returns records that are urgent' do
expect(described_class.urgent)
.to include(urgent_update)
.and not_include(non_urgent_update)
end
end
end
describe '.by_version' do
let!(:latest_update) { Fabricate :software_update, version: '4.0.0' }
let!(:older_update) { Fabricate :software_update, version: '3.0.0' }
it 'returns record in gem version order' do
expect(described_class.by_version)
.to eq([older_update, latest_update])
end
end
describe '#pending?' do
subject { described_class.new(version: update_version) }

View file

@ -633,7 +633,7 @@ RSpec.describe User do
end
describe '.those_who_can' do
before { Fabricate(:user, role: UserRole.find_by(name: 'Moderator')) }
before { Fabricate(:moderator_user) }
context 'when there are not any user roles' do
before { UserRole.destroy_all }
@ -650,7 +650,7 @@ RSpec.describe User do
end
context 'when there are users with roles' do
let!(:admin_user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let!(:admin_user) { Fabricate(:admin_user) }
it 'returns the users with the role' do
expect(described_class.those_who_can(:manage_blocks)).to eq([admin_user])

View file

@ -18,7 +18,7 @@ RSpec.describe Webhook do
subject { Fabricate.build :webhook, current_account: account }
context 'with account that has permissions' do
let(:account) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:account) { Fabricate(:admin_user).account }
it { is_expected.to allow_values(%w(account.created)).for(:events) }
end

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe AccountModerationNotePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :create? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe AccountPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
let(:alice) { Fabricate(:account) }
@ -70,7 +70,7 @@ RSpec.describe AccountPolicy do
end
permissions :suspend?, :silence? do
let(:staff) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:staff) { Fabricate(:admin_user).account }
context 'when staff' do
context 'when record is staff' do
@ -94,7 +94,7 @@ RSpec.describe AccountPolicy do
end
permissions :memorialize? do
let(:other_admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:other_admin) { Fabricate(:admin_user).account }
context 'when admin' do
context 'when record is admin' do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe AccountWarningPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :show? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AccountWarningPresetPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create?, :update?, :destroy? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe Admin::StatusPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
let(:status) { Fabricate(:status, visibility: status_visibility) }
let(:status_visibility) { :public }

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AnnouncementPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create?, :update?, :destroy? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe AppealPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
let(:appeal) { Fabricate(:appeal) }

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe AuditLogPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :index? do

View file

@ -23,22 +23,30 @@ RSpec.describe BackupPolicy do
context 'when backups are too old' do
it 'permits' do
travel(-8.days) do
travel(-before_time) do
Fabricate(:backup, user: john.user)
end
expect(subject).to permit(john, Backup)
end
def before_time
described_class::MIN_AGE + 2.days
end
end
context 'when backups are newer' do
it 'denies' do
travel(-3.days) do
travel(-within_time) do
Fabricate(:backup, user: john.user)
end
expect(subject).to_not permit(john, Backup)
end
def within_time
described_class::MIN_AGE - 2.days
end
end
end
end

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe CanonicalEmailBlockPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :test?, :create?, :destroy? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe CustomEmojiPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :enable?, :disable? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe DashboardPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :index? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe DeliveryPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :clear_delivery_errors?, :restart_delivery?, :stop_delivery? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe DomainAllowPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :create?, :destroy? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe DomainBlockPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :create?, :destroy?, :update? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe EmailDomainBlockPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :create?, :destroy? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe FollowRecommendationPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :show?, :suppress?, :unsuppress? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe InstancePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :destroy? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe InvitePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:user).account }
permissions :index? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe IpBlockPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :create?, :update?, :destroy? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe PreviewCardPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :review? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe PreviewCardProviderPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :review? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe RelayPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :update? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe ReportNotePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :create? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe ReportPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :update?, :index?, :show? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe RulePolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create?, :update?, :destroy? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe SettingsPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :update?, :show?, :destroy? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe SoftwareUpdatePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Owner')).account }
let(:admin) { Fabricate(:owner_user).account }
let(:john) { Fabricate(:account) }
permissions :index? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe StatusPolicy, type: :model do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:admin) { Fabricate(:admin_user) }
let(:alice) { Fabricate(:account, username: 'alice') }
let(:bob) { Fabricate(:account, username: 'bob') }
let(:status) { Fabricate(:status, account: alice) }

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe TagPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :show?, :update?, :review? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe TermsOfServicePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe UserPolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :reset_password?, :change_email? do

View file

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe UserRolePolicy do
subject { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:account) { Fabricate(:account) }
permissions :index?, :create? do

View file

@ -4,7 +4,7 @@ require 'rails_helper'
RSpec.describe WebhookPolicy do
let(:policy) { described_class }
let(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
let(:admin) { Fabricate(:admin_user).account }
let(:john) { Fabricate(:account) }
permissions :index?, :create? do

View file

@ -119,6 +119,11 @@ RSpec.configure do |config|
config.include CommandLineHelpers, type: :cli
config.include SystemHelpers, type: :system
# TODO: Remove when Devise fixes https://github.com/heartcombo/devise/issues/5705
config.before do
Rails.application.reload_routes_unless_loaded
end
config.around(:each, use_transactional_tests: false) do |example|
self.use_transactional_tests = false
example.run

View file

@ -85,7 +85,7 @@ RSpec.describe 'credentials API' do
end
describe 'with invalid data' do
let(:params) { { note: 'This is too long. ' * 30 } }
let(:params) { { note: 'a' * 2 * Account::NOTE_LENGTH_LIMIT } }
it 'returns http unprocessable entity' do
subject

View file

@ -29,7 +29,7 @@ RSpec.describe 'Accounts Notes API' do
end
context 'when account note exceeds allowed length', :aggregate_failures do
let(:comment) { 'a' * 2_001 }
let(:comment) { 'a' * AccountNote::COMMENT_SIZE_LIMIT * 2 }
it 'does not create account note' do
subject

View file

@ -3,7 +3,7 @@
require 'rails_helper'
RSpec.describe 'Admin Dimensions' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
let(:account) { Fabricate(:account) }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
RSpec.describe 'Admin Measures' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
let(:account) { Fabricate(:account) }

View file

@ -3,7 +3,7 @@
require 'rails_helper'
RSpec.describe 'Admin Retention' do
let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let(:user) { Fabricate(:admin_user) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
let(:account) { Fabricate(:account) }

View file

@ -122,7 +122,7 @@ RSpec.describe 'Apps' do
end
context 'with a too-long name' do
let(:client_name) { 'hoge' * 20 }
let(:client_name) { 'a' * Doorkeeper::Application::APP_NAME_LIMIT * 2 }
it 'returns http unprocessable entity' do
subject
@ -134,7 +134,7 @@ RSpec.describe 'Apps' do
end
context 'with a too-long website' do
let(:website) { "https://foo.bar/#{'hoge' * 2_000}" }
let(:website) { "https://foo.bar/#{'a' * Doorkeeper::Application::APP_WEBSITE_LIMIT * 2}" }
it 'returns http unprocessable entity' do
subject
@ -146,7 +146,7 @@ RSpec.describe 'Apps' do
end
context 'with a too-long redirect_uri' do
let(:redirect_uris) { "https://app.example/#{'hoge' * 2_000}" }
let(:redirect_uris) { "https://app.example/#{'a' * Doorkeeper::Application::APP_REDIRECT_URI_LIMIT * 2}" }
it 'returns http unprocessable entity' do
subject

View file

@ -13,7 +13,7 @@ RSpec.describe 'Reports' do
post '/api/v1/reports', headers: headers, params: params
end
let!(:admin) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) }
let!(:admin) { Fabricate(:admin_user) }
let(:status) { Fabricate(:status) }
let(:target_account) { status.account }
let(:category) { 'other' }

View file

@ -33,7 +33,7 @@ RSpec.describe 'Media API', :attachment_processing do
let(:params) do
{
file: fixture_file_upload('attachment-jpg.123456_abcd', 'image/jpeg'),
description: 'aa' * MediaAttachment::MAX_DESCRIPTION_LENGTH,
description: 'a' * MediaAttachment::MAX_DESCRIPTION_LENGTH * 2,
}
end

View file

@ -2,9 +2,7 @@
require 'rails_helper'
RSpec.describe Auth::ChallengesController do
render_views
RSpec.describe 'Auth Challenges' do
let(:password) { 'foobar12345' }
let(:user) { Fabricate(:user, password: password) }
@ -14,9 +12,9 @@ RSpec.describe Auth::ChallengesController do
let(:return_to) { edit_user_registration_path }
context 'with correct password' do
before { post :create, params: { form_challenge: { return_to: return_to, current_password: password } } }
it 'redirects back and sets challenge passed at in session' do
post '/auth/challenge', params: { form_challenge: { return_to: return_to, current_password: password } }
expect(response)
.to redirect_to(return_to)
expect(session[:challenge_passed_at])
@ -25,13 +23,12 @@ RSpec.describe Auth::ChallengesController do
end
context 'with incorrect password' do
before { post :create, params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } } }
it 'renders challenge, displays error, does not set session' do
expect(response)
.to render_template('auth/challenges/new')
post '/auth/challenge', params: { form_challenge: { return_to: return_to, current_password: 'hhfggjjd562' } }
expect(response.body)
.to include 'Invalid password'
.to include(I18n.t('challenge.prompt'))
.and include('Invalid password')
expect(session[:challenge_passed_at])
.to be_nil
end

View file

@ -10,6 +10,7 @@ module TestEndpoints
/.well-known/nodeinfo
/nodeinfo/2.0
/manifest
/css/custom-1a2s3d4f.css
/custom.css
/actor
/api/v1/instance/extended_description
@ -172,7 +173,7 @@ RSpec.describe 'Caching behavior' do
before_all do
alice = Fabricate(:account, username: 'alice')
user = Fabricate(:user, email: 'user@host.example', role: UserRole.find_by(name: 'Moderator'))
user = Fabricate(:moderator_user, email: 'user@host.example')
status = Fabricate(:status, account: alice, id: 110_224_538_612_341_312)
Fabricate(:status, account: alice, id: 110_224_538_643_211_312, visibility: :private)
Fabricate(:invite, code: 'abcdef')

View file

@ -5,10 +5,10 @@ require 'rails_helper'
RSpec.describe 'Custom CSS' do
include RoutingHelper
describe 'GET /custom.css' do
describe 'GET /css/:id.css' do
context 'without any CSS or User Roles' do
it 'returns empty stylesheet' do
get '/custom.css'
get '/css/custom-123.css'
expect(response)
.to have_http_status(200)
@ -27,7 +27,7 @@ RSpec.describe 'Custom CSS' do
end
it 'returns stylesheet from settings' do
get '/custom.css'
get '/css/custom-456.css'
expect(response)
.to have_http_status(200)
@ -45,34 +45,5 @@ RSpec.describe 'Custom CSS' do
CSS
end
end
context 'with highlighted colored UserRole records' do
before do
_highlighted_colored = Fabricate :user_role, highlighted: true, color: '#336699', id: '123_123_123'
_highlighted_no_color = Fabricate :user_role, highlighted: true, color: ''
_no_highlight_with_color = Fabricate :user_role, highlighted: false, color: ''
end
it 'returns stylesheet from settings' do
get '/custom.css'
expect(response)
.to have_http_status(200)
.and have_cacheable_headers
.and have_attributes(
content_type: match('text/css')
)
expect(response.body.strip)
.to eq(expected_css)
end
def expected_css
<<~CSS.strip
.user-role-123123123 {
--user-role-accent: #336699;
}
CSS
end
end
end
end

View file

@ -0,0 +1,21 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings Migrations' do
describe 'GET #show' do
context 'when user is not signed in' do
subject { get '/settings/migration' }
it { is_expected.to redirect_to new_user_session_path }
end
end
describe 'POST #create' do
context 'when user is not signed in' do
subject { post '/settings/migration' }
it { is_expected.to redirect_to new_user_session_path }
end
end
end

Some files were not shown because too many files have changed in this diff Show more