Merge branch 'master' into glitch-soc/master

Conflicts:
	app/models/account.rb
	app/views/accounts/_header.html.haml
This commit is contained in:
Thibaut Girka
2018-05-09 17:43:30 +02:00
145 changed files with 3052 additions and 803 deletions

View File

@@ -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

View 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

View 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

View File

@@ -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

View 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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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