@@ -198,8 +198,7 class AttachmentTest < ActiveSupport::TestCase | |||||
198 | assert a.readable? |
|
198 | assert a.readable? | |
199 | end |
|
199 | end | |
200 |
|
200 | |||
201 |
|
|
201 | test "Attachmnet.attach_files should attach the file" do | |
202 | should "attach the file" do |
|
|||
203 |
|
|
202 | issue = Issue.first | |
204 |
|
|
203 | assert_difference 'Attachment.count' do | |
205 |
|
|
204 | Attachment.attach_files(issue, | |
@@ -219,7 +218,7 class AttachmentTest < ActiveSupport::TestCase | |||||
219 |
|
|
218 | assert_equal 59, File.size(attachment.diskfile) | |
220 |
|
|
219 | end | |
221 |
|
220 | |||
222 |
|
|
221 | test "Attachmnet.attach_files should add unsaved files to the object as unsaved attachments" do | |
223 |
|
|
222 | # Max size of 0 to force Attachment creation failures | |
224 |
|
|
223 | with_settings(:attachment_max_size => 0) do | |
225 |
|
|
224 | @project = Project.find(1) | |
@@ -235,7 +234,6 class AttachmentTest < ActiveSupport::TestCase | |||||
235 |
|
|
234 | assert_equal response[:unsaved], @project.unsaved_attachments | |
236 |
|
|
235 | end | |
237 |
|
|
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 |
|
|
66 | assert attributes.is_a?(Hash), "An hash was not returned" | |
71 |
|
|
67 | assert_equal 'Example', attributes[:firstname] | |
72 |
|
|
68 | assert_equal 'One', attributes[:lastname] | |
73 |
|
|
69 | assert_equal 'example1@redmine.org', attributes[:mail] | |
74 |
|
|
70 | assert_equal auth.id, attributes[:auth_source_id] | |
75 |
|
|
71 | attributes.keys.each do |attribute| | |
76 |
|
|
72 | assert User.new.respond_to?("#{attribute}="), "Unexpected :#{attribute} attribute returned" | |
77 |
|
|
73 | end | |
78 |
|
|
74 | end | |
79 | end |
|
|||
80 |
|
75 | |||
81 |
|
|
76 | test '#authenticate with an invalid LDAP user should return nil' do | |
82 | should 'return nil' do |
|
77 | auth = AuthSourceLdap.find(1) | |
83 |
|
|
78 | assert_equal nil, auth.authenticate('nouser','123456') | |
84 | end |
|
|||
85 |
|
|
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 |
|
|
83 | assert_equal nil, auth.authenticate('','123456') | |
90 | end |
|
|||
91 |
|
|
84 | end | |
92 |
|
85 | |||
93 |
|
|
86 | test '#authenticate without a password should return nil' do | |
94 | should 'return nil' do |
|
87 | auth = AuthSourceLdap.find(1) | |
95 |
|
|
88 | assert_equal nil, auth.authenticate('edavis','') | |
96 | end |
|
|||
97 |
|
|
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 |
|
|
93 | assert auth.authenticate('example1','123456') | |
102 |
|
|
94 | assert auth.authenticate('edavis', '123456') | |
103 | end |
|
|||
104 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
1134 | copy.save! | |
1140 |
|
|
1135 | assert_equal 0, copy.reload.journals.size | |
1141 |
|
|
1136 | end | |
1142 |
|
1137 | |||
1143 |
|
|
1138 | test "#copy should allow assigned_to changes" do | |
1144 |
|
|
1139 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :assigned_to_id => 3) | |
1145 |
|
|
1140 | assert_equal 3, copy.assigned_to_id | |
1146 |
|
|
1141 | end | |
1147 |
|
1142 | |||
1148 |
|
|
1143 | test "#copy should allow status changes" do | |
1149 |
|
|
1144 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :status_id => 2) | |
1150 |
|
|
1145 | assert_equal 2, copy.status_id | |
1151 |
|
|
1146 | end | |
1152 |
|
1147 | |||
1153 |
|
|
1148 | test "#copy should allow start date changes" do | |
1154 |
|
|
1149 | date = Date.today | |
1155 |
|
|
1150 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :start_date => date) | |
1156 |
|
|
1151 | assert_equal date, copy.start_date | |
1157 |
|
|
1152 | end | |
1158 |
|
1153 | |||
1159 |
|
|
1154 | test "#copy should allow due date changes" do | |
1160 |
|
|
1155 | date = Date.today | |
1161 |
|
|
1156 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :due_date => date) | |
1162 |
|
|
1157 | assert_equal date, copy.due_date | |
1163 |
|
|
1158 | end | |
1164 |
|
1159 | |||
1165 |
|
|
1160 | test "#copy should set current user as author" do | |
1166 |
|
|
1161 | User.current = User.find(9) | |
1167 |
|
|
1162 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2) | |
1168 |
|
|
1163 | assert_equal User.current, copy.author | |
1169 |
|
|
1164 | end | |
1170 |
|
1165 | |||
1171 |
|
|
1166 | test "#copy should create a journal with notes" do | |
1172 |
|
|
1167 | date = Date.today | |
1173 |
|
|
1168 | notes = "Notes added when copying" | |
1174 |
|
|
1169 | copy = Issue.find(1).copy(:project_id => 3, :tracker_id => 2, :start_date => date) | |
1175 |
|
|
1170 | copy.init_journal(User.current, notes) | |
1176 |
|
|
1171 | copy.save! | |
1177 |
|
1172 | |||
@@ -1180,7 +1175,6 class IssueTest < ActiveSupport::TestCase | |||||
1180 |
|
|
1175 | assert_equal 0, journal.details.size | |
1181 |
|
|
1176 | assert_equal notes, journal.notes | |
1182 |
|
|
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 |
|
|
1452 | assert !Issue.new(:start_date => nil, | |
1460 |
|
|
1453 | :due_date => 1.day.from_now.to_date, | |
1461 |
|
|
1454 | :done_ratio => 0).behind_schedule? | |
1462 |
|
|
1455 | end | |
1463 |
|
1456 | |||
1464 |
|
|
1457 | test "#behind_schedule? should be false if the issue has no end_date" do | |
1465 |
|
|
1458 | assert !Issue.new(:start_date => 1.day.from_now.to_date, | |
1466 |
|
|
1459 | :due_date => nil, | |
1467 |
|
|
1460 | :done_ratio => 0).behind_schedule? | |
1468 |
|
|
1461 | end | |
1469 |
|
1462 | |||
1470 |
|
|
1463 | test "#behind_schedule? should be false if the issue has more done than it's calendar time" do | |
1471 |
|
|
1464 | assert !Issue.new(:start_date => 50.days.ago.to_date, | |
1472 |
|
|
1465 | :due_date => 50.days.from_now.to_date, | |
1473 |
|
|
1466 | :done_ratio => 90).behind_schedule? | |
1474 |
|
|
1467 | end | |
1475 |
|
1468 | |||
1476 |
|
|
1469 | test "#behind_schedule? should be true if the issue hasn't been started at all" do | |
1477 |
|
|
1470 | assert Issue.new(:start_date => 1.day.ago.to_date, | |
1478 |
|
|
1471 | :due_date => 1.day.from_now.to_date, | |
1479 |
|
|
1472 | :done_ratio => 0).behind_schedule? | |
1480 |
|
|
1473 | end | |
1481 |
|
1474 | |||
1482 |
|
|
1475 | test "#behind_schedule? should be true if the issue has used more calendar time than it's done ratio" do | |
1483 |
|
|
1476 | assert Issue.new(:start_date => 100.days.ago.to_date, | |
1484 |
|
|
1477 | :due_date => Date.today, | |
1485 |
|
|
1478 | :done_ratio => 90).behind_schedule? | |
1486 |
|
|
1479 | end | |
1487 | end |
|
|||
1488 |
|
1480 | |||
1489 |
|
|
1481 | test "#assignable_users should be Users" do | |
1490 | should "be Users" do |
|
|||
1491 |
|
|
1482 | assert_kind_of User, Issue.find(1).assignable_users.first | |
1492 |
|
|
1483 | end | |
1493 |
|
1484 | |||
1494 |
|
|
1485 | test "#assignable_users should include the issue author" do | |
1495 |
|
|
1486 | non_project_member = User.generate! | |
1496 |
|
|
1487 | issue = Issue.generate!(:author => non_project_member) | |
1497 |
|
1488 | |||
1498 |
|
|
1489 | assert issue.assignable_users.include?(non_project_member) | |
1499 |
|
|
1490 | end | |
1500 |
|
1491 | |||
1501 |
|
|
1492 | test "#assignable_users should include the current assignee" do | |
1502 |
|
|
1493 | user = User.generate! | |
1503 |
|
|
1494 | issue = Issue.generate!(:assigned_to => user) | |
1504 |
|
|
1495 | user.lock! | |
@@ -1506,7 +1497,7 class IssueTest < ActiveSupport::TestCase | |||||
1506 |
|
|
1497 | assert Issue.find(issue.id).assignable_users.include?(user) | |
1507 |
|
|
1498 | end | |
1508 |
|
1499 | |||
1509 |
|
|
1500 | test "#assignable_users should not show the issue author twice" do | |
1510 |
|
|
1501 | assignable_user_ids = Issue.find(1).assignable_users.collect(&:id) | |
1511 |
|
|
1502 | assert_equal 2, assignable_user_ids.length | |
1512 |
|
1503 | |||
@@ -1516,8 +1507,7 class IssueTest < ActiveSupport::TestCase | |||||
1516 |
|
|
1507 | end | |
1517 |
|
|
1508 | end | |
1518 |
|
1509 | |||
1519 |
|
|
1510 | test "#assignable_users with issue_group_assignment should include groups" do | |
1520 | should "include groups" do |
|
|||
1521 |
|
|
1511 | issue = Issue.new(:project => Project.find(2)) | |
1522 |
|
1512 | |||
1523 |
|
|
1513 | with_settings :issue_group_assignment => '1' do | |
@@ -1525,10 +1515,8 class IssueTest < ActiveSupport::TestCase | |||||
1525 |
|
|
1515 | assert issue.assignable_users.include?(Group.find(11)) | |
1526 |
|
|
1516 | end | |
1527 |
|
|
1517 | end | |
1528 | end |
|
|||
1529 |
|
1518 | |||
1530 |
|
|
1519 | test "#assignable_users without issue_group_assignment should not include groups" do | |
1531 | should "not include groups" do |
|
|||
1532 |
|
|
1520 | issue = Issue.new(:project => Project.find(2)) | |
1533 |
|
1521 | |||
1534 |
|
|
1522 | with_settings :issue_group_assignment => '0' do | |
@@ -1536,8 +1524,6 class IssueTest < ActiveSupport::TestCase | |||||
1536 |
|
|
1524 | assert !issue.assignable_users.include?(Group.find(11)) | |
1537 |
|
|
1525 | end | |
1538 |
|
|
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 |
|
|
1718 | @issue = Issue.find(1) | |
1734 |
|
|
1719 | @issue_status = IssueStatus.find(1) | |
1735 |
|
|
1720 | @issue_status.update_attribute(:default_done_ratio, 50) | |
1736 |
|
|
1721 | @issue2 = Issue.find(2) | |
1737 |
|
|
1722 | @issue_status2 = IssueStatus.find(2) | |
1738 |
|
|
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 |
|
|
1726 | assert_equal 0, @issue.done_ratio | |
1752 |
|
|
1727 | assert_equal 30, @issue2.done_ratio | |
1753 |
|
|
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 |
|
|
1731 | assert_equal 50, @issue.done_ratio | |
1763 |
|
|
1732 | assert_equal 0, @issue2.done_ratio | |
1764 |
|
|
1733 | end | |
1765 |
|
|
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 |
|
|
1737 | @issue = Issue.find(1) | |
1771 |
|
|
1738 | @issue_status = IssueStatus.find(1) | |
1772 |
|
|
1739 | @issue_status.update_attribute(:default_done_ratio, 50) | |
1773 |
|
|
1740 | @issue2 = Issue.find(2) | |
1774 |
|
|
1741 | @issue_status2 = IssueStatus.find(2) | |
1775 |
|
|
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 |
|
|
1745 | @issue.update_done_ratio_from_issue_status | |
1785 |
|
|
1746 | @issue2.update_done_ratio_from_issue_status | |
1786 |
|
1747 | |||
1787 |
|
|
1748 | assert_equal 0, @issue.read_attribute(:done_ratio) | |
1788 |
|
|
1749 | assert_equal 30, @issue2.read_attribute(:done_ratio) | |
1789 |
|
|
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 |
|
|
1753 | @issue.update_done_ratio_from_issue_status | |
1799 |
|
|
1754 | @issue2.update_done_ratio_from_issue_status | |
1800 |
|
1755 | |||
@@ -1802,7 +1757,6 class IssueTest < ActiveSupport::TestCase | |||||
1802 |
|
|
1757 | assert_equal 0, @issue2.read_attribute(:done_ratio) | |
1803 |
|
|
1758 | end | |
1804 |
|
|
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 |
|
|
1835 | end | |
1889 |
|
|
1836 | end | |
1890 |
|
1837 | |||
1891 |
|
|
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 |
|
|
1842 | end | |
1895 |
|
1843 | |||
1896 |
|
|
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 |
|
|
1848 | end | |
1900 |
|
1849 | |||
1901 |
|
|
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 |
|
|
1853 | assert !issue.recipients.include?(issue.author.mail) | |
1905 |
|
|
1854 | end | |
1906 |
|
1855 | |||
1907 |
|
|
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 |
|
|
1859 | assert !issue.recipients.include?(issue.author.mail) | |
1911 |
|
|
1860 | end | |
1912 |
|
1861 | |||
1913 |
|
|
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 |
|
|
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 |
|
|
651 | issue = submit_email('ticket_on_given_project.eml') | |
657 |
|
|
652 | assert_issue_created(issue) | |
658 |
|
|
653 | assert issue.description.include?('---') | |
@@ -660,11 +655,8 class MailHandlerTest < ActiveSupport::TestCase | |||||
660 |
|
|
655 | end | |
661 |
|
|
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 |
|
|
660 | issue = submit_email('ticket_on_given_project.eml') | |
669 |
|
|
661 | assert_issue_created(issue) | |
670 |
|
|
662 | assert issue.description.include?('This paragraph is before delimiters') | |
@@ -674,11 +666,8 class MailHandlerTest < ActiveSupport::TestCase | |||||
674 |
|
|
666 | end | |
675 |
|
|
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 |
|
|
671 | journal = submit_email('issue_update_with_quoted_reply_above.eml') | |
683 |
|
|
672 | assert journal.is_a?(Journal) | |
684 |
|
|
673 | assert journal.notes.include?('An update to the issue by the sender.') | |
@@ -687,11 +676,8 class MailHandlerTest < ActiveSupport::TestCase | |||||
687 |
|
|
676 | end | |
688 |
|
|
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 |
|
|
681 | journal = submit_email('issue_update_with_multiple_quoted_reply_above.eml') | |
696 |
|
|
682 | assert journal.is_a?(Journal) | |
697 |
|
|
683 | assert journal.notes.include?('An update to the issue by the sender.') | |
@@ -700,11 +686,8 class MailHandlerTest < ActiveSupport::TestCase | |||||
700 |
|
|
686 | end | |
701 |
|
|
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 |
|
|
691 | issue = submit_email('ticket_on_given_project.eml') | |
709 |
|
|
692 | assert_issue_created(issue) | |
710 |
|
|
693 | assert issue.description.include?('This paragraph is before delimiters') | |
@@ -714,7 +697,6 class MailHandlerTest < ActiveSupport::TestCase | |||||
714 |
|
|
697 | assert !issue.description.include?('This paragraph is after the delimiter') | |
715 |
|
|
698 | end | |
716 |
|
|
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 |
|
|
285 | assert last_email.bcc.include?('dlopper@somenet.foo') | |
292 |
|
|
286 | end | |
293 |
|
287 | |||
294 |
|
|
288 | test "#issue_add should not notify project members that are not allow to view the issue" do | |
|
289 | issue = Issue.find(1) | |||
295 |
|
|
290 | Role.find(2).remove_permission!(:view_issues) | |
296 |
|
|
291 | assert Mailer.issue_add(issue).deliver | |
297 |
|
|
292 | assert !last_email.bcc.include?('dlopper@somenet.foo') | |
298 |
|
|
293 | end | |
299 |
|
294 | |||
300 |
|
|
295 | test "#issue_add should notify issue watchers" do | |
|
296 | issue = Issue.find(1) | |||
301 |
|
|
297 | user = User.find(9) | |
302 |
|
|
298 | # minimal email notification options | |
303 |
|
|
299 | user.pref[:no_self_notified] = '1' | |
@@ -305,19 +301,19 class MailerTest < ActiveSupport::TestCase | |||||
305 |
|
|
301 | user.mail_notification = false | |
306 |
|
|
302 | user.save | |
307 |
|
303 | |||
308 |
|
|
304 | Watcher.create!(:watchable => issue, :user => user) | |
309 |
|
|
305 | assert Mailer.issue_add(issue).deliver | |
310 |
|
|
306 | assert last_email.bcc.include?(user.mail) | |
311 |
|
|
307 | end | |
312 |
|
308 | |||
313 |
|
|
309 | test "#issue_add should not notify watchers not allowed to view the issue" do | |
|
310 | issue = Issue.find(1) | |||
314 |
|
|
311 | user = User.find(9) | |
315 |
|
|
312 | Watcher.create!(:watchable => issue, :user => user) | |
316 |
|
|
313 | Role.non_member.remove_permission!(:view_issues) | |
317 |
|
|
314 | assert Mailer.issue_add(issue).deliver | |
318 |
|
|
315 | assert !last_email.bcc.include?(user.mail) | |
319 |
|
|
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 |
|
|
71 | end | |
82 |
|
72 | |||
83 |
|
|
73 | test "like scope should search firstname" do | |
84 |
|
|
74 | results = Principal.like('john') | |
85 |
|
75 | |||
86 |
|
|
76 | assert results.any? | |
87 |
|
|
77 | assert results.all? {|u| u.firstname.match(/john/i) } | |
88 |
|
|
78 | end | |
89 |
|
79 | |||
90 |
|
|
80 | test "like scope should search lastname" do | |
91 |
|
|
81 | results = Principal.like('smi') | |
92 |
|
82 | |||
93 |
|
|
83 | assert results.any? | |
94 |
|
|
84 | assert results.all? {|u| u.lastname.match(/smi/i) } | |
95 |
|
|
85 | end | |
96 |
|
86 | |||
97 |
|
|
87 | test "like scope should search mail" do | |
98 |
|
|
88 | results = Principal.like('somenet') | |
99 |
|
89 | |||
100 |
|
|
90 | assert results.any? | |
101 |
|
|
91 | assert results.all? {|u| u.mail.match(/somenet/i) } | |
102 |
|
|
92 | end | |
103 |
|
93 | |||
104 | should "search mail" do |
|
94 | test "like scope should search firstname and lastname" do | |
105 |
|
|
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 |
|
|
97 | assert_equal 1, results.count | |
115 |
|
|
98 | assert_equal User.find(2), results.first | |
116 |
|
|
99 | end | |
117 |
|
100 | |||
118 |
|
|
101 | test "like scope should search lastname and firstname" do | |
119 |
|
|
102 | results = Principal.like('smith joh') | |
120 |
|
103 | |||
121 |
|
|
104 | assert_equal 1, results.count | |
122 |
|
|
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 |
|
|
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 |
|
|
443 | end | |
448 |
|
444 | |||
449 |
|
|
445 | test "#rolled_up_versions should include versions for a subproject" do | |
450 |
|
|
446 | project = Project.generate! | |
451 | @subproject.set_parent!(@project) |
|
447 | parent_version_1 = Version.generate!(:project => project) | |
452 |
|
|
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 |
|
|
452 | assert_same_elements [ | |
455 |
|
|
453 | parent_version_1, | |
456 |
|
|
454 | parent_version_2, | |
457 |
|
|
455 | subproject_version | |
458 |
|
|
456 | ], project.rolled_up_versions | |
459 |
|
|
457 | end | |
460 |
|
458 | |||
461 |
|
|
459 | test "#rolled_up_versions should include versions for a sub-subproject" do | |
462 |
|
|
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 |
|
|
463 | subproject = Project.generate_with_parent!(project) | |
466 |
|
|
464 | sub_subproject = Project.generate_with_parent!(subproject) | |
467 |
|
465 | sub_subproject_version = Version.generate!(:project => sub_subproject) | ||
468 |
|
|
466 | project.reload | |
469 |
|
467 | |||
470 |
|
|
468 | assert_same_elements [ | |
471 |
|
|
469 | parent_version_1, | |
472 |
|
|
470 | parent_version_2, | |
473 |
|
|
471 | sub_subproject_version | |
474 |
|
|
472 | ], project.rolled_up_versions | |
475 |
|
|
473 | end | |
476 |
|
474 | |||
477 |
|
|
475 | test "#rolled_up_versions should only check active projects" do | |
478 |
|
|
476 | project = Project.generate! | |
479 | @subproject.set_parent!(@project) |
|
477 | parent_version_1 = Version.generate!(:project => project) | |
480 |
|
|
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 |
|
|
481 | assert subproject.archive | |
|
482 | project.reload | |||
484 |
|
483 | |||
485 |
|
|
484 | assert !subproject.active? | |
486 |
|
|
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 |
|
|
613 | @project = Project.find(1) | |
617 | end |
|
|||
618 |
|
||||
619 | should "define module by names and preserve ids" do |
|
|||
620 |
|
|
614 | # Remove one module | |
621 |
|
|
615 | modules = @project.enabled_modules.slice(0..-2) | |
622 |
|
|
616 | assert modules.any? | |
@@ -628,7 +622,8 class ProjectTest < ActiveSupport::TestCase | |||||
628 |
|
|
622 | assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort | |
629 |
|
|
623 | end | |
630 |
|
624 | |||
631 |
|
|
625 | test "enabled_modules should enable a module" do | |
|
626 | @project = Project.find(1) | |||
632 |
|
|
627 | @project.enabled_module_names = [] | |
633 |
|
|
628 | @project.reload | |
634 |
|
|
629 | assert_equal [], @project.enabled_module_names | |
@@ -643,7 +638,8 class ProjectTest < ActiveSupport::TestCase | |||||
643 |
|
|
638 | assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names | |
644 |
|
|
639 | end | |
645 |
|
640 | |||
646 |
|
|
641 | test "enabled_modules should disable a module" do | |
|
642 | @project = Project.find(1) | |||
647 |
|
|
643 | #with string | |
648 |
|
|
644 | assert @project.enabled_module_names.include?("issue_tracking") | |
649 |
|
|
645 | @project.disable_module!("issue_tracking") | |
@@ -657,7 +653,6 class ProjectTest < ActiveSupport::TestCase | |||||
657 |
|
|
653 | @project.disable_module!(first_module) | |
658 |
|
|
654 | assert ! @project.reload.enabled_module_names.include?(first_module.name) | |
659 |
|
|
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