@@ -99,6 +99,7 module ObjectHelpers | |||||
99 | @generated_version_name.succ! |
|
99 | @generated_version_name.succ! | |
100 | version = Version.new(attributes) |
|
100 | version = Version.new(attributes) | |
101 | version.name = @generated_version_name.dup if version.name.blank? |
|
101 | version.name = @generated_version_name.dup if version.name.blank? | |
|
102 | version.project ||= Project.find(1) | |||
102 | yield version if block_given? |
|
103 | yield version if block_given? | |
103 | version.save! |
|
104 | version.save! | |
104 | version |
|
105 | version |
@@ -20,21 +20,19 require File.expand_path('../../../test_helper', __FILE__) | |||||
20 | class PatchesTest < ActiveSupport::TestCase |
|
20 | class PatchesTest < ActiveSupport::TestCase | |
21 | include Redmine::I18n |
|
21 | include Redmine::I18n | |
22 |
|
22 | |||
23 | context "ActiveRecord::Base.human_attribute_name" do |
|
23 | def setup | |
24 | setup do |
|
24 | Setting.default_language = 'en' | |
25 | Setting.default_language = 'en' |
|
25 | end | |
26 | end |
|
|||
27 |
|
26 | |||
28 |
|
|
27 | test "ActiveRecord::Base.human_attribute_name should transform name to field_name" do | |
29 |
|
|
28 | assert_equal l('field_last_login_on'), ActiveRecord::Base.human_attribute_name('last_login_on') | |
30 |
|
|
29 | end | |
31 |
|
30 | |||
32 |
|
|
31 | test "ActiveRecord::Base.human_attribute_name should cut extra _id suffix for better validation" do | |
33 |
|
|
32 | assert_equal l('field_last_login_on'), ActiveRecord::Base.human_attribute_name('last_login_on_id') | |
34 |
|
|
33 | end | |
35 |
|
34 | |||
36 |
|
|
35 | test "ActiveRecord::Base.human_attribute_name should default to humanized value if no translation has been found (useful for custom fields)" do | |
37 |
|
|
36 | assert_equal 'Patch name', ActiveRecord::Base.human_attribute_name('Patch name') | |
38 | end |
|
|||
39 | end |
|
37 | end | |
40 | end |
|
38 | end |
@@ -18,19 +18,17 | |||||
18 | require File.expand_path('../../../../../test_helper', __FILE__) |
|
18 | require File.expand_path('../../../../../test_helper', __FILE__) | |
19 |
|
19 | |||
20 | class Redmine::MenuManager::MapperTest < ActiveSupport::TestCase |
|
20 | class Redmine::MenuManager::MapperTest < ActiveSupport::TestCase | |
21 | context "Mapper#initialize" do |
|
21 | test "Mapper#initialize should define a root MenuNode if menu is not present in items" do | |
22 | should "define a root MenuNode if menu is not present in items" do |
|
22 | menu_mapper = Redmine::MenuManager::Mapper.new(:test_menu, {}) | |
23 | menu_mapper = Redmine::MenuManager::Mapper.new(:test_menu, {}) |
|
23 | node = menu_mapper.menu_items | |
24 | node = menu_mapper.menu_items |
|
24 | assert_not_nil node | |
25 |
|
|
25 | assert_equal :root, node.name | |
26 | assert_equal :root, node.name |
|
26 | end | |
27 | end |
|
|||
28 |
|
27 | |||
29 |
|
|
28 | test "Mapper#initialize should use existing MenuNode if present" do | |
30 |
|
|
29 | node = "foo" # just an arbitrary reference | |
31 |
|
|
30 | menu_mapper = Redmine::MenuManager::Mapper.new(:test_menu, {:test_menu => node}) | |
32 |
|
|
31 | assert_equal node, menu_mapper.menu_items | |
33 | end |
|
|||
34 | end |
|
32 | end | |
35 |
|
33 | |||
36 | def test_push_onto_root |
|
34 | def test_push_onto_root |
@@ -404,25 +404,22 class UserTest < ActiveSupport::TestCase | |||||
404 | assert_not_nil u.errors[:mail_notification] |
|
404 | assert_not_nil u.errors[:mail_notification] | |
405 | end |
|
405 | end | |
406 |
|
406 | |||
407 | context "User#try_to_login" do |
|
407 | test "User#try_to_login should fall-back to case-insensitive if user login is not found as-typed" do | |
408 | should "fall-back to case-insensitive if user login is not found as-typed." do |
|
408 | user = User.try_to_login("AdMin", "admin") | |
409 | user = User.try_to_login("AdMin", "admin") |
|
409 | assert_kind_of User, user | |
410 | assert_kind_of User, user |
|
410 | assert_equal "admin", user.login | |
411 | assert_equal "admin", user.login |
|
411 | end | |
412 | end |
|
|||
413 |
|
||||
414 | should "select the exact matching user first" do |
|
|||
415 | case_sensitive_user = User.generate! do |user| |
|
|||
416 | user.password = "admin123" |
|
|||
417 | end |
|
|||
418 | # bypass validations to make it appear like existing data |
|
|||
419 | case_sensitive_user.update_attribute(:login, 'ADMIN') |
|
|||
420 |
|
||||
421 | user = User.try_to_login("ADMIN", "admin123") |
|
|||
422 | assert_kind_of User, user |
|
|||
423 | assert_equal "ADMIN", user.login |
|
|||
424 |
|
412 | |||
|
413 | test "User#try_to_login should select the exact matching user first" do | |||
|
414 | case_sensitive_user = User.generate! do |user| | |||
|
415 | user.password = "admin123" | |||
425 | end |
|
416 | end | |
|
417 | # bypass validations to make it appear like existing data | |||
|
418 | case_sensitive_user.update_attribute(:login, 'ADMIN') | |||
|
419 | ||||
|
420 | user = User.try_to_login("ADMIN", "admin123") | |||
|
421 | assert_kind_of User, user | |||
|
422 | assert_equal "ADMIN", user.login | |||
426 | end |
|
423 | end | |
427 |
|
424 | |||
428 | def test_password |
|
425 | def test_password | |
@@ -527,20 +524,14 class UserTest < ActiveSupport::TestCase | |||||
527 | assert_equal nil, user |
|
524 | assert_equal nil, user | |
528 | end |
|
525 | end | |
529 |
|
526 | |||
530 | context ".try_to_login" do |
|
527 | test ".try_to_login with good credentials should return the user" do | |
531 | context "with good credentials" do |
|
528 | user = User.try_to_login("admin", "admin") | |
532 | should "return the user" do |
|
529 | assert_kind_of User, user | |
533 | user = User.try_to_login("admin", "admin") |
|
530 | assert_equal "admin", user.login | |
534 | assert_kind_of User, user |
|
531 | end | |
535 | assert_equal "admin", user.login |
|
|||
536 | end |
|
|||
537 | end |
|
|||
538 |
|
532 | |||
539 |
|
|
533 | test ".try_to_login with wrong credentials should return nil" do | |
540 | should "return nil" do |
|
534 | assert_nil User.try_to_login("admin", "foo") | |
541 | assert_nil User.try_to_login("admin", "foo") |
|
|||
542 | end |
|
|||
543 | end |
|
|||
544 | end |
|
535 | end | |
545 |
|
536 | |||
546 | if ldap_configured? |
|
537 | if ldap_configured? | |
@@ -684,50 +675,46 class UserTest < ActiveSupport::TestCase | |||||
684 | end |
|
675 | end | |
685 | end |
|
676 | end | |
686 |
|
677 | |||
687 | context "User#api_key" do |
|
678 | test "#api_key should generate a new one if the user doesn't have one" do | |
688 | should "generate a new one if the user doesn't have one" do |
|
679 | user = User.generate!(:api_token => nil) | |
689 | user = User.generate!(:api_token => nil) |
|
680 | assert_nil user.api_token | |
690 | assert_nil user.api_token |
|
|||
691 |
|
681 | |||
692 |
|
|
682 | key = user.api_key | |
693 |
|
|
683 | assert_equal 40, key.length | |
694 |
|
|
684 | user.reload | |
695 |
|
|
685 | assert_equal key, user.api_key | |
696 |
|
|
686 | end | |
697 |
|
687 | |||
698 |
|
|
688 | test "#api_key should return the existing api token value" do | |
699 |
|
|
689 | user = User.generate! | |
700 |
|
|
690 | token = Token.create!(:action => 'api') | |
701 |
|
|
691 | user.api_token = token | |
702 |
|
|
692 | assert user.save | |
703 |
|
693 | |||
704 |
|
|
694 | assert_equal token.value, user.api_key | |
705 | end |
|
|||
706 | end |
|
695 | end | |
707 |
|
696 | |||
708 | context "User#find_by_api_key" do |
|
697 | test "#find_by_api_key should return nil if no matching key is found" do | |
709 | should "return nil if no matching key is found" do |
|
698 | assert_nil User.find_by_api_key('zzzzzzzzz') | |
710 | assert_nil User.find_by_api_key('zzzzzzzzz') |
|
699 | end | |
711 | end |
|
|||
712 |
|
700 | |||
713 |
|
|
701 | test "#find_by_api_key should return nil if the key is found for an inactive user" do | |
714 |
|
|
702 | user = User.generate! | |
715 |
|
|
703 | user.status = User::STATUS_LOCKED | |
716 |
|
|
704 | token = Token.create!(:action => 'api') | |
717 |
|
|
705 | user.api_token = token | |
718 |
|
|
706 | user.save | |
719 |
|
707 | |||
720 |
|
|
708 | assert_nil User.find_by_api_key(token.value) | |
721 |
|
|
709 | end | |
722 |
|
710 | |||
723 |
|
|
711 | test "#find_by_api_key should return the user if the key is found for an active user" do | |
724 |
|
|
712 | user = User.generate! | |
725 |
|
|
713 | token = Token.create!(:action => 'api') | |
726 |
|
|
714 | user.api_token = token | |
727 |
|
|
715 | user.save | |
728 |
|
716 | |||
729 |
|
|
717 | assert_equal user, User.find_by_api_key(token.value) | |
730 | end |
|
|||
731 | end |
|
718 | end | |
732 |
|
719 | |||
733 | def test_default_admin_account_changed_should_return_false_if_account_was_not_changed |
|
720 | def test_default_admin_account_changed_should_return_false_if_account_was_not_changed | |
@@ -880,29 +867,27 class UserTest < ActiveSupport::TestCase | |||||
880 | assert !u.password_confirmation.blank? |
|
867 | assert !u.password_confirmation.blank? | |
881 | end |
|
868 | end | |
882 |
|
869 | |||
883 |
|
|
870 | test "#change_password_allowed? should be allowed if no auth source is set" do | |
884 | should "be allowed if no auth source is set" do |
|
871 | user = User.generate! | |
885 | user = User.generate! |
|
872 | assert user.change_password_allowed? | |
886 | assert user.change_password_allowed? |
|
873 | end | |
887 | end |
|
|||
888 |
|
874 | |||
889 |
|
|
875 | test "#change_password_allowed? should delegate to the auth source" do | |
890 |
|
|
876 | user = User.generate! | |
891 |
|
877 | |||
892 |
|
|
878 | allowed_auth_source = AuthSource.generate! | |
893 |
|
|
879 | def allowed_auth_source.allow_password_changes?; true; end | |
894 |
|
880 | |||
895 |
|
|
881 | denied_auth_source = AuthSource.generate! | |
896 |
|
|
882 | def denied_auth_source.allow_password_changes?; false; end | |
897 |
|
883 | |||
898 |
|
|
884 | assert user.change_password_allowed? | |
899 |
|
885 | |||
900 |
|
|
886 | user.auth_source = allowed_auth_source | |
901 |
|
|
887 | assert user.change_password_allowed?, "User not allowed to change password, though auth source does" | |
902 |
|
888 | |||
903 |
|
|
889 | user.auth_source = denied_auth_source | |
904 |
|
|
890 | assert !user.change_password_allowed?, "User allowed to change password, though auth source does not" | |
905 | end |
|
|||
906 | end |
|
891 | end | |
907 |
|
892 | |||
908 | def test_own_account_deletable_should_be_true_with_unsubscrive_enabled |
|
893 | def test_own_account_deletable_should_be_true_with_unsubscrive_enabled |
@@ -132,75 +132,64 class VersionTest < ActiveSupport::TestCase | |||||
132 | assert_equal false, version.completed? |
|
132 | assert_equal false, version.completed? | |
133 | end |
|
133 | end | |
134 |
|
134 | |||
135 | context "#behind_schedule?" do |
|
135 | test "#behind_schedule? should be false if there are no issues assigned" do | |
136 | setup do |
|
136 | version = Version.generate!(:effective_date => Date.yesterday) | |
137 | ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests |
|
137 | assert_equal false, version.behind_schedule? | |
138 | @project = Project.create!(:name => 'test0', :identifier => 'test0') |
|
138 | end | |
139 | @project.trackers << Tracker.create!(:name => 'track') |
|
139 | ||
140 |
|
140 | test "#behind_schedule? should be false if there is no effective_date" do | ||
141 |
|
|
141 | version = Version.generate!(:effective_date => nil) | |
142 | end |
|
142 | assert_equal false, version.behind_schedule? | |
143 |
|
143 | end | ||
144 | should "be false if there are no issues assigned" do |
|
144 | ||
145 | @version.update_attribute(:effective_date, Date.yesterday) |
|
145 | test "#behind_schedule? should be false if all of the issues are ahead of schedule" do | |
146 | assert_equal false, @version.behind_schedule? |
|
146 | version = Version.generate!(:effective_date => 7.days.from_now.to_date) | |
147 | end |
|
147 | add_issue(version, :start_date => 7.days.ago, :done_ratio => 60) # 14 day span, 60% done, 50% time left | |
148 |
|
148 | add_issue(version, :start_date => 7.days.ago, :done_ratio => 60) # 14 day span, 60% done, 50% time left | ||
149 | should "be false if there is no effective_date" do |
|
149 | assert_equal 60, version.completed_percent | |
150 |
|
|
150 | assert_equal false, version.behind_schedule? | |
151 |
|
|
151 | end | |
152 |
|
152 | |||
153 |
|
|
153 | test "#behind_schedule? should be true if any of the issues are behind schedule" do | |
154 |
|
|
154 | version = Version.generate!(:effective_date => 7.days.from_now.to_date) | |
155 |
|
|
155 | add_issue(version, :start_date => 7.days.ago, :done_ratio => 60) # 14 day span, 60% done, 50% time left | |
156 |
|
|
156 | add_issue(version, :start_date => 7.days.ago, :done_ratio => 20) # 14 day span, 20% done, 50% time left | |
157 |
|
|
157 | assert_equal 40, version.completed_percent | |
158 |
|
|
158 | assert_equal true, version.behind_schedule? | |
159 |
|
|
159 | end | |
160 |
|
160 | |||
161 |
|
|
161 | test "#behind_schedule? should be false if all of the issues are complete" do | |
162 |
|
|
162 | version = Version.generate!(:effective_date => 7.days.from_now.to_date) | |
163 |
|
|
163 | add_issue(version, :start_date => 14.days.ago, :done_ratio => 100, :status => IssueStatus.find(5)) # 7 day span | |
164 |
|
|
164 | add_issue(version, :start_date => 14.days.ago, :done_ratio => 100, :status => IssueStatus.find(5)) # 7 day span | |
165 |
|
|
165 | assert_equal 100, version.completed_percent | |
166 |
|
|
166 | assert_equal false, version.behind_schedule? | |
167 |
|
|
167 | end | |
168 |
|
168 | |||
169 | should "be false if all of the issues are complete" do |
|
169 | test "#estimated_hours should return 0 with no assigned issues" do | |
170 | @version.update_attribute(:effective_date, 7.days.from_now.to_date) |
|
170 | version = Version.generate! | |
171 | add_issue(@version, :start_date => 14.days.ago, :done_ratio => 100, :status => IssueStatus.find(5)) # 7 day span |
|
171 | assert_equal 0, version.estimated_hours | |
172 | add_issue(@version, :start_date => 14.days.ago, :done_ratio => 100, :status => IssueStatus.find(5)) # 7 day span |
|
172 | end | |
173 | assert_equal 100, @version.completed_percent |
|
173 | ||
174 | assert_equal false, @version.behind_schedule? |
|
174 | test "#estimated_hours should return 0 with no estimated hours" do | |
175 | end |
|
175 | version = Version.generate! | |
176 | end |
|
176 | add_issue(version) | |
177 |
|
177 | assert_equal 0, version.estimated_hours | ||
178 | context "#estimated_hours" do |
|
178 | end | |
179 | setup do |
|
179 | ||
180 | @version = Version.create!(:project_id => 1, :name => '#estimated_hours') |
|
180 | test "#estimated_hours should return return the sum of estimated hours" do | |
181 | end |
|
181 | version = Version.generate! | |
182 |
|
182 | add_issue(version, :estimated_hours => 2.5) | ||
183 | should "return 0 with no assigned issues" do |
|
183 | add_issue(version, :estimated_hours => 5) | |
184 |
|
|
184 | assert_equal 7.5, version.estimated_hours | |
185 |
|
|
185 | end | |
186 |
|
186 | |||
187 |
|
|
187 | test "#estimated_hours should return the sum of leaves estimated hours" do | |
188 | add_issue(@version) |
|
188 | version = Version.generate! | |
189 | assert_equal 0, @version.estimated_hours |
|
189 | parent = add_issue(version) | |
190 | end |
|
190 | add_issue(version, :estimated_hours => 2.5, :parent_issue_id => parent.id) | |
191 |
|
191 | add_issue(version, :estimated_hours => 5, :parent_issue_id => parent.id) | ||
192 | should "return the sum of estimated hours" do |
|
192 | assert_equal 7.5, version.estimated_hours | |
193 | add_issue(@version, :estimated_hours => 2.5) |
|
|||
194 | add_issue(@version, :estimated_hours => 5) |
|
|||
195 | assert_equal 7.5, @version.estimated_hours |
|
|||
196 | end |
|
|||
197 |
|
||||
198 | should "return the sum of leaves estimated hours" do |
|
|||
199 | parent = add_issue(@version) |
|
|||
200 | add_issue(@version, :estimated_hours => 2.5, :parent_issue_id => parent.id) |
|
|||
201 | add_issue(@version, :estimated_hours => 5, :parent_issue_id => parent.id) |
|
|||
202 | assert_equal 7.5, @version.estimated_hours |
|
|||
203 | end |
|
|||
204 | end |
|
193 | end | |
205 |
|
194 | |||
206 | test "should update all issue's fixed_version associations in case the hierarchy changed XXX" do |
|
195 | test "should update all issue's fixed_version associations in case the hierarchy changed XXX" do |
General Comments 0
You need to be logged in to leave comments.
Login now