Newer
Older
dmpopidor / test / functional / super_admin / users_controller_test.rb
require 'test_helper'

class UsersControllerTest < ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers
  
  setup do
    @user = User.create!(email: "super-admin-user-test@example.com", 
                         firstname: "Testing", surname: "User",
                         password: "password123", password_confirmation: "password123",
                         org: Org.last, accept_terms: true, confirmed_at: Time.zone.now)
    @super_admin = User.find_by(email: 'super_admin@example.com')
  end

  test 'unauthorized user cannot access edit user page' do
    get edit_super_admin_user_path(@user)
    assert_unauthorized_redirect_to_root_path
    
    sign_in @user
    get edit_super_admin_user_path(@user)
    assert_authorized_redirect_to_plans_page
  end

  test 'super admin can access edit user page' do  
    sign_in @super_admin
    get edit_super_admin_user_path(@user)
    assert_response :success
  end
  
  test 'unauthorized user cannot edit a user' do
    params = { firstname: 'Foo', surname: 'Bar' }
    put super_admin_user_path(@user), { super_admin_user: params }
    assert_unauthorized_redirect_to_root_path
    
    sign_in @user
    put super_admin_user_path(@user), { super_admin_user: params }
    assert_authorized_redirect_to_plans_page
  end

  test 'super admin can edit a user' do  
    params = { firstname: 'Foo', surname: 'Bar' }
    sign_in @super_admin
    put super_admin_user_path(@user), { super_admin_user: params }
    assert_response :redirect
    @user.reload
    assert_equal 'Foo', @user.firstname, "expected the User's firstname to have been updated"
  end

end