Merge branch 'master' into glitch-soc/master
Conflicts: app/models/account.rb app/views/accounts/_header.html.haml
This commit is contained in:
@@ -30,4 +30,35 @@ RSpec.describe Admin::ConfirmationsController, type: :controller do
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #resernd' do
|
||||
subject { post :resend, params: { account_id: account.id } }
|
||||
|
||||
let(:account) { Fabricate(:account) }
|
||||
let!(:user) { Fabricate(:user, confirmed_at: confirmed_at, account: account) }
|
||||
|
||||
before do
|
||||
allow(UserMailer).to receive(:confirmation_instructions) { double(:email, deliver_later: nil) }
|
||||
end
|
||||
|
||||
context 'when email is not confirmed' do
|
||||
let(:confirmed_at) { nil }
|
||||
|
||||
it 'resends confirmation mail' do
|
||||
expect(subject).to redirect_to admin_accounts_path
|
||||
expect(flash[:notice]).to eq I18n.t('admin.accounts.resend_confirmation.success')
|
||||
expect(UserMailer).to have_received(:confirmation_instructions).once
|
||||
end
|
||||
end
|
||||
|
||||
context 'when email is confirmed' do
|
||||
let(:confirmed_at) { Time.zone.now }
|
||||
|
||||
it 'does not resend confirmation mail' do
|
||||
expect(subject).to redirect_to admin_accounts_path
|
||||
expect(flash[:error]).to eq I18n.t('admin.accounts.resend_confirmation.already_confirmed')
|
||||
expect(UserMailer).not_to have_received(:confirmation_instructions)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
115
spec/controllers/admin/custom_emojis_controller_spec.rb
Normal file
115
spec/controllers/admin/custom_emojis_controller_spec.rb
Normal file
@@ -0,0 +1,115 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe Admin::CustomEmojisController do
|
||||
render_views
|
||||
|
||||
let(:user) { Fabricate(:user, admin: true) }
|
||||
|
||||
before do
|
||||
sign_in user, scope: :user
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
subject { get :index }
|
||||
|
||||
before do
|
||||
Fabricate(:custom_emoji)
|
||||
end
|
||||
|
||||
it 'renders index page' do
|
||||
expect(subject).to have_http_status 200
|
||||
expect(subject).to render_template :index
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #new' do
|
||||
subject { get :new }
|
||||
|
||||
it 'renders new page' do
|
||||
expect(subject).to have_http_status 200
|
||||
expect(subject).to render_template :new
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
subject { post :create, params: { custom_emoji: params } }
|
||||
|
||||
let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
|
||||
|
||||
context 'when parameter is valid' do
|
||||
let(:params) { { shortcode: 'test', image: image } }
|
||||
|
||||
it 'creates custom emoji' do
|
||||
expect { subject }.to change { CustomEmoji.count }.by(1)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when parameter is invalid' do
|
||||
let(:params) { { shortcode: 't', image: image } }
|
||||
|
||||
it 'renders new' do
|
||||
expect(subject).to render_template :new
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT #update' do
|
||||
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') }
|
||||
let(:image) { fixture_file_upload(Rails.root.join('spec', 'fixtures', 'files', 'emojo.png'), 'image/png') }
|
||||
|
||||
before do
|
||||
put :update, params: { id: custom_emoji.id, custom_emoji: params }
|
||||
end
|
||||
|
||||
context 'when parameter is valid' do
|
||||
let(:params) { { shortcode: 'updated', image: image } }
|
||||
|
||||
it 'succeeds in updating custom emoji' do
|
||||
expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.updated_msg')
|
||||
expect(custom_emoji.reload).to have_attributes(shortcode: 'updated')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when parameter is invalid' do
|
||||
let(:params) { { shortcode: 'u', image: image } }
|
||||
|
||||
it 'fails to update custom emoji' do
|
||||
expect(flash[:alert]).to eq I18n.t('admin.custom_emojis.update_failed_msg')
|
||||
expect(custom_emoji.reload).to have_attributes(shortcode: 'test')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #copy' do
|
||||
subject { post :copy, params: { id: custom_emoji.id } }
|
||||
|
||||
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test') }
|
||||
|
||||
it 'copies custom emoji' do
|
||||
expect { subject }.to change { CustomEmoji.where(shortcode: 'test').count }.by(1)
|
||||
expect(flash[:notice]).to eq I18n.t('admin.custom_emojis.copied_msg')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #enable' do
|
||||
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: true) }
|
||||
|
||||
before { post :enable, params: { id: custom_emoji.id } }
|
||||
|
||||
it 'enables custom emoji' do
|
||||
expect(response).to redirect_to admin_custom_emojis_path
|
||||
expect(custom_emoji.reload).to have_attributes(disabled: false)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #disable' do
|
||||
let(:custom_emoji) { Fabricate(:custom_emoji, shortcode: 'test', disabled: false) }
|
||||
|
||||
before { post :disable, params: { id: custom_emoji.id } }
|
||||
|
||||
it 'enables custom emoji' do
|
||||
expect(response).to redirect_to admin_custom_emojis_path
|
||||
expect(custom_emoji.reload).to have_attributes(disabled: true)
|
||||
end
|
||||
end
|
||||
end
|
43
spec/controllers/admin/invites_controller_spec.rb
Normal file
43
spec/controllers/admin/invites_controller_spec.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe Admin::InvitesController do
|
||||
render_views
|
||||
|
||||
let(:user) { Fabricate(:user, admin: true) }
|
||||
|
||||
before do
|
||||
sign_in user, scope: :user
|
||||
end
|
||||
|
||||
describe 'GET #index' do
|
||||
subject { get :index, params: { available: true } }
|
||||
|
||||
let!(:invite) { Fabricate(:invite) }
|
||||
|
||||
it 'renders index page' do
|
||||
expect(subject).to render_template :index
|
||||
expect(assigns(:invites)).to include invite
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #create' do
|
||||
subject { post :create, params: { invite: { max_uses: '10', expires_in: 1800 } } }
|
||||
|
||||
it 'succeeds to create a invite' do
|
||||
expect{ subject }.to change { Invite.count }.by(1)
|
||||
expect(subject).to redirect_to admin_invites_path
|
||||
expect(Invite.last).to have_attributes(user_id: user.id, max_uses: 10)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE #destroy' do
|
||||
let!(:invite) { Fabricate(:invite, expires_at: nil) }
|
||||
|
||||
subject { delete :destroy, params: { id: invite.id } }
|
||||
|
||||
it 'expires invite' do
|
||||
expect(subject).to redirect_to admin_invites_path
|
||||
expect(invite.reload).to be_expired
|
||||
end
|
||||
end
|
||||
end
|
@@ -22,7 +22,7 @@ describe Admin::ReportedStatusesController do
|
||||
let(:sensitive) { true }
|
||||
let!(:media_attachment) { Fabricate(:media_attachment, status: status) }
|
||||
|
||||
context 'updates sensitive column to true' do
|
||||
context 'when action is nsfw_on' do
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
status.reload.sensitive
|
||||
@@ -30,7 +30,7 @@ describe Admin::ReportedStatusesController do
|
||||
end
|
||||
end
|
||||
|
||||
context 'updates sensitive column to false' do
|
||||
context 'when action is nsfw_off' do
|
||||
let(:action) { 'nsfw_off' }
|
||||
let(:sensitive) { false }
|
||||
|
||||
@@ -41,35 +41,13 @@ describe Admin::ReportedStatusesController do
|
||||
end
|
||||
end
|
||||
|
||||
it 'redirects to report page' do
|
||||
subject.call
|
||||
expect(response).to redirect_to(admin_report_path(report))
|
||||
end
|
||||
end
|
||||
context 'when action is delete' do
|
||||
let(:action) { 'delete' }
|
||||
|
||||
describe 'PATCH #update' do
|
||||
subject do
|
||||
-> { patch :update, params: { report_id: report, id: status, status: { sensitive: sensitive } } }
|
||||
end
|
||||
|
||||
let(:status) { Fabricate(:status, sensitive: !sensitive) }
|
||||
let(:sensitive) { true }
|
||||
|
||||
context 'updates sensitive column to true' do
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
status.reload.sensitive
|
||||
}.from(false).to(true)
|
||||
end
|
||||
end
|
||||
|
||||
context 'updates sensitive column to false' do
|
||||
let(:sensitive) { false }
|
||||
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
status.reload.sensitive
|
||||
}.from(true).to(false)
|
||||
it 'removes a status' do
|
||||
allow(RemovalWorker).to receive(:perform_async)
|
||||
subject.call
|
||||
expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -78,15 +56,4 @@ describe Admin::ReportedStatusesController do
|
||||
expect(response).to redirect_to(admin_report_path(report))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE #destroy' do
|
||||
it 'removes a status' do
|
||||
allow(RemovalWorker).to receive(:perform_async)
|
||||
|
||||
delete :destroy, params: { report_id: report, id: status }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(RemovalWorker).
|
||||
to have_received(:perform_async).with(status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
33
spec/controllers/admin/roles_controller_spec.rb
Normal file
33
spec/controllers/admin/roles_controller_spec.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe Admin::RolesController do
|
||||
render_views
|
||||
|
||||
let(:admin) { Fabricate(:user, admin: true) }
|
||||
|
||||
before do
|
||||
sign_in admin, scope: :user
|
||||
end
|
||||
|
||||
describe 'POST #promote' do
|
||||
subject { post :promote, params: { account_id: user.account_id } }
|
||||
|
||||
let(:user) { Fabricate(:user, moderator: false, admin: false) }
|
||||
|
||||
it 'promotes user' do
|
||||
expect(subject).to redirect_to admin_account_path(user.account_id)
|
||||
expect(user.reload).to be_moderator
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST #demote' do
|
||||
subject { post :demote, params: { account_id: user.account_id } }
|
||||
|
||||
let(:user) { Fabricate(:user, moderator: true, admin: false) }
|
||||
|
||||
it 'demotes user' do
|
||||
expect(subject).to redirect_to admin_account_path(user.account_id)
|
||||
expect(user.reload).not_to be_moderator
|
||||
end
|
||||
end
|
||||
end
|
@@ -34,13 +34,13 @@ describe Admin::StatusesController do
|
||||
|
||||
describe 'POST #create' do
|
||||
subject do
|
||||
-> { post :create, params: { account_id: account.id, form_status_batch: { action: action, status_ids: status_ids } } }
|
||||
-> { post :create, params: { :account_id => account.id, action => '', :form_status_batch => { status_ids: status_ids } } }
|
||||
end
|
||||
|
||||
let(:action) { 'nsfw_on' }
|
||||
let(:status_ids) { [media_attached_status.id] }
|
||||
|
||||
context 'updates sensitive column to true' do
|
||||
context 'when action is nsfw_on' do
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
media_attached_status.reload.sensitive
|
||||
@@ -48,7 +48,7 @@ describe Admin::StatusesController do
|
||||
end
|
||||
end
|
||||
|
||||
context 'updates sensitive column to false' do
|
||||
context 'when action is nsfw_off' do
|
||||
let(:action) { 'nsfw_off' }
|
||||
let(:sensitive) { false }
|
||||
|
||||
@@ -59,32 +59,13 @@ describe Admin::StatusesController do
|
||||
end
|
||||
end
|
||||
|
||||
it 'redirects to account statuses page' do
|
||||
subject.call
|
||||
expect(response).to redirect_to(admin_account_statuses_path(account.id))
|
||||
end
|
||||
end
|
||||
context 'when action is delete' do
|
||||
let(:action) { 'delete' }
|
||||
|
||||
describe 'PATCH #update' do
|
||||
subject do
|
||||
-> { patch :update, params: { account_id: account.id, id: media_attached_status, status: { sensitive: sensitive } } }
|
||||
end
|
||||
|
||||
context 'updates sensitive column to true' do
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
media_attached_status.reload.sensitive
|
||||
}.from(false).to(true)
|
||||
end
|
||||
end
|
||||
|
||||
context 'updates sensitive column to false' do
|
||||
let(:sensitive) { false }
|
||||
|
||||
it 'updates sensitive column' do
|
||||
is_expected.to change {
|
||||
media_attached_status.reload.sensitive
|
||||
}.from(true).to(false)
|
||||
it 'removes a status' do
|
||||
allow(RemovalWorker).to receive(:perform_async)
|
||||
subject.call
|
||||
expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -93,15 +74,4 @@ describe Admin::StatusesController do
|
||||
expect(response).to redirect_to(admin_account_statuses_path(account.id))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE #destroy' do
|
||||
it 'removes a status' do
|
||||
allow(RemovalWorker).to receive(:perform_async)
|
||||
|
||||
delete :destroy, params: { account_id: account.id, id: status }
|
||||
expect(response).to have_http_status(200)
|
||||
expect(RemovalWorker).
|
||||
to have_received(:perform_async).with(status.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -75,7 +75,7 @@ RSpec.describe User, type: :model do
|
||||
describe 'inactive' do
|
||||
it 'returns a relation of inactive users' do
|
||||
specified = Fabricate(:user, current_sign_in_at: 15.days.ago)
|
||||
Fabricate(:user, current_sign_in_at: 13.days.ago)
|
||||
Fabricate(:user, current_sign_in_at: 6.days.ago)
|
||||
|
||||
expect(User.inactive).to match_array([specified])
|
||||
end
|
||||
|
@@ -116,6 +116,7 @@ RSpec.describe ResolveAccountService, type: :service do
|
||||
expect(account.activitypub?).to eq true
|
||||
expect(account.domain).to eq 'ap.example.com'
|
||||
expect(account.inbox_url).to eq 'https://ap.example.com/users/foo/inbox'
|
||||
expect(account.actor_type).to eq 'Person'
|
||||
end
|
||||
end
|
||||
|
||||
|
@@ -1,20 +1,17 @@
|
||||
#require 'rspec/retry'
|
||||
require 'simplecov'
|
||||
|
||||
GC.disable
|
||||
|
||||
SimpleCov.start 'rails' do
|
||||
add_group 'Services', 'app/services'
|
||||
add_group 'Presenters', 'app/presenters'
|
||||
add_group 'Validators', 'app/validators'
|
||||
if ENV['DISABLE_SIMPLECOV'] != 'true'
|
||||
require 'simplecov'
|
||||
SimpleCov.start 'rails' do
|
||||
add_group 'Services', 'app/services'
|
||||
add_group 'Presenters', 'app/presenters'
|
||||
add_group 'Validators', 'app/validators'
|
||||
end
|
||||
end
|
||||
|
||||
gc_counter = -1
|
||||
|
||||
RSpec.configure do |config|
|
||||
#config.verbose_retry = true
|
||||
#config.display_try_failure_messages = true
|
||||
|
||||
config.expect_with :rspec do |expectations|
|
||||
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
||||
end
|
||||
@@ -29,10 +26,6 @@ RSpec.configure do |config|
|
||||
end
|
||||
end
|
||||
|
||||
#config.around :each do |ex|
|
||||
# ex.run_with_retry retry: 3
|
||||
#end
|
||||
|
||||
config.before :suite do
|
||||
Chewy.strategy(:bypass)
|
||||
end
|
||||
|
Reference in New Issue
Block a user