##// END OF EJS Templates
Removing shoulda context....
Jean-Philippe Lang -
r11085:14b50dfbabc6
parent child
Show More
@@ -198,8 +198,7 class AttachmentTest < ActiveSupport::TestCase
198 assert a.readable?
198 assert a.readable?
199 end
199 end
200
200
201 context "Attachmnet.attach_files" do
201 test "Attachmnet.attach_files should attach the file" do
202 should "attach the file" do
203 issue = Issue.first
202 issue = Issue.first
204 assert_difference 'Attachment.count' do
203 assert_difference 'Attachment.count' do
205 Attachment.attach_files(issue,
204 Attachment.attach_files(issue,
@@ -219,7 +218,7 class AttachmentTest < ActiveSupport::TestCase
219 assert_equal 59, File.size(attachment.diskfile)
218 assert_equal 59, File.size(attachment.diskfile)
220 end
219 end
221
220
222 should "add unsaved files to the object as unsaved attachments" do
221 test "Attachmnet.attach_files should add unsaved files to the object as unsaved attachments" do
223 # Max size of 0 to force Attachment creation failures
222 # Max size of 0 to force Attachment creation failures
224 with_settings(:attachment_max_size => 0) do
223 with_settings(:attachment_max_size => 0) do
225 @project = Project.find(1)
224 @project = Project.find(1)
@@ -235,7 +234,6 class AttachmentTest < ActiveSupport::TestCase
235 assert_equal response[:unsaved], @project.unsaved_attachments
234 assert_equal response[:unsaved], @project.unsaved_attachments
236 end
235 end
237 end
236 end
238 end
239
237
240 def test_latest_attach
238 def test_latest_attach
241 set_fixtures_attachments_directory
239 set_fixtures_attachments_directory
@@ -58,61 +58,48 class AuthSourceLdapTest < ActiveSupport::TestCase
58 end
58 end
59
59
60 if ldap_configured?
60 if ldap_configured?
61 context '#authenticate' do
61 test '#authenticate with a valid LDAP user should return the user attributes' do
62 setup do
62 auth = AuthSourceLdap.find(1)
63 @auth = AuthSourceLdap.find(1)
63 auth.update_attribute :onthefly_register, true
64 @auth.update_attribute :onthefly_register, true
65 end
66
64
67 context 'with a valid LDAP user' do
65 attributes = auth.authenticate('example1','123456')
68 should 'return the user attributes' do
69 attributes = @auth.authenticate('example1','123456')
70 assert attributes.is_a?(Hash), "An hash was not returned"
66 assert attributes.is_a?(Hash), "An hash was not returned"
71 assert_equal 'Example', attributes[:firstname]
67 assert_equal 'Example', attributes[:firstname]
72 assert_equal 'One', attributes[:lastname]
68 assert_equal 'One', attributes[:lastname]
73 assert_equal 'example1@redmine.org', attributes[:mail]
69 assert_equal 'example1@redmine.org', attributes[:mail]
74 assert_equal @auth.id, attributes[:auth_source_id]
70 assert_equal auth.id, attributes[:auth_source_id]
75 attributes.keys.each do |attribute|
71 attributes.keys.each do |attribute|
76 assert User.new.respond_to?("#{attribute}="), "Unexpected :#{attribute} attribute returned"
72 assert User.new.respond_to?("#{attribute}="), "Unexpected :#{attribute} attribute returned"
77 end
73 end
78 end
74 end
79 end
80
75
81 context 'with an invalid LDAP user' do
76 test '#authenticate with an invalid LDAP user should return nil' do
82 should 'return nil' do
77 auth = AuthSourceLdap.find(1)
83 assert_equal nil, @auth.authenticate('nouser','123456')
78 assert_equal nil, auth.authenticate('nouser','123456')
84 end
85 end
79 end
86
80
87 context 'without a login' do
81 test '#authenticate without a login should return nil' do
88 should 'return nil' do
82 auth = AuthSourceLdap.find(1)
89 assert_equal nil, @auth.authenticate('','123456')
83 assert_equal nil, auth.authenticate('','123456')
90 end
91 end
84 end
92
85
93 context 'without a password' do
86 test '#authenticate without a password should return nil' do
94 should 'return nil' do
87 auth = AuthSourceLdap.find(1)
95 assert_equal nil, @auth.authenticate('edavis','')
88 assert_equal nil, auth.authenticate('edavis','')
96 end
97 end
89 end
98
90
99 context 'without filter' do
91 test '#authenticate without filter should return any user' do
100 should 'return any user' do
92 auth = AuthSourceLdap.find(1)
101 assert @auth.authenticate('example1','123456')
93 assert auth.authenticate('example1','123456')
102 assert @auth.authenticate('edavis', '123456')
94 assert auth.authenticate('edavis', '123456')
103 end
104 end
95 end
105
96
106 context 'with filter' do
97 test '#authenticate with filter should return user who matches the filter only' do
107 setup do
98 auth = AuthSourceLdap.find(1)
108 @auth.filter = "(mail=*@redmine.org)"
99 auth.filter = "(mail=*@redmine.org)"
109 end
110
100
111 should 'return user who matches the filter only' do
101 assert auth.authenticate('example1','123456')
112 assert @auth.authenticate('example1','123456')
102 assert_nil auth.authenticate('edavis', '123456')
113 assert_nil @auth.authenticate('edavis', '123456')
114 end
115 end
116 end
103 end
117
104
118 def test_authenticate_should_timeout
105 def test_authenticate_should_timeout
@@ -1129,49 +1129,44 class IssueTest < ActiveSupport::TestCase
1129 assert_nil copy.custom_value_for(2)
1129 assert_nil copy.custom_value_for(2)
1130 end
1130 end
1131
1131
1132 context "#copy" do
1132 test "#copy should not create a journal" do
1133 setup do
1133 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3)
1134 @issue = Issue.find(1)
1135 end
1136
1137 should "not create a journal" do
1138 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3)
1139 copy.save!
1134 copy.save!
1140 assert_equal 0, copy.reload.journals.size
1135 assert_equal 0, copy.reload.journals.size
1141 end
1136 end
1142
1137
1143 should "allow assigned_to changes" do
1138 test "#copy should allow assigned_to changes" do
1144 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3)
1139 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3)
1145 assert_equal 3, copy.assigned_to_id
1140 assert_equal 3, copy.assigned_to_id
1146 end
1141 end
1147
1142
1148 should "allow status changes" do
1143 test "#copy should allow status changes" do
1149 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :status_id => 2)
1144 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :status_id => 2)
1150 assert_equal 2, copy.status_id
1145 assert_equal 2, copy.status_id
1151 end
1146 end
1152
1147
1153 should "allow start date changes" do
1148 test "#copy should allow start date changes" do
1154 date = Date.today
1149 date = Date.today
1155 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :start_date => date)
1150 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :start_date => date)
1156 assert_equal date, copy.start_date
1151 assert_equal date, copy.start_date
1157 end
1152 end
1158
1153
1159 should "allow due date changes" do
1154 test "#copy should allow due date changes" do
1160 date = Date.today
1155 date = Date.today
1161 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :due_date => date)
1156 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :due_date => date)
1162 assert_equal date, copy.due_date
1157 assert_equal date, copy.due_date
1163 end
1158 end
1164
1159
1165 should "set current user as author" do
1160 test "#copy should set current user as author" do
1166 User.current = User.find(9)
1161 User.current = User.find(9)
1167 copy = @issue.copy(:project_id => 3, :tracker_id => 2)
1162 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2)
1168 assert_equal User.current, copy.author
1163 assert_equal User.current, copy.author
1169 end
1164 end
1170
1165
1171 should "create a journal with notes" do
1166 test "#copy should create a journal with notes" do
1172 date = Date.today
1167 date = Date.today
1173 notes = "Notes added when copying"
1168 notes = "Notes added when copying"
1174 copy = @issue.copy(:project_id => 3, :tracker_id => 2, :start_date => date)
1169 copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :start_date => date)
1175 copy.init_journal(User.current, notes)
1170 copy.init_journal(User.current, notes)
1176 copy.save!
1171 copy.save!
1177
1172
@@ -1180,7 +1175,6 class IssueTest < ActiveSupport::TestCase
1180 assert_equal 0, journal.details.size
1175 assert_equal 0, journal.details.size
1181 assert_equal notes, journal.notes
1176 assert_equal notes, journal.notes
1182 end
1177 end
1183 end
1184
1178
1185 def test_valid_parent_project
1179 def test_valid_parent_project
1186 issue = Issue.find(1)
1180 issue = Issue.find(1)
@@ -1454,51 +1448,48 class IssueTest < ActiveSupport::TestCase
1454 ).overdue?
1448 ).overdue?
1455 end
1449 end
1456
1450
1457 context "#behind_schedule?" do
1451 test "#behind_schedule? should be false if the issue has no start_date" do
1458 should "be false if the issue has no start_date" do
1459 assert !Issue.new(:start_date => nil,
1452 assert !Issue.new(:start_date => nil,
1460 :due_date => 1.day.from_now.to_date,
1453 :due_date => 1.day.from_now.to_date,
1461 :done_ratio => 0).behind_schedule?
1454 :done_ratio => 0).behind_schedule?
1462 end
1455 end
1463
1456
1464 should "be false if the issue has no end_date" do
1457 test "#behind_schedule? should be false if the issue has no end_date" do
1465 assert !Issue.new(:start_date => 1.day.from_now.to_date,
1458 assert !Issue.new(:start_date => 1.day.from_now.to_date,
1466 :due_date => nil,
1459 :due_date => nil,
1467 :done_ratio => 0).behind_schedule?
1460 :done_ratio => 0).behind_schedule?
1468 end
1461 end
1469
1462
1470 should "be false if the issue has more done than it's calendar time" do
1463 test "#behind_schedule? should be false if the issue has more done than it's calendar time" do
1471 assert !Issue.new(:start_date => 50.days.ago.to_date,
1464 assert !Issue.new(:start_date => 50.days.ago.to_date,
1472 :due_date => 50.days.from_now.to_date,
1465 :due_date => 50.days.from_now.to_date,
1473 :done_ratio => 90).behind_schedule?
1466 :done_ratio => 90).behind_schedule?
1474 end
1467 end
1475
1468
1476 should "be true if the issue hasn't been started at all" do
1469 test "#behind_schedule? should be true if the issue hasn't been started at all" do
1477 assert Issue.new(:start_date => 1.day.ago.to_date,
1470 assert Issue.new(:start_date => 1.day.ago.to_date,
1478 :due_date => 1.day.from_now.to_date,
1471 :due_date => 1.day.from_now.to_date,
1479 :done_ratio => 0).behind_schedule?
1472 :done_ratio => 0).behind_schedule?
1480 end
1473 end
1481
1474
1482 should "be true if the issue has used more calendar time than it's done ratio" do
1475 test "#behind_schedule? should be true if the issue has used more calendar time than it's done ratio" do
1483 assert Issue.new(:start_date => 100.days.ago.to_date,
1476 assert Issue.new(:start_date => 100.days.ago.to_date,
1484 :due_date => Date.today,
1477 :due_date => Date.today,
1485 :done_ratio => 90).behind_schedule?
1478 :done_ratio => 90).behind_schedule?
1486 end
1479 end
1487 end
1488
1480
1489 context "#assignable_users" do
1481 test "#assignable_users should be Users" do
1490 should "be Users" do
1491 assert_kind_of User, Issue.find(1).assignable_users.first
1482 assert_kind_of User, Issue.find(1).assignable_users.first
1492 end
1483 end
1493
1484
1494 should "include the issue author" do
1485 test "#assignable_users should include the issue author" do
1495 non_project_member = User.generate!
1486 non_project_member = User.generate!
1496 issue = Issue.generate!(:author => non_project_member)
1487 issue = Issue.generate!(:author => non_project_member)
1497
1488
1498 assert issue.assignable_users.include?(non_project_member)
1489 assert issue.assignable_users.include?(non_project_member)
1499 end
1490 end
1500
1491
1501 should "include the current assignee" do
1492 test "#assignable_users should include the current assignee" do
1502 user = User.generate!
1493 user = User.generate!
1503 issue = Issue.generate!(:assigned_to => user)
1494 issue = Issue.generate!(:assigned_to => user)
1504 user.lock!
1495 user.lock!
@@ -1506,7 +1497,7 class IssueTest < ActiveSupport::TestCase
1506 assert Issue.find(issue.id).assignable_users.include?(user)
1497 assert Issue.find(issue.id).assignable_users.include?(user)
1507 end
1498 end
1508
1499
1509 should "not show the issue author twice" do
1500 test "#assignable_users should not show the issue author twice" do
1510 assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
1501 assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
1511 assert_equal 2, assignable_user_ids.length
1502 assert_equal 2, assignable_user_ids.length
1512
1503
@@ -1516,8 +1507,7 class IssueTest < ActiveSupport::TestCase
1516 end
1507 end
1517 end
1508 end
1518
1509
1519 context "with issue_group_assignment" do
1510 test "#assignable_users with issue_group_assignment should include groups" do
1520 should "include groups" do
1521 issue = Issue.new(:project => Project.find(2))
1511 issue = Issue.new(:project => Project.find(2))
1522
1512
1523 with_settings :issue_group_assignment => '1' do
1513 with_settings :issue_group_assignment => '1' do
@@ -1525,10 +1515,8 class IssueTest < ActiveSupport::TestCase
1525 assert issue.assignable_users.include?(Group.find(11))
1515 assert issue.assignable_users.include?(Group.find(11))
1526 end
1516 end
1527 end
1517 end
1528 end
1529
1518
1530 context "without issue_group_assignment" do
1519 test "#assignable_users without issue_group_assignment should not include groups" do
1531 should "not include groups" do
1532 issue = Issue.new(:project => Project.find(2))
1520 issue = Issue.new(:project => Project.find(2))
1533
1521
1534 with_settings :issue_group_assignment => '0' do
1522 with_settings :issue_group_assignment => '0' do
@@ -1536,8 +1524,6 class IssueTest < ActiveSupport::TestCase
1536 assert !issue.assignable_users.include?(Group.find(11))
1524 assert !issue.assignable_users.include?(Group.find(11))
1537 end
1525 end
1538 end
1526 end
1539 end
1540 end
1541
1527
1542 def test_create_should_send_email_notification
1528 def test_create_should_send_email_notification
1543 ActionMailer::Base.deliveries.clear
1529 ActionMailer::Base.deliveries.clear
@@ -1728,73 +1714,42 class IssueTest < ActiveSupport::TestCase
1728 assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
1714 assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
1729 end
1715 end
1730
1716
1731 context "#done_ratio" do
1717 test "#done_ratio should use the issue_status according to Setting.issue_done_ratio" do
1732 setup do
1733 @issue = Issue.find(1)
1718 @issue = Issue.find(1)
1734 @issue_status = IssueStatus.find(1)
1719 @issue_status = IssueStatus.find(1)
1735 @issue_status.update_attribute(:default_done_ratio, 50)
1720 @issue_status.update_attribute(:default_done_ratio, 50)
1736 @issue2 = Issue.find(2)
1721 @issue2 = Issue.find(2)
1737 @issue_status2 = IssueStatus.find(2)
1722 @issue_status2 = IssueStatus.find(2)
1738 @issue_status2.update_attribute(:default_done_ratio, 0)
1723 @issue_status2.update_attribute(:default_done_ratio, 0)
1739 end
1740
1741 teardown do
1742 Setting.issue_done_ratio = 'issue_field'
1743 end
1744
1745 context "with Setting.issue_done_ratio using the issue_field" do
1746 setup do
1747 Setting.issue_done_ratio = 'issue_field'
1748 end
1749
1724
1750 should "read the issue's field" do
1725 with_settings :issue_done_ratio => 'issue_field' do
1751 assert_equal 0, @issue.done_ratio
1726 assert_equal 0, @issue.done_ratio
1752 assert_equal 30, @issue2.done_ratio
1727 assert_equal 30, @issue2.done_ratio
1753 end
1728 end
1754 end
1755
1756 context "with Setting.issue_done_ratio using the issue_status" do
1757 setup do
1758 Setting.issue_done_ratio = 'issue_status'
1759 end
1760
1729
1761 should "read the Issue Status's default done ratio" do
1730 with_settings :issue_done_ratio => 'issue_status' do
1762 assert_equal 50, @issue.done_ratio
1731 assert_equal 50, @issue.done_ratio
1763 assert_equal 0, @issue2.done_ratio
1732 assert_equal 0, @issue2.done_ratio
1764 end
1733 end
1765 end
1734 end
1766 end
1767
1735
1768 context "#update_done_ratio_from_issue_status" do
1736 test "#update_done_ratio_from_issue_status should update done_ratio according to Setting.issue_done_ratio" do
1769 setup do
1770 @issue = Issue.find(1)
1737 @issue = Issue.find(1)
1771 @issue_status = IssueStatus.find(1)
1738 @issue_status = IssueStatus.find(1)
1772 @issue_status.update_attribute(:default_done_ratio, 50)
1739 @issue_status.update_attribute(:default_done_ratio, 50)
1773 @issue2 = Issue.find(2)
1740 @issue2 = Issue.find(2)
1774 @issue_status2 = IssueStatus.find(2)
1741 @issue_status2 = IssueStatus.find(2)
1775 @issue_status2.update_attribute(:default_done_ratio, 0)
1742 @issue_status2.update_attribute(:default_done_ratio, 0)
1776 end
1777
1778 context "with Setting.issue_done_ratio using the issue_field" do
1779 setup do
1780 Setting.issue_done_ratio = 'issue_field'
1781 end
1782
1743
1783 should "not change the issue" do
1744 with_settings :issue_done_ratio => 'issue_field' do
1784 @issue.update_done_ratio_from_issue_status
1745 @issue.update_done_ratio_from_issue_status
1785 @issue2.update_done_ratio_from_issue_status
1746 @issue2.update_done_ratio_from_issue_status
1786
1747
1787 assert_equal 0, @issue.read_attribute(:done_ratio)
1748 assert_equal 0, @issue.read_attribute(:done_ratio)
1788 assert_equal 30, @issue2.read_attribute(:done_ratio)
1749 assert_equal 30, @issue2.read_attribute(:done_ratio)
1789 end
1750 end
1790 end
1791
1792 context "with Setting.issue_done_ratio using the issue_status" do
1793 setup do
1794 Setting.issue_done_ratio = 'issue_status'
1795 end
1796
1751
1797 should "change the issue's done ratio" do
1752 with_settings :issue_done_ratio => 'issue_status' do
1798 @issue.update_done_ratio_from_issue_status
1753 @issue.update_done_ratio_from_issue_status
1799 @issue2.update_done_ratio_from_issue_status
1754 @issue2.update_done_ratio_from_issue_status
1800
1755
@@ -1802,7 +1757,6 class IssueTest < ActiveSupport::TestCase
1802 assert_equal 0, @issue2.read_attribute(:done_ratio)
1757 assert_equal 0, @issue2.read_attribute(:done_ratio)
1803 end
1758 end
1804 end
1759 end
1805 end
1806
1760
1807 test "#by_tracker" do
1761 test "#by_tracker" do
1808 User.current = User.anonymous
1762 User.current = User.anonymous
@@ -1873,48 +1827,42 class IssueTest < ActiveSupport::TestCase
1873 assert_equal before, Issue.on_active_project.length
1827 assert_equal before, Issue.on_active_project.length
1874 end
1828 end
1875
1829
1876 context "Issue#recipients" do
1830 test "Issue#recipients should include project recipients" do
1877 setup do
1831 issue = Issue.generate!
1878 @project = Project.find(1)
1832 assert issue.project.recipients.present?
1879 @author = User.generate!
1833 issue.project.recipients.each do |project_recipient|
1880 @assignee = User.generate!
1834 assert issue.recipients.include?(project_recipient)
1881 @issue = Issue.generate!(:project => @project, :assigned_to => @assignee, :author => @author)
1882 end
1883
1884 should "include project recipients" do
1885 assert @project.recipients.present?
1886 @project.recipients.each do |project_recipient|
1887 assert @issue.recipients.include?(project_recipient)
1888 end
1835 end
1889 end
1836 end
1890
1837
1891 should "include the author if the author is active" do
1838 test "Issue#recipients should include the author if the author is active" do
1892 assert @issue.author, "No author set for Issue"
1839 issue = Issue.generate!(:author => User.generate!)
1893 assert @issue.recipients.include?(@issue.author.mail)
1840 assert issue.author, "No author set for Issue"
1841 assert issue.recipients.include?(issue.author.mail)
1894 end
1842 end
1895
1843
1896 should "include the assigned to user if the assigned to user is active" do
1844 test "Issue#recipients should include the assigned to user if the assigned to user is active" do
1897 assert @issue.assigned_to, "No assigned_to set for Issue"
1845 issue = Issue.generate!(:assigned_to => User.generate!)
1898 assert @issue.recipients.include?(@issue.assigned_to.mail)
1846 assert issue.assigned_to, "No assigned_to set for Issue"
1847 assert issue.recipients.include?(issue.assigned_to.mail)
1899 end
1848 end
1900
1849
1901 should "not include users who opt out of all email" do
1850 test "Issue#recipients should not include users who opt out of all email" do
1902 @author.update_attribute(:mail_notification, :none)
1851 issue = Issue.generate!(:author => User.generate!)
1903
1852 issue.author.update_attribute(:mail_notification, :none)
1904 assert !@issue.recipients.include?(@issue.author.mail)
1853 assert !issue.recipients.include?(issue.author.mail)
1905 end
1854 end
1906
1855
1907 should "not include the issue author if they are only notified of assigned issues" do
1856 test "Issue#recipients should not include the issue author if they are only notified of assigned issues" do
1908 @author.update_attribute(:mail_notification, :only_assigned)
1857 issue = Issue.generate!(:author => User.generate!)
1909
1858 issue.author.update_attribute(:mail_notification, :only_assigned)
1910 assert !@issue.recipients.include?(@issue.author.mail)
1859 assert !issue.recipients.include?(issue.author.mail)
1911 end
1860 end
1912
1861
1913 should "not include the assigned user if they are only notified of owned issues" do
1862 test "Issue#recipients should not include the assigned user if they are only notified of owned issues" do
1914 @assignee.update_attribute(:mail_notification, :only_owner)
1863 issue = Issue.generate!(:assigned_to => User.generate!)
1915
1864 issue.assigned_to.update_attribute(:mail_notification, :only_owner)
1916 assert !@issue.recipients.include?(@issue.assigned_to.mail)
1865 assert !issue.recipients.include?(issue.assigned_to.mail)
1917 end
1918 end
1866 end
1919
1867
1920 def test_last_journal_id_with_journals_should_return_the_journal_id
1868 def test_last_journal_id_with_journals_should_return_the_journal_id
@@ -646,13 +646,8 class MailHandlerTest < ActiveSupport::TestCase
646 assert_equal 'This is a html-only email.', issue.description
646 assert_equal 'This is a html-only email.', issue.description
647 end
647 end
648
648
649 context "truncate emails based on the Setting" do
649 test "truncate emails with no setting should add the entire email into the issue" do
650 context "with no setting" do
650 with_settings :mail_handler_body_delimiters => '' do
651 setup do
652 Setting.mail_handler_body_delimiters = ''
653 end
654
655 should "add the entire email into the issue" do
656 issue = submit_email('ticket_on_given_project.eml')
651 issue = submit_email('ticket_on_given_project.eml')
657 assert_issue_created(issue)
652 assert_issue_created(issue)
658 assert issue.description.include?('---')
653 assert issue.description.include?('---')
@@ -660,11 +655,8 class MailHandlerTest < ActiveSupport::TestCase
660 end
655 end
661 end
656 end
662
657
663 context "with a single string" do
658 test "truncate emails with a single string should truncate the email at the delimiter for the issue" do
664 setup do
659 with_settings :mail_handler_body_delimiters => '---' do
665 Setting.mail_handler_body_delimiters = '---'
666 end
667 should "truncate the email at the delimiter for the issue" do
668 issue = submit_email('ticket_on_given_project.eml')
660 issue = submit_email('ticket_on_given_project.eml')
669 assert_issue_created(issue)
661 assert_issue_created(issue)
670 assert issue.description.include?('This paragraph is before delimiters')
662 assert issue.description.include?('This paragraph is before delimiters')
@@ -674,11 +666,8 class MailHandlerTest < ActiveSupport::TestCase
674 end
666 end
675 end
667 end
676
668
677 context "with a single quoted reply (e.g. reply to a Redmine email notification)" do
669 test "truncate emails with a single quoted reply should truncate the email at the delimiter with the quoted reply symbols (>)" do
678 setup do
670 with_settings :mail_handler_body_delimiters => '--- Reply above. Do not remove this line. ---' do
679 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
680 end
681 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
682 journal = submit_email('issue_update_with_quoted_reply_above.eml')
671 journal = submit_email('issue_update_with_quoted_reply_above.eml')
683 assert journal.is_a?(Journal)
672 assert journal.is_a?(Journal)
684 assert journal.notes.include?('An update to the issue by the sender.')
673 assert journal.notes.include?('An update to the issue by the sender.')
@@ -687,11 +676,8 class MailHandlerTest < ActiveSupport::TestCase
687 end
676 end
688 end
677 end
689
678
690 context "with multiple quoted replies (e.g. reply to a reply of a Redmine email notification)" do
679 test "truncate emails with multiple quoted replies should truncate the email at the delimiter with the quoted reply symbols (>)" do
691 setup do
680 with_settings :mail_handler_body_delimiters => '--- Reply above. Do not remove this line. ---' do
692 Setting.mail_handler_body_delimiters = '--- Reply above. Do not remove this line. ---'
693 end
694 should "truncate the email at the delimiter with the quoted reply symbols (>)" do
695 journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
681 journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml')
696 assert journal.is_a?(Journal)
682 assert journal.is_a?(Journal)
697 assert journal.notes.include?('An update to the issue by the sender.')
683 assert journal.notes.include?('An update to the issue by the sender.')
@@ -700,11 +686,8 class MailHandlerTest < ActiveSupport::TestCase
700 end
686 end
701 end
687 end
702
688
703 context "with multiple strings" do
689 test "truncate emails with multiple strings should truncate the email at the first delimiter found (BREAK)" do
704 setup do
690 with_settings :mail_handler_body_delimiters => "---\nBREAK" do
705 Setting.mail_handler_body_delimiters = "---\nBREAK"
706 end
707 should "truncate the email at the first delimiter found (BREAK)" do
708 issue = submit_email('ticket_on_given_project.eml')
691 issue = submit_email('ticket_on_given_project.eml')
709 assert_issue_created(issue)
692 assert_issue_created(issue)
710 assert issue.description.include?('This paragraph is before delimiters')
693 assert issue.description.include?('This paragraph is before delimiters')
@@ -714,7 +697,6 class MailHandlerTest < ActiveSupport::TestCase
714 assert !issue.description.include?('This paragraph is after the delimiter')
697 assert !issue.description.include?('This paragraph is after the delimiter')
715 end
698 end
716 end
699 end
717 end
718
700
719 def test_email_with_long_subject_line
701 def test_email_with_long_subject_line
720 issue = submit_email('ticket_with_long_subject.eml')
702 issue = submit_email('ticket_with_long_subject.eml')
@@ -279,25 +279,21 class MailerTest < ActiveSupport::TestCase
279 end
279 end
280 end
280 end
281
281
282 context("#issue_add") do
282 test "#issue_add should notify project members" do
283 setup do
283 issue = Issue.find(1)
284 ActionMailer::Base.deliveries.clear
284 assert Mailer.issue_add(issue).deliver
285 Setting.bcc_recipients = '1'
286 @issue = Issue.find(1)
287 end
288
289 should "notify project members" do
290 assert Mailer.issue_add(@issue).deliver
291 assert last_email.bcc.include?('dlopper@somenet.foo')
285 assert last_email.bcc.include?('dlopper@somenet.foo')
292 end
286 end
293
287
294 should "not notify project members that are not allow to view the issue" do
288 test "#issue_add should not notify project members that are not allow to view the issue" do
289 issue = Issue.find(1)
295 Role.find(2).remove_permission!(:view_issues)
290 Role.find(2).remove_permission!(:view_issues)
296 assert Mailer.issue_add(@issue).deliver
291 assert Mailer.issue_add(issue).deliver
297 assert !last_email.bcc.include?('dlopper@somenet.foo')
292 assert !last_email.bcc.include?('dlopper@somenet.foo')
298 end
293 end
299
294
300 should "notify issue watchers" do
295 test "#issue_add should notify issue watchers" do
296 issue = Issue.find(1)
301 user = User.find(9)
297 user = User.find(9)
302 # minimal email notification options
298 # minimal email notification options
303 user.pref[:no_self_notified] = '1'
299 user.pref[:no_self_notified] = '1'
@@ -305,19 +301,19 class MailerTest < ActiveSupport::TestCase
305 user.mail_notification = false
301 user.mail_notification = false
306 user.save
302 user.save
307
303
308 Watcher.create!(:watchable => @issue, :user => user)
304 Watcher.create!(:watchable => issue, :user => user)
309 assert Mailer.issue_add(@issue).deliver
305 assert Mailer.issue_add(issue).deliver
310 assert last_email.bcc.include?(user.mail)
306 assert last_email.bcc.include?(user.mail)
311 end
307 end
312
308
313 should "not notify watchers not allowed to view the issue" do
309 test "#issue_add should not notify watchers not allowed to view the issue" do
310 issue = Issue.find(1)
314 user = User.find(9)
311 user = User.find(9)
315 Watcher.create!(:watchable => @issue, :user => user)
312 Watcher.create!(:watchable => issue, :user => user)
316 Role.non_member.remove_permission!(:view_issues)
313 Role.non_member.remove_permission!(:view_issues)
317 assert Mailer.issue_add(@issue).deliver
314 assert Mailer.issue_add(issue).deliver
318 assert !last_email.bcc.include?(user.mail)
315 assert !last_email.bcc.include?(user.mail)
319 end
316 end
320 end
321
317
322 # test mailer methods for each language
318 # test mailer methods for each language
323 def test_issue_add
319 def test_issue_add
@@ -63,64 +63,46 class PrincipalTest < ActiveSupport::TestCase
63 assert_equal expected_order.map(&:name).map(&:downcase), scope.sorted.all.map(&:name).map(&:downcase)
63 assert_equal expected_order.map(&:name).map(&:downcase), scope.sorted.all.map(&:name).map(&:downcase)
64 end
64 end
65
65
66 context "#like" do
66 test "like scope should search login" do
67 setup do
67 results = Principal.like('jsmi')
68 Principal.create!(:login => 'login')
69 Principal.create!(:login => 'login2')
70
68
71 Principal.create!(:firstname => 'firstname')
69 assert results.any?
72 Principal.create!(:firstname => 'firstname2')
70 assert results.all? {|u| u.login.match(/jsmi/i) }
73
74 Principal.create!(:lastname => 'lastname')
75 Principal.create!(:lastname => 'lastname2')
76
77 Principal.create!(:mail => 'mail@example.com')
78 Principal.create!(:mail => 'mail2@example.com')
79
80 @palmer = Principal.create!(:firstname => 'David', :lastname => 'Palmer')
81 end
71 end
82
72
83 should "search login" do
73 test "like scope should search firstname" do
84 results = Principal.like('login')
74 results = Principal.like('john')
85
75
86 assert_equal 2, results.count
76 assert results.any?
87 assert results.all? {|u| u.login.match(/login/) }
77 assert results.all? {|u| u.firstname.match(/john/i) }
88 end
78 end
89
79
90 should "search firstname" do
80 test "like scope should search lastname" do
91 results = Principal.like('firstname')
81 results = Principal.like('smi')
92
82
93 assert_equal 2, results.count
83 assert results.any?
94 assert results.all? {|u| u.firstname.match(/firstname/) }
84 assert results.all? {|u| u.lastname.match(/smi/i) }
95 end
85 end
96
86
97 should "search lastname" do
87 test "like scope should search mail" do
98 results = Principal.like('lastname')
88 results = Principal.like('somenet')
99
89
100 assert_equal 2, results.count
90 assert results.any?
101 assert results.all? {|u| u.lastname.match(/lastname/) }
91 assert results.all? {|u| u.mail.match(/somenet/i) }
102 end
92 end
103
93
104 should "search mail" do
94 test "like scope should search firstname and lastname" do
105 results = Principal.like('mail')
95 results = Principal.like('john smi')
106
107 assert_equal 2, results.count
108 assert results.all? {|u| u.mail.match(/mail/) }
109 end
110
111 should "search firstname and lastname" do
112 results = Principal.like('david palm')
113
96
114 assert_equal 1, results.count
97 assert_equal 1, results.count
115 assert_equal @palmer, results.first
98 assert_equal User.find(2), results.first
116 end
99 end
117
100
118 should "search lastname and firstname" do
101 test "like scope should search lastname and firstname" do
119 results = Principal.like('palmer davi')
102 results = Principal.like('smith joh')
120
103
121 assert_equal 1, results.count
104 assert_equal 1, results.count
122 assert_equal @palmer, results.first
105 assert_equal User.find(2), results.first
123 end
124 end
106 end
125
107
126 def test_like_scope_with_cyrillic_name
108 def test_like_scope_with_cyrillic_name
@@ -435,56 +435,54 class ProjectTest < ActiveSupport::TestCase
435 assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)
435 assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)
436 end
436 end
437
437
438 context "#rolled_up_versions" do
438 test "#rolled_up_versions should include the versions for the current project" do
439 setup do
439 project = Project.generate!
440 @project = Project.generate!
440 parent_version_1 = Version.generate!(:project => project)
441 @parent_version_1 = Version.generate!(:project => @project)
441 parent_version_2 = Version.generate!(:project => project)
442 @parent_version_2 = Version.generate!(:project => @project)
442 assert_same_elements [parent_version_1, parent_version_2], project.rolled_up_versions
443 end
444
445 should "include the versions for the current project" do
446 assert_same_elements [@parent_version_1, @parent_version_2], @project.rolled_up_versions
447 end
443 end
448
444
449 should "include versions for a subproject" do
445 test "#rolled_up_versions should include versions for a subproject" do
450 @subproject = Project.generate!
446 project = Project.generate!
451 @subproject.set_parent!(@project)
447 parent_version_1 = Version.generate!(:project => project)
452 @subproject_version = Version.generate!(:project => @subproject)
448 parent_version_2 = Version.generate!(:project => project)
449 subproject = Project.generate_with_parent!(project)
450 subproject_version = Version.generate!(:project => subproject)
453
451
454 assert_same_elements [
452 assert_same_elements [
455 @parent_version_1,
453 parent_version_1,
456 @parent_version_2,
454 parent_version_2,
457 @subproject_version
455 subproject_version
458 ], @project.rolled_up_versions
456 ], project.rolled_up_versions
459 end
457 end
460
458
461 should "include versions for a sub-subproject" do
459 test "#rolled_up_versions should include versions for a sub-subproject" do
462 @subproject = Project.generate!
460 project = Project.generate!
463 @subproject.set_parent!(@project)
461 parent_version_1 = Version.generate!(:project => project)
464 @sub_subproject = Project.generate!
462 parent_version_2 = Version.generate!(:project => project)
465 @sub_subproject.set_parent!(@subproject)
463 subproject = Project.generate_with_parent!(project)
466 @sub_subproject_version = Version.generate!(:project => @sub_subproject)
464 sub_subproject = Project.generate_with_parent!(subproject)
467
465 sub_subproject_version = Version.generate!(:project => sub_subproject)
468 @project.reload
466 project.reload
469
467
470 assert_same_elements [
468 assert_same_elements [
471 @parent_version_1,
469 parent_version_1,
472 @parent_version_2,
470 parent_version_2,
473 @sub_subproject_version
471 sub_subproject_version
474 ], @project.rolled_up_versions
472 ], project.rolled_up_versions
475 end
473 end
476
474
477 should "only check active projects" do
475 test "#rolled_up_versions should only check active projects" do
478 @subproject = Project.generate!
476 project = Project.generate!
479 @subproject.set_parent!(@project)
477 parent_version_1 = Version.generate!(:project => project)
480 @subproject_version = Version.generate!(:project => @subproject)
478 parent_version_2 = Version.generate!(:project => project)
481 assert @subproject.archive
479 subproject = Project.generate_with_parent!(project)
482
480 subproject_version = Version.generate!(:project => subproject)
483 @project.reload
481 assert subproject.archive
482 project.reload
484
483
485 assert !@subproject.active?
484 assert !subproject.active?
486 assert_same_elements [@parent_version_1, @parent_version_2], @project.rolled_up_versions
485 assert_same_elements [parent_version_1, parent_version_2], project.rolled_up_versions
487 end
488 end
486 end
489
487
490 def test_shared_versions_none_sharing
488 def test_shared_versions_none_sharing
@@ -611,12 +609,8 class ProjectTest < ActiveSupport::TestCase
611 end
609 end
612 end
610 end
613
611
614 context "enabled_modules" do
612 test "enabled_modules should define module by names and preserve ids" do
615 setup do
616 @project = Project.find(1)
613 @project = Project.find(1)
617 end
618
619 should "define module by names and preserve ids" do
620 # Remove one module
614 # Remove one module
621 modules = @project.enabled_modules.slice(0..-2)
615 modules = @project.enabled_modules.slice(0..-2)
622 assert modules.any?
616 assert modules.any?
@@ -628,7 +622,8 class ProjectTest < ActiveSupport::TestCase
628 assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort
622 assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort
629 end
623 end
630
624
631 should "enable a module" do
625 test "enabled_modules should enable a module" do
626 @project = Project.find(1)
632 @project.enabled_module_names = []
627 @project.enabled_module_names = []
633 @project.reload
628 @project.reload
634 assert_equal [], @project.enabled_module_names
629 assert_equal [], @project.enabled_module_names
@@ -643,7 +638,8 class ProjectTest < ActiveSupport::TestCase
643 assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
638 assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
644 end
639 end
645
640
646 should "disable a module" do
641 test "enabled_modules should disable a module" do
642 @project = Project.find(1)
647 #with string
643 #with string
648 assert @project.enabled_module_names.include?("issue_tracking")
644 assert @project.enabled_module_names.include?("issue_tracking")
649 @project.disable_module!("issue_tracking")
645 @project.disable_module!("issue_tracking")
@@ -657,7 +653,6 class ProjectTest < ActiveSupport::TestCase
657 @project.disable_module!(first_module)
653 @project.disable_module!(first_module)
658 assert ! @project.reload.enabled_module_names.include?(first_module.name)
654 assert ! @project.reload.enabled_module_names.include?(first_module.name)
659 end
655 end
660 end
661
656
662 def test_enabled_module_names_should_not_recreate_enabled_modules
657 def test_enabled_module_names_should_not_recreate_enabled_modules
663 project = Project.find(1)
658 project = Project.find(1)
General Comments 0
You need to be logged in to leave comments. Login now