ENV["DO_NOT_PRELOAD_MODELS"] = "1" require File.dirname(__FILE__) + '/abstract_unit' class ConfidentialityTest < Test::Unit::TestCase fixtures :people, :schools include ActionView::Helpers::FormHelper include Confidentiality::FormHelper def setup Confidentiality._ignore = false end # Test calls to confidential_methods def test_confidential_methods_must_exist assert_raises RuntimeError do Person.confidential_methods :missing end assert_raises RuntimeError do Person.confidential_methods :address1, :using => :missing end end def test_cannot_call_confidential_methods_twice assert_raises Confidentiality::DuplicateError do Person.confidential_methods :country end end def test_valid_options assert_raises ArgumentError do Person.confidential_methods :name, :bad => :option end end # Test access of confidential methods def test_non_confidential_method_access assert_equal 'Jonathan', people(:jonathan).name end def test_confidential_method_access assert_equal '(confidential)', people(:jonathan).cartoon end def test_confidential_method_access_with_override Confidentiality.ignore do assert_equal 'Bugs', people(:jonathan).cartoon end end def test_aliased_original_reader assert_equal 'Bugs', people(:jonathan).cartoon_without_confidentiality end def test_change_confidentiality_from_true_to_false assert_equal '(confidential)', people(:jonathan).cartoon people(:jonathan).cartoon_confidential = false assert_equal 'Bugs', people(:jonathan).cartoon end def test_change_confidentiality_from_true_to_true assert_equal '(confidential)', people(:jonathan).cartoon people(:jonathan).cartoon_confidential = true assert_equal '(confidential)', people(:jonathan).cartoon end def test_change_confidentiality_from_false_to_true assert_equal 'Blue', people(:jonathan).colour people(:jonathan).colour_confidential = true assert_equal '(confidential)', people(:jonathan).colour end def test_change_confidentiality_from_false_to_false assert_equal 'Blue', people(:jonathan).colour people(:jonathan).colour_confidential = false assert_equal 'Blue', people(:jonathan).colour end def test_confidential_method_readers_pass_options_to_original_methods assert_equal ['1 Place', 'Townsville'], people(:jonathan).address(:short => true) end def test_global_ignore_confidentiality assert_equal '(confidential)', people(:jonathan).cartoon Confidentiality._ignore = true assert_equal 'Bugs', people(:jonathan).cartoon end def test_global_ignore_confidentiality_with_block assert_equal '(confidential)', people(:jonathan).cartoon result = Confidentiality.ignore do assert_equal 'Bugs', people(:jonathan).cartoon 1 end assert_equal 1, result end def test_confidentiality_with_using assert people(:richard).address_confidential? assert people(:richard).city_confidential? people(:richard).address_confidential = false assert !people(:richard).address_confidential? assert !people(:richard).city_confidential? end def test_confidentiality_value_with_using assert_equal ['(confidential)'], people(:richard).address assert 'confidential', people(:richard).city people(:richard).address_confidential = false assert_equal ['2 Street', 'Mulville', 'Dunedin', 'New Zealand'], people(:richard).address assert_equal 'Dunedin', people(:richard).city end def test_confidentiality_with_a_using_method_string assert schools(:burnside).confidential? assert_equal '(confidential)', schools(:burnside).name end def test_validation_ignores_confidentiality assert people(:jonathan).update_attributes(:colour => 'Valid', :colour_confidential => true) assert !people(:jonathan).update_attributes(:colour => '(confidential)') end def test_fields_for_ignores_confidentiality _erbout = '' fields_for :person, people(:jonathan) do |f| _erbout << f.text_field(:colour) _erbout << f.text_field(:cartoon) assert Confidentiality.ignore? end assert_match /Blue/, _erbout assert_match /Bugs/, _erbout end def test_reset_column_information_re_aliases_confidential_methods p = Person.find(1)#assert_equal 'Bugs', people(:jonathan).cartoon(:confidential => true) Confidentiality.ignore do assert_equal 'Bugs', p.cartoon end Person.reset_column_information assert_equal '(confidential)', p.cartoon Confidentiality.ignore do assert_equal 'Bugs', p.cartoon end end end