annotate test/unit/time_entry_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@909 1 # Redmine - project management software
Chris@909 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@909 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@909 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19
Chris@0 20 class TimeEntryTest < ActiveSupport::TestCase
Chris@909 21 fixtures :issues, :projects, :users, :time_entries,
Chris@909 22 :members, :roles, :member_roles, :auth_sources,
Chris@909 23 :trackers, :issue_statuses,
Chris@909 24 :projects_trackers,
Chris@909 25 :journals, :journal_details,
Chris@909 26 :issue_categories, :enumerations,
Chris@909 27 :groups_users,
Chris@909 28 :enabled_modules,
Chris@909 29 :workflows
Chris@0 30
Chris@0 31 def test_hours_format
Chris@0 32 assertions = { "2" => 2.0,
Chris@0 33 "21.1" => 21.1,
Chris@0 34 "2,1" => 2.1,
Chris@0 35 "1,5h" => 1.5,
Chris@0 36 "7:12" => 7.2,
Chris@0 37 "10h" => 10.0,
Chris@0 38 "10 h" => 10.0,
Chris@0 39 "45m" => 0.75,
Chris@0 40 "45 m" => 0.75,
Chris@0 41 "3h15" => 3.25,
Chris@0 42 "3h 15" => 3.25,
Chris@0 43 "3 h 15" => 3.25,
Chris@0 44 "3 h 15m" => 3.25,
Chris@0 45 "3 h 15 m" => 3.25,
Chris@0 46 "3 hours" => 3.0,
Chris@0 47 "12min" => 0.2,
Chris@0 48 }
Chris@909 49
Chris@0 50 assertions.each do |k, v|
Chris@0 51 t = TimeEntry.new(:hours => k)
Chris@0 52 assert_equal v, t.hours, "Converting #{k} failed:"
Chris@0 53 end
Chris@0 54 end
Chris@909 55
Chris@0 56 def test_hours_should_default_to_nil
Chris@0 57 assert_nil TimeEntry.new.hours
Chris@0 58 end
Chris@909 59
Chris@128 60 def test_spent_on_with_blank
Chris@128 61 c = TimeEntry.new
Chris@128 62 c.spent_on = ''
Chris@128 63 assert_nil c.spent_on
Chris@128 64 end
Chris@909 65
Chris@128 66 def test_spent_on_with_nil
Chris@128 67 c = TimeEntry.new
Chris@128 68 c.spent_on = nil
Chris@128 69 assert_nil c.spent_on
Chris@128 70 end
Chris@909 71
Chris@128 72 def test_spent_on_with_string
Chris@128 73 c = TimeEntry.new
Chris@128 74 c.spent_on = "2011-01-14"
Chris@128 75 assert_equal Date.parse("2011-01-14"), c.spent_on
Chris@128 76 end
Chris@909 77
Chris@128 78 def test_spent_on_with_invalid_string
Chris@128 79 c = TimeEntry.new
Chris@128 80 c.spent_on = "foo"
Chris@128 81 assert_nil c.spent_on
Chris@128 82 end
Chris@909 83
Chris@128 84 def test_spent_on_with_date
Chris@128 85 c = TimeEntry.new
Chris@128 86 c.spent_on = Date.today
Chris@128 87 assert_equal Date.today, c.spent_on
Chris@128 88 end
Chris@909 89
Chris@128 90 def test_spent_on_with_time
Chris@128 91 c = TimeEntry.new
Chris@128 92 c.spent_on = Time.now
Chris@128 93 assert_equal Date.today, c.spent_on
Chris@128 94 end
chris@22 95
Chris@909 96 def test_validate_time_entry
Chris@909 97 anon = User.anonymous
Chris@909 98 project = Project.find(1)
Chris@909 99 issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => anon.id, :status_id => 1,
Chris@909 100 :priority => IssuePriority.all.first, :subject => 'test_create',
Chris@909 101 :description => 'IssueTest#test_create', :estimated_hours => '1:30')
Chris@909 102 assert issue.save
Chris@909 103 activity = TimeEntryActivity.find_by_name('Design')
Chris@909 104 te = TimeEntry.create(:spent_on => '2010-01-01',
Chris@909 105 :hours => 100000,
Chris@909 106 :issue => issue,
Chris@909 107 :project => project,
Chris@909 108 :user => anon,
Chris@909 109 :activity => activity)
Chris@909 110 assert_equal 1, te.errors.count
Chris@909 111 end
Chris@909 112
Chris@909 113 def test_set_project_if_nil
Chris@909 114 anon = User.anonymous
Chris@909 115 project = Project.find(1)
Chris@909 116 issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => anon.id, :status_id => 1,
Chris@909 117 :priority => IssuePriority.all.first, :subject => 'test_create',
Chris@909 118 :description => 'IssueTest#test_create', :estimated_hours => '1:30')
Chris@909 119 assert issue.save
Chris@909 120 activity = TimeEntryActivity.find_by_name('Design')
Chris@909 121 te = TimeEntry.create(:spent_on => '2010-01-01',
Chris@909 122 :hours => 10,
Chris@909 123 :issue => issue,
Chris@909 124 :user => anon,
Chris@909 125 :activity => activity)
Chris@909 126 assert_equal project.id, te.project.id
Chris@909 127 end
Chris@909 128
chris@22 129 context "#earilest_date_for_project" do
chris@22 130 setup do
chris@22 131 User.current = nil
chris@22 132 @public_project = Project.generate!(:is_public => true)
chris@22 133 @issue = Issue.generate_for_project!(@public_project)
chris@22 134 TimeEntry.generate!(:spent_on => '2010-01-01',
chris@22 135 :issue => @issue,
chris@22 136 :project => @public_project)
chris@22 137 end
Chris@909 138
chris@22 139 context "without a project" do
chris@22 140 should "return the lowest spent_on value that is visible to the current user" do
chris@22 141 assert_equal "2007-03-12", TimeEntry.earilest_date_for_project.to_s
chris@22 142 end
chris@22 143 end
chris@22 144
chris@22 145 context "with a project" do
chris@22 146 should "return the lowest spent_on value that is visible to the current user for that project and it's subprojects only" do
chris@22 147 assert_equal "2010-01-01", TimeEntry.earilest_date_for_project(@public_project).to_s
chris@22 148 end
chris@22 149 end
Chris@909 150
chris@22 151 end
chris@22 152
chris@22 153 context "#latest_date_for_project" do
chris@22 154 setup do
chris@22 155 User.current = nil
chris@22 156 @public_project = Project.generate!(:is_public => true)
chris@22 157 @issue = Issue.generate_for_project!(@public_project)
chris@22 158 TimeEntry.generate!(:spent_on => '2010-01-01',
chris@22 159 :issue => @issue,
chris@22 160 :project => @public_project)
chris@22 161 end
chris@22 162
chris@22 163 context "without a project" do
chris@22 164 should "return the highest spent_on value that is visible to the current user" do
chris@22 165 assert_equal "2010-01-01", TimeEntry.latest_date_for_project.to_s
chris@22 166 end
chris@22 167 end
chris@22 168
chris@22 169 context "with a project" do
chris@22 170 should "return the highest spent_on value that is visible to the current user for that project and it's subprojects only" do
chris@22 171 project = Project.find(1)
chris@22 172 assert_equal "2007-04-22", TimeEntry.latest_date_for_project(project).to_s
chris@22 173 end
chris@22 174 end
Chris@909 175 end
Chris@0 176 end