Patch #41931
closedFix random failures in IssueRelationTest#test_create_with_initialized_journals due to ambiguous conditions for retrieving the expected detail
Description
The IssueRelationTest#test_create_with_initialized_journals
test fails randomly with the following error:
Failure: IssueRelationTest#test_create_with_initialized_journals_should_create_journals [test/unit/issue_relation_test.rb:220]: Expected: "relation" Actual: "attr" bin/rails test test/unit/issue_relation_test.rb:202
The exact reason for the random failures is unclear, but it is likely related to the order of details in to.journals.last.details
.
Currently, to.journals.last.details
contains three Detail entries in the following order:
property: 'relation', prop_key: 'follows' (expected value)
property: 'attr', prop_key: 'due_date'
property: 'attr', prop_key: 'start_date' (actual value)
As a result, to.journals.last.details.last
does not match the expected Detail in the test.
This behavior appears to be correct. When an IssueRelation with a "precedes" type is created, the handle_issue_order callback updates the due_date and start_date of the related issue. These updates are recorded in the journal, resulting in additional Detail entries.
I have attached the patch for updating the test to verify the presence of the expected Detail without relying on the order. Additionally, the patch includes assertions to ensure that to.journals.last.details
contains changes to due_date and start_date.
diff --git a/test/unit/issue_relation_test.rb b/test/unit/issue_relation_test.rb
index a223fe42c..198dd94ad 100644
--- a/test/unit/issue_relation_test.rb
+++ b/test/unit/issue_relation_test.rb
@@ -202,25 +202,27 @@ class IssueRelationTest < ActiveSupport::TestCase
def test_create_with_initialized_journals_should_create_journals
from = Issue.find(1)
to = Issue.find(2)
- from_journals = from.journals.size
- to_journals = to.journals.size
relation = IssueRelation.new(:issue_from => from, :issue_to => to,
:relation_type => IssueRelation::TYPE_PRECEDES)
relation.init_journals User.find(1)
- assert relation.save
- from.reload
- to.reload
- relation.reload
- assert_equal from.journals.size, (from_journals + 1)
- assert_equal to.journals.size, (to_journals + 1)
- assert_equal 'relation', from.journals.last.details.last.property
- assert_equal 'precedes', from.journals.last.details.last.prop_key
- assert_equal '2', from.journals.last.details.last.value
- assert_nil from.journals.last.details.last.old_value
- assert_equal 'relation', to.journals.last.details.last.property
- assert_equal 'follows', to.journals.last.details.last.prop_key
- assert_equal '1', to.journals.last.details.last.value
- assert_nil to.journals.last.details.last.old_value
+
+ assert_difference(
+ ->{ from.reload.journals.size } => +1,
+ ->{ to.reload.journals.size } => +1
+ ) do
+ assert relation.save
+ end
+
+ from.journals.last.details.then do |details|
+ assert details.exists?(property: 'relation', prop_key: 'precedes', value: '2')
+ end
+
+ to.journals.last.details.then do |details|
+ assert_equal 3, details.count
+ assert details.exists?(property: 'relation', prop_key: 'follows', value: '1', old_value: nil)
+ assert details.exists?(property: 'attr', prop_key: 'due_date')
+ assert details.exists?(property: 'attr', prop_key: 'start_date')
+ end
end
def test_destroy_with_initialized_journals_should_create_journals
Files