From e1dcb56fbfba8bbbb14a3a4ae0f639c857ac63ea Mon Sep 17 00:00:00 2001 From: Dessy Daskalov Date: Sun, 30 Nov 2014 21:09:33 -0500 Subject: [PATCH] Raise exceptions on invalid user params --- pedometer/models/user.rb | 28 ++++-------- pedometer/test/unit/user_test.rb | 74 +++++++++++++++----------------- 2 files changed, 42 insertions(+), 60 deletions(-) diff --git a/pedometer/models/user.rb b/pedometer/models/user.rb index b51b12b84..2c7d71828 100644 --- a/pedometer/models/user.rb +++ b/pedometer/models/user.rb @@ -7,30 +7,18 @@ class User attr_reader :gender, :height, :stride def initialize(gender = nil, height = nil, stride = nil) - @gender = gender.to_s.downcase if GENDER.include? gender.to_s.downcase - # @height = height.to_f if height.to_f > 0 - # @stride = (stride.to_f > 0) ? stride.to_f : calculate_stride - @height = float_or_default(height, nil, 0) - @stride = float_or_default(stride, calculate_stride, 0) - end + @gender = gender.to_s.downcase unless gender.to_s.empty? + @height = height.to_f unless height.to_s.empty? + @stride = stride.to_f unless stride.to_s.empty? -private + raise('Invalid gender') if @gender && !GENDER.include?(@gender) + raise('Invalid height') if @height && (@height <= 0) + raise('Invalid stride') if @stride && (@stride <= 0) - def float_or_default(val, default, greater_than_val) - float = Float(val) - (float > greater_than_val) ? float : default - rescue ArgumentError, TypeError - default + @stride ||= calculate_stride end - # def float_or_default(val, default, greater_than_val) - # float = val.to_f - # if (float.to_s == val.to_s || float.to_s.gsub('.0', '') == val.to_s) - # (float > greater_than_val) ? float : default - # else - # default - # end - # end +private def calculate_stride if gender && height diff --git a/pedometer/test/unit/user_test.rb b/pedometer/test/unit/user_test.rb index d1638f3ad..644584c0b 100644 --- a/pedometer/test/unit/user_test.rb +++ b/pedometer/test/unit/user_test.rb @@ -7,8 +7,8 @@ def test_create user = User.new('male', 167.5, 80) assert_equal 'male', user.gender - assert_equal 167.5, user.height - assert_equal 80, user.stride + assert_equal 167.5, user.height + assert_equal 80, user.stride end def test_create_no_params @@ -19,27 +19,31 @@ def test_create_no_params assert_equal 74, user.stride end - def test_create_bad_params - user = User.new('bad params') + def test_create_with_gender + assert_nil User.new.gender + assert_nil User.new(nil).gender + assert_nil User.new('').gender - assert_nil user.gender - assert_nil user.height - assert_equal 74, user.stride - end + ['invalid gender', 1].each do |gender| + assert_raise_with_message(RuntimeError, 'Invalid gender') do + User.new(gender) + end + end - def test_create_with_gender assert_equal 'female', User.new('Female').gender assert_equal 'male', User.new('MALE').gender - - assert_nil User.new('invalid value').gender - assert_nil User.new(1).gender end def test_create_with_height assert_nil User.new(nil).height assert_nil User.new(nil, nil).height assert_nil User.new(nil, '').height - assert_nil User.new(nil, 'bad height').height + + ['invalid height', 0, '0', -1, '-1'].each do |height| + assert_raise_with_message(RuntimeError, 'Invalid height') do + User.new(nil, height) + end + end assert_equal 150, User.new(nil, 150).height assert_equal 150, User.new(nil, '150').height @@ -49,25 +53,30 @@ def test_create_with_height assert_equal 167.5, User.new(nil, '167.5').height assert_equal 181.12, User.new(nil, 181.12).height assert_equal 181.12, User.new(nil, '181.12').height - - assert_nil User.new(nil, 0).height - assert_nil User.new(nil, '0').height - assert_nil User.new(nil, -1).height - assert_nil User.new(nil, '-1').height - end - - def test_create_with_height_and_gender - assert_equal 0.415, User.new('male', 1).stride - assert_equal 0.413, User.new('female', 1).stride end def test_create_with_stride assert_equal 74, User.new.stride - assert_equal 74, User.new(nil, nil, 'bad stride').stride - assert_equal 74, User.new(nil, nil, -1).stride + assert_equal 74, User.new(nil, nil, nil).stride + assert_equal 74, User.new(nil, nil, '').stride + + ['invalid stride', 0, '0', -1, '-1'].each do |stride| + assert_raise_with_message(RuntimeError, 'Invalid stride') do + User.new(nil, nil, stride) + end + end + assert_equal 80, User.new(nil, nil, 80).stride assert_equal 80, User.new(nil, nil, '80').stride + assert_equal 80, User.new(nil, nil, 80.0).stride + assert_equal 80, User.new(nil, nil, '80.0').stride assert_equal 75.25, User.new(nil, nil, 75.25).stride + assert_equal 75.25, User.new(nil, nil, '75.25').stride + end + + def test_create_with_height_and_gender + assert_equal 0.415, User.new('male', 1).stride + assert_equal 0.413, User.new('female', 1).stride end def test_calculate_stride @@ -80,19 +89,4 @@ def test_calculate_stride assert_equal 82.6, User.new('female', 200).stride end - def test_for_chapter - User.new.stride - # => 74 - User.new('Female').stride - # => 70 - User.new(nil, '167.5').stride - # => 69.345 - User.new('male', 191).stride - # => 79.265 - User.new(nil, nil, '80').stride - # => 80.0 - User.new('female', 1, '72').stride - # => 72.0 - end - end \ No newline at end of file