Files
growstuff/spec/requests/admin/members_spec.rb
T
d491df87fc Filter deleted members by default and enable bulk ban on admin members (#5060)
* 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>
2026-10-24 14:30:50 +10:30

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