public
Description: Allows the storage of a number of boolean fields with just one table column
Homepage: http://www.brennandunn.com
Clone URL: git://github.com/brennandunn/preference_fu.git
preference_fu / test / preference_fu_test.rb
100644 61 lines (46 sloc) 1.583 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
require 'test/unit'
require File.join(File.dirname(__FILE__), 'abstract_unit')
require File.join(File.dirname(__FILE__), 'person')
 
 
class PreferenceFuTest < Test::Unit::TestCase
  
  def setup
    setup_db
    @person = Person.new
  end
 
  def teardown
    teardown_db
  end
  
  def test_that_all_default_to_true_except_send_email
    assert_equal [true, false, false, false], @person.prefs.map { |k, v| v }
  end
  
  def test_new_user_for_default_preference_int
    assert_equal 1, @person.read_attribute(:preferences)
  end
  
  def test_changing_of_preference
    assert_equal false, @person.prefs[:delete_user]
    @person.prefs[:delete_user] = true
    assert_equal true, @person.prefs[:delete_user]
  end
  
  def test_mass_assignment
    @person.prefs = {:send_email => true, :change_theme => true, :delete_user => true, :create_user => true}
    assert_equal [true, true, true, true], @person.prefs.map { |k, v| v }
  end
  
  def test_setting_an_unknown_option
    @person.prefs[:unknown] = true
    assert_equal 4, @person.prefs.size
  end
  
  def test_saving_and_loading
    @person.prefs[:change_theme] = true
    @person.save
    
    @new_person = Person.find(:first)
    assert_equal [true, true, false, false], @new_person.prefs.map { |k, v| v }
  end
  
  def test_various_ways_of_stating_truth
    [true, 1, '1', 'y', 'yes', 'Y', 'YES'].each do |val|
      @person.prefs[:change_theme] = val
      assert_equal true, @person.prefs[:change_theme]
    end
  end
  
  def test_lookup_index_of_key
    assert_equal 4, @person.prefs.index(:delete_user)
  end
  
end