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,40 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Auth::ChallengesController do
render_views
let(:password) { 'foobar12345' }
let(:user) { Fabricate(:user, password: password) }
before { sign_in user }
describe 'POST #create' 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
expect(response)
.to redirect_to(return_to)
expect(session[:challenge_passed_at])
.to_not be_nil
end
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')
expect(response.body)
.to include 'Invalid password'
expect(session[:challenge_passed_at])
.to be_nil
end
end
end
end

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