Skip to content
Snippets Groups Projects
Unverified Commit 18689527 authored by Hadi Cheaito's avatar Hadi Cheaito Committed by GitHub
Browse files

All active to verified changes (#4030)

parent 04a8c0f1
Branches
Tags
No related merge requests found
......@@ -4,14 +4,14 @@ module Api
module V1
module Admin
class UsersController < ApiController
before_action only: %i[active_users] do
before_action only: %i[verified_users] do
ensure_authorized('ManageUsers')
end
def active_users
def verified_users
sort_config = config_sorting(allowed_columns: %w[name roles.name])
# TODO: Change to get active users only
# TODO: Change to get verified users only
users = User.includes(:role)
.with_provider(current_provider)
.with_attached_avatar
......
......@@ -5,7 +5,7 @@ import {
} from 'react-bootstrap';
import { useTranslation } from 'react-i18next';
import { EnvelopeIcon, UserPlusIcon } from '@heroicons/react/24/outline';
import ActiveUsers from './ActiveUsers';
import VerifiedUsers from './VerifiedUsers';
import AdminNavSideBar from '../AdminNavSideBar';
import Modal from '../../shared_components/modals/Modal';
import UserSignupForm from './forms/UserSignupForm';
......@@ -65,7 +65,7 @@ export default function ManageUsers() {
</Stack>
<Tabs defaultActiveKey="active" unmountOnExit>
<Tab eventKey="active" title={t('admin.manage_users.active')}>
<ActiveUsers input={searchInput} />
<VerifiedUsers input={searchInput} />
</Tab>
<Tab eventKey="pending" title={t('admin.manage_users.pending')}>
Pending users component
......
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import useActiveUsers from '../../../hooks/queries/admin/manage_users/useActiveUsers';
import useVerifiedUsers from '../../../hooks/queries/admin/manage_users/useVerifiedUsers';
import ManageUsersTable from './ManageUsersTable';
import Pagination from '../../shared_components/Pagination';
export default function ActiveUsers({ searchInput }) {
export default function VerifiedUsers({ searchInput }) {
const [page, setPage] = useState();
const { isLoading, data: activeUsers } = useActiveUsers(searchInput, page);
const { isLoading, data: verifiedUsers } = useVerifiedUsers(searchInput, page);
return (
<div>
<ManageUsersTable users={activeUsers?.data} />
<ManageUsersTable users={verifiedUsers?.data} />
{!isLoading
&& (
<div className="pagination-wrapper">
<Pagination
page={activeUsers.meta.page}
totalPages={activeUsers.meta.pages}
page={verifiedUsers.meta.page}
totalPages={verifiedUsers.meta.pages}
setPage={setPage}
/>
</div>
......@@ -25,10 +25,10 @@ export default function ActiveUsers({ searchInput }) {
);
}
ActiveUsers.propTypes = {
VerifiedUsers.propTypes = {
searchInput: PropTypes.string,
};
ActiveUsers.defaultProps = {
VerifiedUsers.defaultProps = {
searchInput: '',
};
......@@ -25,7 +25,7 @@ export default function AuthProvider({ children }) {
language: currentUser?.language,
permissions: currentUser?.permissions,
role: currentUser?.role,
active: currentUser?.verified,
verified: currentUser?.verified,
};
const memoizedCurrentUser = useMemo(() => user, [user]);
......
......@@ -2,7 +2,7 @@ import { useQuery } from 'react-query';
import { useSearchParams } from 'react-router-dom';
import axios from '../../../../helpers/Axios';
export default function useActiveUsers(input, page) {
export default function useVerifiedUsers(input, page) {
const [searchParams] = useSearchParams();
const params = {
......@@ -14,7 +14,7 @@ export default function useActiveUsers(input, page) {
return useQuery(
['getAdminUsers', { ...params }],
() => axios.get('/admin/users/active_users.json', { params }).then((resp) => resp.data),
() => axios.get('/admin/users/verified_users.json', { params }).then((resp) => resp.data),
{
keepPreviousData: true,
},
......
......@@ -66,7 +66,7 @@ Rails.application.routes.draw do
namespace :admin do
resources :users do
collection do
get '/active_users', to: 'users#active_users'
get '/verified_users', to: 'users#verified_users'
post '/:user_id/create_server_room', to: 'users#create_server_room'
end
end
......
......@@ -11,14 +11,14 @@ RSpec.describe Api::V1::Admin::UsersController, type: :controller do
sign_in_user(user_with_manage_users_permission)
end
describe '#active_users' do
describe '#verified_users' do
it 'returns the list of active users' do
# TODO: this test doesnt test anything
# TODO: active, banned, etc users feature has not been implemented yet (19.08)
# TODO: Change this test to return active users and not just any users
users = User.all
get :active_users
get :verified_users
expect(response).to have_http_status(:ok)
response_user_ids = JSON.parse(response.body)['data'].map { |user| user['id'] }
expect(response_user_ids).to match_array(users.pluck(:id))
......@@ -30,7 +30,7 @@ RSpec.describe Api::V1::Admin::UsersController, type: :controller do
role_with_provider_test = create(:role, provider: 'test')
create(:user, provider: 'test', role: role_with_provider_test)
get :active_users
get :verified_users
expect(JSON.parse(response.body)['data'].pluck('id')).to match_array(greenlight_users.pluck(:id))
end
......
......@@ -11,38 +11,38 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
end
describe 'POST verify_account#create' do
let(:inactive_user) { create(:user, email: 'inactive@greenlight.com', verified: false) }
let(:active_user) { create(:user, email: 'active@greenlight.com', verified: true) }
let(:unverified_user) { create(:user, email: 'unverified@greenlight.com', verified: false) }
let(:verified_user) { create(:user, email: 'verified@greenlight.com', verified: true) }
before do
allow_any_instance_of(User).to receive(:generate_activation_token!).and_return('TOKEN')
clear_enqueued_jobs
end
context 'when account is inactive' do
context 'when account is unverified' do
before do
sign_in_user(inactive_user)
sign_in_user(unverified_user)
end
it 'generates and sends the activation link' do
expect_any_instance_of(User).to receive(:generate_activation_token!)
post :create, params: { user: { email: inactive_user.email } }
post :create, params: { user: { email: unverified_user.email } }
expect(ActionMailer::MailDeliveryJob).to have_been_enqueued.at(:no_wait).exactly(:once).with('UserMailer', 'activate_account_email',
'deliver_now', Hash)
expect(response).to have_http_status(:ok)
end
end
context 'when account is active' do
context 'when account is verified' do
before do
sign_in_user(active_user)
sign_in_user(verified_user)
end
it 'returns :ok without generating or sending the activation link' do
expect_any_instance_of(User).not_to receive(:generate_activation_token!)
post :create, params: { user: { email: active_user.email } }
post :create, params: { user: { email: verified_user.email } }
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
expect(response).to have_http_status(:ok)
end
......@@ -56,7 +56,7 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
it 'returns :unauthorized without generating or sending the activation link' do
expect_any_instance_of(User).not_to receive(:generate_activation_token!)
post :create, params: { user: { email: inactive_user.email } }
post :create, params: { user: { email: unverified_user.email } }
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
expect(response).to have_http_status(:unauthorized)
end
......@@ -71,7 +71,7 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
it 'generates and sends the activation link' do
expect_any_instance_of(User).to receive(:generate_activation_token!)
post :create, params: { user: { email: inactive_user.email } }
post :create, params: { user: { email: unverified_user.email } }
expect(ActionMailer::MailDeliveryJob).to have_been_enqueued.at(:no_wait).exactly(:once).with('UserMailer', 'activate_account_email',
'deliver_now', Hash)
expect(response).to have_http_status(:ok)
......@@ -82,7 +82,7 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
it 'returns :forbidden without generating or sending the activation link' do
expect_any_instance_of(User).not_to receive(:generate_activation_token!)
post :create, params: { user: { email: inactive_user.email } }
post :create, params: { user: { email: unverified_user.email } }
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
expect(response).to have_http_status(:forbidden)
end
......@@ -93,7 +93,7 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
it 'returns :bad_request without generating or sending the activation link' do
expect_any_instance_of(User).not_to receive(:generate_activation_token!)
post :create, params: { not_user: { not_email: 'invalid@greenlight.com' } }
post :create, params: { not_user: { not_email: 'unverified@greenlight.com' } }
expect(ActionMailer::MailDeliveryJob).not_to have_been_enqueued
expect(response).to have_http_status(:bad_request)
end
......@@ -121,7 +121,7 @@ RSpec.describe Api::V1::VerifyAccountController, type: :controller do
post :activate, params: { user: valid_params }
expect(response).to have_http_status(:ok)
expect(user.reload).to be_active
expect(user.reload).to be_verified
expect(user.verification_digest).to be_blank
expect(user.verification_sent_at).to be_blank
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment