seven1m / onebody

OneBody is free, open-source, web-based social networking and online directory software for churches.

onebody / test / unit / person_test.rb
0a962f68 » seven1m 2006-12-10 git-svn-id: svn://beonebody... 1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class PersonTest < Test::Unit::TestCase
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 4 fixtures :people, :families
cf709431 » seven1m 2007-04-19 git-svn-id: svn://beonebody... 5
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 6 should "know which groups the person belongs to" do
af9add57 » seven1m 2008-05-06 Improvements in group membe... 7 Group.find(:all).each do |group|
8 group.people.each do |person|
9 assert person.member_of?(group)
10 end
11 end
12 end
13
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 14 should "not allow someone outside the family to share the same email address" do
e4d5f067 » seven1m 2008-01-01 merged vacation branch r443... 15 # tim already has email address
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 16 p = people(:peter)
e4d5f067 » seven1m 2008-01-01 merged vacation branch r443... 17 p.email = people(:tim).email
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 18 p.save
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 19 assert !p.valid?
cf709431 » seven1m 2007-04-19 git-svn-id: svn://beonebody... 20 assert_equal 'already taken by someone else.', p.errors[:email]
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 21 end
22
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 23 should "validate format of email address" do
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 24 # test every character allowed
25 p = people(:peter)
26 p.email = 'abcdefghijklmnopqrstuvwxyz0123456789._%-@abcdefghijklmnopqrstuvwxyz0123456789.-.com'
27 p.save
28 assert_nil p.errors[:email]
29 # test what we have in our fixtures
30 Person.find(:all).select { |p| p.email }.each do |p|
31 p.save
32 assert_nil p.errors[:email]
33 end
34 # test a bad one
35 p = people(:peter)
36 p.email = 'bad address@example.com'
37 p.save
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 38 assert !p.valid?
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 39 assert_equal 'not a valid email address.', p.errors[:email]
40 end
41
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 42 should "validate format of website" do
4abf1d79 » seven1m 2008-07-07 Fixed Person website test (... 43 Person.logged_in = people(:peter)
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 44 # good
45 p = people(:peter)
46 p.website = 'http://goodwebsite.com/a/path?some=args'
47 p.save
48 assert_nil p.errors[:website]
49 # bad
50 p.website = "javascript://void(alert('do evil stuff'))"
51 p.save
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 52 assert !p.valid?
eb179d7c » seven1m 2008-09-25 Fix tests and update Rails ... 53 assert_equal "has an incorrect format (are you missing 'http://' at the beginning?)", p.errors[:website]
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 54 end
55
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 56 should "inherit attribute sharing from family" do
f7b7e995 » seven1m 2007-04-21 git-svn-id: svn://beonebody... 57 # update_attribute to nil doesn't seem to work for booleans on fixture instantiated instances
58 f = families(:morgan); p = Person.find(people(:jennie).id)
59 # family = true, person = false, peter should not see
60 f.update_attribute :share_mobile_phone, true
61 p.update_attribute :share_mobile_phone, false
62 assert !p.share_mobile_phone_with(people(:peter))
63 # family = false, person = true, peter should see
64 f.update_attribute :share_mobile_phone, false
65 p.update_attribute :share_mobile_phone, true
66 assert p.share_mobile_phone_with(people(:peter))
67 # family = true, person = nil, peter should see
68 f.update_attribute :share_mobile_phone, true
69 p.update_attribute :share_mobile_phone, nil
70 assert Person.find(people(:jennie).id).share_mobile_phone_with(people(:peter))
71 # family = false, person = nil, peter should not see
72 f.update_attribute :share_mobile_phone, false
73 p.update_attribute :share_mobile_phone, nil
74 assert !Person.find(people(:jennie).id).share_mobile_phone_with(people(:peter))
0a962f68 » seven1m 2006-12-10 git-svn-id: svn://beonebody... 75 end
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 76
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 77 should "create an update" do
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 78 tim = {
be805a6d » seven1m 2008-07-08 Fixed broken unit tests. 79 'person' => partial_fixture('people', 'tim', %w(first_name last_name suffix gender mobile_phone work_phone fax birthday anniversary)),
80 'family' => partial_fixture('families', 'morgan', %w(name last_name home_phone address1 address2 city state zip))
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 81 }
82
be805a6d » seven1m 2008-07-08 Fixed broken unit tests. 83 (tim_change_first_name = tim.clone)['person']['first_name'] = 'Timothy'
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 84 update = Update.create_from_params(tim_change_first_name, people(:tim))
85 assert_equal 'Timothy', update.first_name
86 assert_equal '04/28/1981', update.birthday.strftime('%m/%d/%Y')
87 assert_equal '08/11/2001', update.anniversary.strftime('%m/%d/%Y')
88
be805a6d » seven1m 2008-07-08 Fixed broken unit tests. 89 (tim_change_birthday = tim.clone)['person']['birthday'] = '06/24/1980'
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 90 update = Update.create_from_params(tim_change_birthday, people(:tim))
91 assert_equal '06/24/1980', update.birthday.strftime('%m/%d/%Y')
92 assert_equal '08/11/2001', update.anniversary.strftime('%m/%d/%Y')
93
be805a6d » seven1m 2008-07-08 Fixed broken unit tests. 94 (tim_remove_anniversary = tim.clone)['person']['anniversary'] = ''
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 95 update = Update.create_from_params(tim_remove_anniversary, people(:tim))
96 assert_equal '06/24/1980', update.birthday.strftime('%m/%d/%Y')
4913552e » seven1m 2008-07-11 Refactored Update model to ... 97 assert_equal nil, update.anniversary
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 98 end
99
954967a4 » seven1m 2008-07-20 Work on family/people editi... 100 should "mark email_changed when email address changes" do
b2647a1c » seven1m 2008-08-23 AR method to generate uniqu... 101 Person.logged_in = people(:tim)
954967a4 » seven1m 2008-07-20 Work on family/people editi... 102 people(:tim).email = 'change@example.com'
103 assert !people(:tim).email_changed?
104 people(:tim).save
105 assert people(:tim).email_changed?
106 end
107
774e4c12 » seven1m 2008-08-05 Removed unused methods from... 108 should "generate a custom directory pdf" do
109 assert_match /PDF\-1\.3/, people(:tim).generate_directory_pdf.to_s[0..100]
110 end
111
259f8a64 » seven1m 2008-10-15 Test that birthday_soon? me... 112 should "know when a birthday is coming up" do
113 people(:tim).update_attributes!(:birthday => Date.today + 5)
114 assert people(:tim).reload.birthday_soon?
115 people(:tim).update_attributes!(:birthday => Date.today + BIRTHDAY_SOON_DAYS + 1)
116 assert !people(:tim).reload.birthday_soon?
117 end
118
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 119 private
120
121 def partial_fixture(table, name, valid_attributes)
be805a6d » seven1m 2008-07-08 Fixed broken unit tests. 122 returning YAML::load(File.open(File.join(RAILS_ROOT, "test/fixtures/#{table}.yml")))[name] do |fixture|
123 fixture.delete_if { |key, val| !valid_attributes.include? key }
124 fixture.each do |key, val|
125 fixture[key] = val.to_s
126 end
2eff5601 » seven1m 2008-02-27 Improved profile update pro... 127 end
128 end
0a962f68 » seven1m 2006-12-10 git-svn-id: svn://beonebody... 129 end