# frozen_string_literal: true() require 'test_helper' module Admin class UserControllerTest < ActionDispatch::IntegrationTest include ActiveJob::TestHelper test "should get index" do auth_admin get admin_users_url assert_response :success assert assigns :users end test "should get new" do auth_admin get admin_new_user_url assert_response :success assert assigns :user end test "should fail create" do auth_admin assert_difference("User.count", 0) do post admin_create_user_url, params: { user: { name: 'New User' } } end assert :success assert_match(/failed/i, session[:flash].values.join) end test "should post create" do auth_admin assert_enqueued_jobs 1 do assert_difference("User.count", 1) do post admin_create_user_url, params: { user: { email: 'new.user@mailinator.com', name: 'New User', role: 'reviewer' } } end end assert_redirected_to admin_users_url end test "should get view" do auth_admin user = users(:recruiter) get admin_user_url user.to_i assert_response :success assert_select 'p', user.name end test "should get edit" do auth_admin user = users(:recruiter) get admin_edit_user_url user.to_i assert_response :success assert_select "[value=?]", user.name end test "should post update user" do auth_admin user = users(:recruiter) post admin_update_user_url(user.to_i), params: { user: { name: 'new name' } } assert_redirected_to admin_user_path(user.to_i) get admin_user_url user.to_i assert_select 'p', 'new name' end test "should fail to update user" do auth_admin user = users(:recruiter) post admin_update_user_url(user.to_i), params: { user: { name: nil } } assert :success assert_match(/failed/i, session[:flash].values.join) end test 'non admin can not change own role' do auth_recruiter user = users(:recruiter) post admin_update_user_url(user.to_i), params: { user: { name: 'new name', role: 'foobar' } } assert_equal user.role, User.find_by(id: user.id).role end end end