forgot_password_helper_test.rb 4.09 KB
require_relative "../test_helper"

class ForgotPasswordHelperTest < ActionView::TestCase
  include ForgotPasswordHelper

  def setup
    @environment = Environment.default
    @plugins = Noosfero::Plugin::Manager.new(@environment, self)
  end

  attr_accessor :environment

  should 'allow extra fields provided by plugins' do
    class Plugin1 < Noosfero::Plugin
      def change_password_fields
        {:field => 'f1', :name => 'F1', :model => 'person'}
      end
    end
    class Plugin2 < Noosfero::Plugin
      def change_password_fields
        [{:field => 'f2', :name => 'F2', :model => 'person'},
         {:field => 'f3', :name => 'F3', :model => 'person'}]
      end
    end
    Noosfero::Plugin.stubs(:all).returns(['ForgotPasswordHelperTest::Plugin1', 'ForgotPasswordHelperTest::Plugin2'])

    environment.enable_plugin(Plugin1)
    environment.enable_plugin(Plugin2)

    assert_includes fields, 'f1'
    assert_includes fields, 'f2'
    assert_includes fields, 'f3'
  end

  should 'allow extra person fields provided by plugins' do
    class Plugin1 < Noosfero::Plugin
      def change_password_fields
        {:field => 'f1', :name => 'F1', :model => 'person'}
      end
    end
    class Plugin2 < Noosfero::Plugin
      def change_password_fields
        [{:field => 'f2', :name => 'F2', :model => 'user'},
         {:field => 'f3', :name => 'F3', :model => 'person'}]
      end
    end
    Noosfero::Plugin.stubs(:all).returns(['ForgotPasswordHelperTest::Plugin1', 'ForgotPasswordHelperTest::Plugin2'])

    environment.enable_plugin(Plugin1)
    environment.enable_plugin(Plugin2)

    assert_includes person_fields, 'f1'
    assert_not_includes person_fields, 'f2'
    assert_includes person_fields, 'f3'
  end

  should 'allow extra user fields provided by plugins' do
    class Plugin1 < Noosfero::Plugin
      def change_password_fields
        {:field => 'f1', :name => 'F1', :model => 'user'}
      end
    end
    class Plugin2 < Noosfero::Plugin
      def change_password_fields
        [{:field => 'f2', :name => 'F2', :model => 'person'},
         {:field => 'f3', :name => 'F3', :model => 'user'}]
      end
    end
    Noosfero::Plugin.stubs(:all).returns(['ForgotPasswordHelperTest::Plugin1', 'ForgotPasswordHelperTest::Plugin2'])

    environment.enable_plugin(Plugin1)
    environment.enable_plugin(Plugin2)

    assert_includes user_fields, 'f1'
    assert_not_includes user_fields, 'f2'
    assert_includes user_fields, 'f3'
  end

  should 'add plugins fields labels to final label' do
    class Plugin1 < Noosfero::Plugin
      def change_password_fields
        {:field => 'f1', :name => 'F1', :model => 'user'}
      end
    end
    class Plugin2 < Noosfero::Plugin
      def change_password_fields
        [{:field => 'f2', :name => 'F2', :model => 'person'},
         {:field => 'f3', :name => 'F3', :model => 'user'}]
      end
    end
    Noosfero::Plugin.stubs(:all).returns(['ForgotPasswordHelperTest::Plugin1', 'ForgotPasswordHelperTest::Plugin2'])

    environment.enable_plugin(Plugin1)
    environment.enable_plugin(Plugin2)

    assert_match /F1/, fields_label
    assert_match /F2/, fields_label
    assert_match /F3/, fields_label
  end

  should 'fetch requestors based on fields available' do
    p1 = create_user('person1').person
    p2 = create_user('person2').person

    requestors = fetch_requestors('person1')
    assert_includes requestors, p1
    assert_not_includes requestors, p2

    p3 = create_user('person3').person
    p3.address = 'some address'
    p3.save!
    p4 = create_user('person4').person
    p4.address = 'some address'
    p4.save!
    p5 = create_user('person5').person
    p5.address = 'another address'
    p5.save!

    self.stubs(:person_fields).returns(%w[address])
    requestors = fetch_requestors('some address')
    assert_includes requestors, p3
    assert_includes requestors, p4
  end

  should 'not fetch people from other environments' do
    p1 = create_user('person', :environment => fast_create(Environment)).person
    p2 = create_user('person').person

    requestors = fetch_requestors('person')
    assert_not_includes requestors, p1
    assert_includes requestors, p2
  end
end