users_controller_test.rb 5.53 KB
require_relative "../test_helper"
require 'users_controller'

class UsersControllerTest < ActionController::TestCase

  def setup
    @controller = UsersController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new

    @environment = Environment.default

    admin_user = create_user_with_permission('adminuser', 'manage_environment_users', environment)
    login_as('adminuser')
  end
  attr_accessor :environment

  should 'not access without right permission' do
    create_user('guest')
    login_as 'guest'
    get :index
    assert_response 403 # forbidden
  end

  should 'grant access with right permission' do
    get :index
    assert_response :success
  end

  should 'blank search results include activated and deactivated users' do
    deactivated = create_user('deactivated')
    deactivated.activated_at = nil
    deactivated.person.visible = false
    deactivated.save!
    get :index, :q => ''
    assert_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => /adminuser/}}
    assert_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => /deactivated/}}
  end

  should 'blank search include all users' do
    (1..5).each {|i|
      u = create_user('user'+i.to_s)
    }
    get :index, :q => '' # blank search
    assert_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => /adminuser/}}
    (1..5).each {|i|
      u = 'user'+i.to_s
      assert_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => u}}
    }
  end

  should 'search not include all users' do
    (1..5).each {|i|
      u = create_user('user'+i.to_s)
    }
    get :index, :q => 'er5' # search
    assert_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => /user5/}}
    (1..4).each {|i|
      u = 'user'+i.to_s
      assert_no_tag :tag => 'div', :attributes => { :id => /users-list/ }, :descendant => {:tag => 'a', :attributes => {:title => u}}
    }
  end

  should 'set admin role' do
    person = create_user.person
    assert_equal false, person.is_admin?
    post :set_admin_role, :id => person.id, :q => ''
    person.reload
    assert person.is_admin?
  end

  should 'reset admin role' do
    person = create_user.person

    environment.add_admin(person)
    assert person.is_admin?

    post :reset_admin_role, :id => person.id, :q => ''
    person.reload
    refute person.is_admin?
  end

  should 'activate user' do
    u = create_user()
    assert_equal false, u.activated?
    post :activate, :id => u.person.id, :q => ''
    u.reload
    assert u.activated?
  end

  should 'deactivate user' do
    u = create_user()
    u.activated_at = Time.now.utc
    u.activation_code = nil
    u.person.visible = true
    assert u.activated?
    post :deactivate, :id => u.person.id, :q => ''
    u.reload
    assert_equal false, u.activated?
  end

  should 'order users by name' do
    create_user('jeremy')
    create_user('bill')
    create_user('ana')
    create_user('creed')
    get :index

    assert_order ['ana', 'bill', 'creed', 'jeremy'], assigns(:collection).map(&:name)
  end

  should 'set filter to all_users by default' do
    get :index
    assert_equal 'all_users', assigns(:filter)
  end

  should 'response as XML to export users' do
    get :download, :format => 'xml'
    assert_equal 'text/xml', @response.content_type
  end

  should 'response as CSV to export users' do
    get :download, :format => 'csv'
    assert_equal 'text/csv', @response.content_type
    assert_equal 'name;email', @response.body.split("\n")[0]
  end

  should 'be able to remove a person' do
    person = fast_create(Person, :environment_id => environment.id)
    assert_difference 'Person.count', -1 do
      post :destroy_user, :id => person.id
    end
  end

  should 'not crash if user does not exist' do
    person = fast_create(Person)

    assert_no_difference 'Person.count' do
      post :destroy_user, :id => 99999
    end
    assert_redirected_to :action => 'index'
  end

  should 'redirect to index after send email with success' do
    post :send_mail, mailing: { subject: "Subject", body: "Body" }, recipients: { profile_admins: "false", env_admins: "false" }
    assert_redirected_to :action => 'index'
    assert_match /The e-mails are being sent/, session[:notice]
  end

  should 'mailing recipients_roles should be empty when none is set' do
    post :send_mail, mailing: { subject: "Subject", body: "Body" }, recipients: { profile_admins: "false", env_admins: "false" }
    mailing = EnvironmentMailing.last
    assert_equal mailing.recipients_roles, []
  end

  should 'mailing recipients_roles should be set correctly' do
    post :send_mail, mailing: { subject: "Subject", body: "Body" }, recipients: { profile_admins: "true", env_admins: "true" }
    mailing = EnvironmentMailing.last
    assert_equal mailing.recipients_roles, ["profile_admin", "environment_administrator"]
  end

  should 'send mail to admins recipients' do
    admin_user = create_user('new_admin').person
    admin_user_2 = create_user('new_admin_2').person

    environment.add_admin admin_user
    environment.add_admin admin_user_2

    assert_equal 2, environment.admins.count
    assert_difference "MailingSent.count", 2 do
      post :send_mail, mailing: { subject: "UnB", body: "Hail UnB" }, recipients: { profile_admins: "false", env_admins: "true" }
      process_delayed_job_queue
    end
  end

end