From 181cf116235d94d2882a95e42fa626faa2499de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaros=C5=82aw=20Pleba=C5=84ski?= Date: Wed, 1 Apr 2009 21:49:08 +0200 Subject: [PATCH] Fixed wrong date in cyclic goals [#3 state:resolved] --- app/models/goal.rb | 4 ++-- lib/date_extensions.rb | 20 ++++++++++---------- test/unit/date_test.rb | 20 ++++++++++---------- test/unit/goal_test.rb | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/app/models/goal.rb b/app/models/goal.rb index 7f58872..0cab57b 100644 --- a/app/models/goal.rb +++ b/app/models/goal.rb @@ -169,8 +169,8 @@ def create_next_goal_in_cycle throw "Period type mismatch: #{period_type}" if period_type == :SELECTED throw 'Goal is not cyclic' unless is_cyclic new_goal = self.clone - new_goal.period_start = self.period_start.shift(Date::period_category(period_type)) - new_goal.period_end = self.period_end.shift(Date::period_category(period_type)) + new_goal.period_start = self.period_end + 1 #self.period_start.shift(Date::period_category(period_type)) + new_goal.period_end = new_goal.period_start.shift(Date::period_category(period_type)) same_goal = Goal.first :conditions => ['period_start = ? AND period_end = ? AND cycle_group = ?', new_goal.period_start, new_goal.period_end, cycle_group] throw 'There is already goal in database' unless same_goal.nil? return new_goal diff --git a/lib/date_extensions.rb b/lib/date_extensions.rb index 8f32b85..45d7c04 100644 --- a/lib/date_extensions.rb +++ b/lib/date_extensions.rb @@ -101,16 +101,16 @@ def last_week def shift(period_category) case period_category - when :DAY then self.advance(:days => 1) - when :WEEK then self.advance(:weeks => 1) - when :MONTH then self.advance(:months => 1) - when :QUARTER then self.advance(:quarters => 1) - when :YEAR then self.advance(:years => 1) - when :A_7_DAYS then self.advance(:days => 7) - when :A_4_WEEKS then self.advance(:weeks => 4) - when :A_3_MONTHS then self.advance(:months => 3) - when :A_90_DAYS then self.advance(:days => 90) - when :A_12_MONTHS then self.advance(:months => 12) + when :DAY then self.advance(:days => 1)-1 + when :WEEK then self.advance(:weeks => 1)-1 + when :MONTH then self.advance(:months => 1)-1 + when :QUARTER then self.advance(:quarters => 1)-1 + when :YEAR then self.advance(:years => 1)-1 + when :A_7_DAYS then self.advance(:days => 7)-1 + when :A_4_WEEKS then self.advance(:weeks => 4)-1 + when :A_3_MONTHS then self.advance(:months => 3)-1 + when :A_90_DAYS then self.advance(:days => 90)-1 + when :A_12_MONTHS then self.advance(:months => 12)-1 else raise "Unrecognized period symbol: #{period_category}" end diff --git a/test/unit/date_test.rb b/test/unit/date_test.rb index 35bffd5..d90f1aa 100644 --- a/test/unit/date_test.rb +++ b/test/unit/date_test.rb @@ -258,16 +258,16 @@ def test_calculate def test_shift date = '16.07.2008'.to_date #sroda, 3 tydzień lipca, III kwartał, 29 tydzień 2008 - assert_equal '17.07.2008'.to_date, date.shift(:DAY) - assert_equal '23.07.2008'.to_date, date.shift(:WEEK) - assert_equal '16.08.2008'.to_date, date.shift(:MONTH) - assert_equal '16.10.2008'.to_date, date.shift(:QUARTER) - assert_equal '16.07.2009'.to_date, date.shift(:YEAR) - assert_equal '23.07.2008'.to_date, date.shift(:A_7_DAYS) - assert_equal '13.08.2008'.to_date, date.shift(:A_4_WEEKS) - assert_equal '16.10.2008'.to_date, date.shift(:A_3_MONTHS) - assert_equal '14.10.2008'.to_date, date.shift(:A_90_DAYS) - assert_equal '16.07.2009'.to_date, date.shift(:A_12_MONTHS) + assert_equal '16.07.2008'.to_date, date.shift(:DAY) + assert_equal '22.07.2008'.to_date, date.shift(:WEEK) + assert_equal '15.08.2008'.to_date, date.shift(:MONTH) + assert_equal '15.10.2008'.to_date, date.shift(:QUARTER) + assert_equal '15.07.2009'.to_date, date.shift(:YEAR) + assert_equal '22.07.2008'.to_date, date.shift(:A_7_DAYS) + assert_equal '12.08.2008'.to_date, date.shift(:A_4_WEEKS) + assert_equal '15.10.2008'.to_date, date.shift(:A_3_MONTHS) + assert_equal '13.10.2008'.to_date, date.shift(:A_90_DAYS) + assert_equal '15.07.2009'.to_date, date.shift(:A_12_MONTHS) end diff --git a/test/unit/goal_test.rb b/test/unit/goal_test.rb index 08128e7..2329438 100644 --- a/test/unit/goal_test.rb +++ b/test/unit/goal_test.rb @@ -36,12 +36,31 @@ def test_create_next_goal_in_cycle assert_raise RuntimeError, NameError do g.create_next_goal_in_cycle end + end + def test_next_goal_in_cycle_has_proper_date + g = create_goal + g.period_type = :NEXT_MONTH + g.period_start = '01.01.2008'.to_date + g.period_end = '31.01.2008'.to_date + g.is_cyclic = true + g.save! + new_g = g.create_next_goal_in_cycle + assert_not_nil new_g + new_g.save! + assert_equal '01.02.2008'.to_date, new_g.period_start + assert_equal '29.02.2008'.to_date, new_g.period_end + new_g = new_g.create_next_goal_in_cycle + assert_not_nil new_g + new_g.save! + assert_equal '01.03.2008'.to_date, new_g.period_start + assert_equal '31.03.2008'.to_date, new_g.period_end end + def test_set_cycle_group_on_save g = create_goal(false) g.period_type = :NEXT_WEEK