Skip to content

Commit

Permalink
users with 1 phone vs users with 2 phones
Browse files Browse the repository at this point in the history
  • Loading branch information
Neeraj Singh committed Jun 30, 2011
1 parent 9fb18de commit 780d244
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions test/rails_root/test/unit/user_phone_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,52 @@ def count_of_main_klass_records_not_in_hm_klass(main_klass, hm_klass, hm_relatio
record['count_data'].to_i
end

def count_of_main_klass_records_in_hm_klass(main_klass, hm_klass, hm_relationship_name)
def count_of_main_klass_records_in_hm_klass(main_klass, hm_klass, hm_relationship_name, count = nil)
foreign_key = main_klass.reflections[hm_relationship_name].instance_variable_get('@active_record').name.foreign_key
raise 'foreign_key is nil' unless foreign_key

having_sql = if count
"having count(#{hm_klass.table_name}.id) = #{count}"
else
"having count(#{hm_klass.table_name}.id) > 0"
end

sql = %Q{
select #{main_klass.table_name}.id, count(#{hm_klass.table_name}.id)
from #{main_klass.table_name} join #{hm_klass.table_name} on #{main_klass.table_name}.id = #{hm_klass.table_name}.#{foreign_key}
group by #{main_klass.table_name}.id
having count(#{hm_klass.table_name}.id) > 0
#{having_sql}
}

main_klass.find_by_sql(sql).size
end

def test_pie_chart_for_user_with_1_phone_vs_users_with_2_phones_vs_users_with_0_phone
5.times { Factory(:user) }
4.times do
user = Factory(:user)
Factory(:phone_number, :user => user)
end
2.times do
user = Factory(:user)
Factory(:phone_number, :user => user)
Factory(:phone_number, :user => user)
end

assert_equal 11, User.count
assert_equal 8, PhoneNumber.count

main_klass = User
hm_klass = PhoneNumber
hm_relationship = :phone_numbers

assert_equal 5, count_of_main_klass_records_not_in_hm_klass(User, PhoneNumber, :phone_numbers)
assert_equal 4, count_of_main_klass_records_in_hm_klass(User, PhoneNumber, :phone_numbers, 1)
assert_equal 2, count_of_main_klass_records_in_hm_klass(User, PhoneNumber, :phone_numbers, 2)
end


def test_pie_chart_for_user_with_phones_vs_users_without_phones
5.times { Factory(:user) }
3.times do
Expand All @@ -57,5 +88,7 @@ def test_pie_chart_for_user_with_phones_vs_users_without_phones
assert_equal 5, count_of_main_klass_records_not_in_hm_klass(User, PhoneNumber, :phone_numbers)
assert_equal 3, count_of_main_klass_records_in_hm_klass(User, PhoneNumber, :phone_numbers)
end


end

0 comments on commit 780d244

Please sign in to comment.