@@ -57,6 +57,43 @@ public void setupMetrics() throws IOException {
5757 Metric2 = createEntity (createMetric , ADMIN_AUTH_HEADERS );
5858 }
5959
60+ @ Test
61+ void test_duplicateRelatedMetricsIssue () throws IOException {
62+ CreateMetric createMetric1 = createRequest ("test_metric_duplicate_1" , "" , "" , null );
63+ Metric metric1 = createEntity (createMetric1 , ADMIN_AUTH_HEADERS );
64+
65+ CreateMetric createMetric2 = createRequest ("test_metric_duplicate_2" , "" , "" , null );
66+ Metric metric2 = createEntity (createMetric2 , ADMIN_AUTH_HEADERS );
67+
68+ Metric originalMetric2 = getMetric (metric2 .getId (), "*" , ADMIN_AUTH_HEADERS );
69+ String origJson = JsonUtils .pojoToJson (originalMetric2 );
70+
71+ originalMetric2 .setRelatedMetrics (List .of (metric1 .getEntityReference ()));
72+ patchEntity (originalMetric2 .getId (), origJson , originalMetric2 , ADMIN_AUTH_HEADERS );
73+
74+ Metric updatedMetric2 = getMetric (metric2 .getId (), "relatedMetrics" , ADMIN_AUTH_HEADERS );
75+
76+ Assertions .assertNotNull (updatedMetric2 .getRelatedMetrics ());
77+ Assertions .assertEquals (
78+ 1 ,
79+ updatedMetric2 .getRelatedMetrics ().size (),
80+ "Expected only 1 related metric, but found "
81+ + updatedMetric2 .getRelatedMetrics ().size ()
82+ + ". Related metrics: "
83+ + updatedMetric2 .getRelatedMetrics ());
84+ Assertions .assertEquals (metric1 .getId (), updatedMetric2 .getRelatedMetrics ().getFirst ().getId ());
85+
86+ // Also verify that metric1 now has metric2 as a related metric (bidirectional)
87+ Metric updatedMetric1 = getMetric (metric1 .getId (), "relatedMetrics" , ADMIN_AUTH_HEADERS );
88+ Assertions .assertNotNull (updatedMetric1 .getRelatedMetrics ());
89+ Assertions .assertEquals (
90+ 1 ,
91+ updatedMetric1 .getRelatedMetrics ().size (),
92+ "Expected only 1 related metric for the reverse relationship, but found "
93+ + updatedMetric1 .getRelatedMetrics ().size ());
94+ Assertions .assertEquals (metric2 .getId (), updatedMetric1 .getRelatedMetrics ().getFirst ().getId ());
95+ }
96+
6097 @ Test
6198 void patch_MetricEntity () throws IOException {
6299 // Create a new Metric with different fields
@@ -177,6 +214,7 @@ public Metric validateGetWithDifferentFields(Metric entity, boolean byName)
177214 return entity ;
178215 }
179216
217+ @ SuppressWarnings ("unchecked" )
180218 @ Override
181219 public void assertFieldChange (String fieldName , Object expected , Object actual ) {
182220 if (expected != null && actual != null ) {
0 commit comments