mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-11-01 02:39:26 -05:00
* Filter deleted members by default and enable bulk ban on admin members Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com> * Drop instagram * Default sort * Update specs --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
91 lines
3.0 KiB
Ruby
91 lines
3.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe 'Admin::Members', type: :request do
|
|
let(:admin_role) { create(:role, name: 'admin') }
|
|
let(:admin) { create(:member, roles: [admin_role]) }
|
|
let!(:active_member) do
|
|
create(
|
|
:member,
|
|
login_name: 'active_spammer',
|
|
email: 'active@example.com',
|
|
bio: 'A' * 300,
|
|
photos_count: 3,
|
|
plantings_count: 5,
|
|
forums_count: 1,
|
|
gardens_count: 2,
|
|
harvests_count: 4,
|
|
jobs_count: 6,
|
|
confirmed_at: Time.current,
|
|
last_sign_in_at: Time.current
|
|
)
|
|
end
|
|
let!(:deleted_member) do
|
|
member = create(:member, login_name: 'deleted_user', email: 'deleted@example.com')
|
|
member.discard
|
|
member
|
|
end
|
|
|
|
before do
|
|
login_as admin, scope: :member
|
|
end
|
|
|
|
describe 'GET /admin/members' do
|
|
context 'by default (Active tab)' do
|
|
it 'filters out deleted members and shows active members' do
|
|
get admin_members_path
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include('active_spammer')
|
|
expect(response.body).not_to include('deleted_user')
|
|
end
|
|
|
|
it 'surfaces login name, email, confirmed status, last login, truncated bio, and count attributes' do
|
|
get admin_members_path
|
|
expect(response.body).to include('active@example.com')
|
|
expect(response.body).to include('A' * 252 + '...') # truncated to 255 chars
|
|
expect(response.body).to include('Photos')
|
|
expect(response.body).to include('Plantings')
|
|
expect(response.body).to include('Forums')
|
|
expect(response.body).to include('Gardens')
|
|
expect(response.body).to include('Harvests')
|
|
expect(response.body).to include('Jobs')
|
|
end
|
|
end
|
|
|
|
context 'when requesting deactivated tab (status=deactivated)' do
|
|
it 'shows discarded members and excludes active members' do
|
|
get admin_members_path(status: 'deactivated')
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include('deleted_user')
|
|
expect(response.body).not_to include('active_spammer')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'POST /admin/members/bulk_ban' do
|
|
it 'discards selected active members' do
|
|
expect do
|
|
post bulk_ban_admin_members_path, params: { member_ids: [active_member.id] }
|
|
end.to change { active_member.reload.discarded? }.from(false).to(true)
|
|
|
|
expect(response).to redirect_to(admin_members_path)
|
|
end
|
|
|
|
it 'does not allow admin to ban themselves via bulk ban' do
|
|
post bulk_ban_admin_members_path, params: { member_ids: [admin.id] }
|
|
expect(admin.reload.discarded?).to be false
|
|
end
|
|
end
|
|
|
|
describe 'POST /admin/members/:slug/restore' do
|
|
it 'undiscards a deactivated member' do
|
|
expect do
|
|
post restore_admin_member_path(deleted_member)
|
|
end.to change { deleted_member.reload.discarded? }.from(true).to(false)
|
|
|
|
expect(response).to redirect_to(admin_members_path(status: 'deactivated'))
|
|
end
|
|
end
|
|
end
|