From d7076ca4f901c8d222b60be4f5f417aa4d56980e Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Thu, 5 Sep 2013 10:39:06 +0200 Subject: [PATCH 1/5] remove executable modes from these image files --- app/assets/images/accept.png | Bin app/assets/images/cancel.png | Bin app/assets/images/feed-icon.png | Bin app/assets/images/reviewed.png | Bin app/assets/images/stats.gif | Bin 5 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 app/assets/images/accept.png mode change 100755 => 100644 app/assets/images/cancel.png mode change 100755 => 100644 app/assets/images/feed-icon.png mode change 100755 => 100644 app/assets/images/reviewed.png mode change 100755 => 100644 app/assets/images/stats.gif diff --git a/app/assets/images/accept.png b/app/assets/images/accept.png old mode 100755 new mode 100644 diff --git a/app/assets/images/cancel.png b/app/assets/images/cancel.png old mode 100755 new mode 100644 diff --git a/app/assets/images/feed-icon.png b/app/assets/images/feed-icon.png old mode 100755 new mode 100644 diff --git a/app/assets/images/reviewed.png b/app/assets/images/reviewed.png old mode 100755 new mode 100644 diff --git a/app/assets/images/stats.gif b/app/assets/images/stats.gif old mode 100755 new mode 100644 From eb26e4e5a8577a3bdcf7489ca1409d7e1ca8b541 Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Thu, 5 Sep 2013 10:41:31 +0200 Subject: [PATCH 2/5] add favicon to public for clients that do not follow the url in the page headers but go directly to /favicon.ico --- public/favicon.ico | Bin 0 -> 1150 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/favicon.ico diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8a3105e225fd09b959a5d1c276d10a5495e0d9b6 GIT binary patch literal 1150 zcmZuwOH30{6deT7jgf??OO3|pLXB<&rlnQNXUeqGHc+S)+gb@ATHHWHVjMQGFebQg zV}emJG+2YUfKEHppHQME#zZA*_y{6IiHSjI1F^*GeJzMByvcq4bLX7*&ZDR_{IasB zc&W>vsNL8*j6tUMVWh=t?BH5zvD2M9Qs?*)KC^k~;(n7?TTm%#R822x4_fc@+f(jMtVaeUbV7c_=q((o3!UX0qmFHVeg8=K?F{0j@!nU(-QRkhX>)ZO!YNtroxjI_H(gaay+=I3XYLIjgarhm+(`70`58 zgVuj~8V74-darU>?a2ePj|J!0J?Q#$7b?VJU^dBt+Tcpq!jXTwz?E*6m_Ambfpybx zXXGZ3vb?eceV?6hAy^Jfe=-lE#V8gH^LVD$d<}azK`}@4YLWBP2`Bu)FS-(iA4_xa zZ1ORbi$$1&Xdrp8#q&T8k*2WykjbY#R_dl#$QKZ5DSNpOvK zfyK|owIuZ9g2qcjg;Y{#mUKsvcZ}d!w+wE-YlDwJ-@~o9t#A%8J!21GCNd4(qn%(7 z3s!j`-a|vB$f(*sv}fxDUVs^@CNQ7IVNPmH3EH$sJrB zt~+56Pyb5t%$j$wCHV-imX{9HT#RRzA8Q!2s|c19KFDXB50qVsd**-NrQ|3Ta)1-% zVDagB;`Ic2y|xF+>+wJH8ow;zUp!NymGC0|& Date: Thu, 5 Sep 2013 10:53:16 +0200 Subject: [PATCH 3/5] fix failing test --- test/models/todo_test.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/models/todo_test.rb b/test/models/todo_test.rb index 4d25525b..f05d012f 100644 --- a/test/models/todo_test.rb +++ b/test/models/todo_test.rb @@ -51,18 +51,18 @@ class TodoTest < ActiveSupport::TestCase def test_validate_length_of_description assert_equal "Call dinosaur exterminator", @not_completed2.description - @not_completed2.description = generate_random_string(101) + @not_completed2.description = generate_random_string(Todo::MAX_DESCRIPTION_LENGTH+1) assert !@not_completed2.save assert_equal 1, @not_completed2.errors.count - assert_equal "is too long (maximum is 100 characters)", @not_completed2.errors[:description][0] + assert_equal "is too long (maximum is #{Todo::MAX_DESCRIPTION_LENGTH} characters)", @not_completed2.errors[:description][0] end def test_validate_length_of_notes assert_equal "Ask him if I need to hire a skip for the corpses.", @not_completed2.notes - @not_completed2.notes = generate_random_string(60001) + @not_completed2.notes = generate_random_string(Todo::MAX_NOTES_LENGTH+1) assert !@not_completed2.save assert_equal 1, @not_completed2.errors.count - assert_equal "is too long (maximum is 60000 characters)", @not_completed2.errors[:notes][0] + assert_equal "is too long (maximum is #{Todo::MAX_NOTES_LENGTH} characters)", @not_completed2.errors[:notes][0] end def test_validate_show_from_must_be_a_date_in_the_future From cb46a8461e6b37cd483432f2fdf4092d24fa5f81 Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Thu, 5 Sep 2013 12:21:43 +0200 Subject: [PATCH 4/5] fix show_from not being clear when a todo comes from tickler --- app/models/todo.rb | 2 +- test/controllers/todos_controller_test.rb | 31 ++++++++++++++++++++++- test/models/todo_test.rb | 26 +++++++++++-------- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/app/models/todo.rb b/app/models/todo.rb index 95669c03..5602fdc5 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -73,7 +73,7 @@ class Todo < ActiveRecord::Base state :active state :project_hidden state :completed, :before_enter => Proc.new { |t| t.completed_at = Time.zone.now }, :before_exit => Proc.new { |t| t.completed_at = nil} - state :deferred, :after_exit => Proc.new { |t| t[:show_from] = nil } + state :deferred, :before_exit => Proc.new { |t| t[:show_from] = nil } state :pending event :defer do diff --git a/test/controllers/todos_controller_test.rb b/test/controllers/todos_controller_test.rb index 78b0c56c..6b44df50 100644 --- a/test/controllers/todos_controller_test.rb +++ b/test/controllers/todos_controller_test.rb @@ -406,6 +406,10 @@ class TodosControllerTest < ActionController::TestCase assert_equal context.id, todo.reload.context.id, 'context of todo should be changed' end + ####### + # defer + ####### + def test_update_clearing_show_from_makes_todo_active t = Todo.find(1) t.show_from = "01/01/2030" @@ -427,6 +431,31 @@ class TodosControllerTest < ActionController::TestCase assert_not_nil t.show_from end + def test_find_and_activate_ready + login_as(:admin_user) + + # given a todo in the tickler that should be activated + Timecop.travel(2.weeks.ago) do + create_todo( + description: "tickler", + show_from: 1.week.from_now. + in_time_zone(users(:admin_user).prefs.time_zone). + strftime("#{users(:admin_user).prefs.date_format}")) + end + + todos = Todo.where(description: "tickler").where('show_from < ?', Time.zone.now) + assert_equal 1, todos.count, "there should be one todo in tickler" + todo = todos.first + + assert todo.deferred?, "todo should be in deferred state" + + # index page calls find_and_activate_ready + get :index + + todo.reload + assert todo.active?, "todo should have been activated" + assert todo.show_from.nil?, "show_from date should have been cleared" + end ####### # feeds @@ -954,7 +983,7 @@ class TodosControllerTest < ActionController::TestCase put :create, _source_view: params[:_source_view], context_name: params[:context_name], project_name: params[:project_name], tag_list: params[:tag_list], - todo: {notes: params[:notes], description: params[:description], due: params[:due]} + todo: {notes: params[:notes], description: params[:description], due: params[:due], show_from: params[:show_from]} end end diff --git a/test/models/todo_test.rb b/test/models/todo_test.rb index f05d012f..ed9bf57e 100644 --- a/test/models/todo_test.rb +++ b/test/models/todo_test.rb @@ -160,17 +160,23 @@ class TodoTest < ActiveSupport::TestCase end def test_activate_also_clears_show_from - # setup test case - t = @not_completed1 - t.show_from = 1.week.from_now - t.save! - assert t.deferred? - t.reload + dates = [1.week.from_now, 1.week.ago] - # activate and check show_from - t.activate! - assert t.active? - assert t.show_from.nil? + dates.each do |show_from_date| + # setup test case + t = @not_completed1 + Timecop.travel(show_from_date - 1.day) do + t.show_from = show_from_date + t.save! + assert t.deferred? + t.reload + end + + # activate and check show_from + t.activate! + assert t.active? + assert t.show_from.nil? + end end def test_clearing_show_from_activates_todo From fee1e3b504af4bcb877c69278b45410f088ff469 Mon Sep 17 00:00:00 2001 From: Reinier Balt Date: Thu, 5 Sep 2013 12:23:26 +0200 Subject: [PATCH 5/5] fix failing test on timezones and remove debug message --- app/models/recurring_todo.rb | 1 - lib/staleness.rb | 3 ++- test/models/preference_test.rb | 2 +- test/models/staleness_test.rb | 5 +++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/models/recurring_todo.rb b/app/models/recurring_todo.rb index a798105a..3769e585 100644 --- a/app/models/recurring_todo.rb +++ b/app/models/recurring_todo.rb @@ -48,7 +48,6 @@ class RecurringTodo < ActiveRecord::Base end def validate_weekly - puts "@@@ validate_weekly [#{self.weekly_every_x_week}]" if weekly_every_x_week.blank? errors[:base] << "Every other nth week may not be empty for recurrence setting" end diff --git a/lib/staleness.rb b/lib/staleness.rb index d5375621..f377f1bf 100644 --- a/lib/staleness.rb +++ b/lib/staleness.rb @@ -2,9 +2,10 @@ require 'active_support/all' class Staleness SECONDS_PER_DAY = 86400 + def self.days_stale(item, current_user) return 0 if cannot_be_stale(item, current_user) - (UserTime.new(current_user).time - item.created_at).to_i / SECONDS_PER_DAY + (UserTime.new(current_user).time.utc - item.created_at.utc).to_i / SECONDS_PER_DAY end def self.cannot_be_stale(item, current_user) diff --git a/test/models/preference_test.rb b/test/models/preference_test.rb index 9a66cfb5..d0c065fe 100644 --- a/test/models/preference_test.rb +++ b/test/models/preference_test.rb @@ -20,7 +20,7 @@ class PreferenceTest < ActiveSupport::TestCase end def test_parse_date - date = Time.new(2007, 05, 20).in_time_zone(@admin_user.preference.time_zone).at_midnight + date = UserTime.new(@admin_user).midnight(Time.new(2007, 05, 20, 0, 0, 0)) assert_equal date.to_s, @admin_user.preference.parse_date('20/5/2007').to_s end diff --git a/test/models/staleness_test.rb b/test/models/staleness_test.rb index c2c3efc4..0f119d87 100644 --- a/test/models/staleness_test.rb +++ b/test/models/staleness_test.rb @@ -1,6 +1,7 @@ require_relative '../minimal_test_helper' require_relative '../../lib/staleness' - +require_relative '../../lib/user_time' +require 'timecop' class StalenessTest < Test::Unit::TestCase FakePrefs = Struct.new(:time_zone) @@ -35,7 +36,7 @@ class StalenessTest < Test::Unit::TestCase def setup @current_user = FakeUser.new(now) - Timecop.freeze(Time.local(2013,02,28)) + Timecop.freeze(Time.utc(2013,02,28)) end def teardown