Skip to content

Commit 9ad3055

Browse files
committed
Add JUnit 4 tests for search element model and style classes
Added 100% test coverage for * `ContentSearchElement` * `MetaDataSearchElement` * `MessageFilterToStringStyle` * `SearchElementToStringStyle` * `ContentSearchElementToStringStyle` Signed-off-by: Tony Germano <tony@germano.name>
1 parent d19499d commit 9ad3055

File tree

5 files changed

+309
-0
lines changed

5 files changed

+309
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Tony Germano <tony@germano.name>
3+
4+
package com.mirth.connect.model;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
import java.util.List;
9+
10+
import org.apache.commons.lang3.builder.ToStringBuilder;
11+
import org.junit.Test;
12+
13+
import com.mirth.connect.donkey.model.message.ContentType;
14+
15+
public class ContentSearchElementToStringStyleTest {
16+
17+
@Test
18+
public void testContentCodeFormatting() {
19+
// Test standard known codes
20+
assertContentCodeFormat(ContentType.RAW.getContentTypeCode(), "1(Raw)");
21+
assertContentCodeFormat(ContentType.PROCESSED_RAW.getContentTypeCode(), "2(Processed Raw)");
22+
assertContentCodeFormat(ContentType.TRANSFORMED.getContentTypeCode(), "3(Transformed)");
23+
assertContentCodeFormat(ContentType.PROCESSING_ERROR.getContentTypeCode(), "12(Processing Error)");
24+
}
25+
26+
@Test
27+
public void testUnknownContentCode() {
28+
// Test an integer that doesn't map to a ContentType
29+
var unknownCode = 999;
30+
31+
// Cast to Object to ensure we hit the appendDetail(StringBuffer, String, Object) method
32+
var result = new ToStringBuilder(new Object(), ContentSearchElementToStringStyle.instance())
33+
.append("contentCode", (Object) unknownCode)
34+
.toString();
35+
36+
assertEquals("Object[contentCode=999(UNKNOWN)]", result);
37+
}
38+
39+
@Test
40+
public void testOtherIntegerFields() {
41+
// Ensure that integer fields NOT named "contentCode" are treated normally
42+
var result = new ToStringBuilder(new Object(), ContentSearchElementToStringStyle.instance())
43+
.append("someOtherId", (Object) 1)
44+
.toString();
45+
46+
assertEquals("Object[someOtherId=1]", result);
47+
}
48+
49+
@Test
50+
public void testContentCodeNonInteger() {
51+
// Covers the "else" branch in appendDetail where fieldname is "contentCode"
52+
// but value is NOT an instanceof Integer.
53+
var result = new ToStringBuilder(new Object(), ContentSearchElementToStringStyle.instance())
54+
.append("contentCode", "NotAnInteger")
55+
.toString();
56+
57+
assertEquals("Object[contentCode=\"NotAnInteger\"]", result);
58+
}
59+
60+
@Test
61+
public void testCollectionFormatting() {
62+
var list = List.of("A", "B");
63+
64+
var result = new ToStringBuilder(new Object(), ContentSearchElementToStringStyle.instance())
65+
.append("list", list)
66+
.toString();
67+
68+
assertEquals("Object[list=[\"A\", \"B\"]]", result);
69+
}
70+
71+
private void assertContentCodeFormat(int code, String expectedValue) {
72+
// Cast to Object to ensure we hit the appendDetail(StringBuffer, String, Object) method
73+
var result = new ToStringBuilder(new Object(), ContentSearchElementToStringStyle.instance())
74+
.append("contentCode", (Object) code)
75+
.toString();
76+
77+
assertEquals("Object[contentCode=" + expectedValue + "]", result);
78+
}
79+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Tony Germano <tony@germano.name>
3+
4+
package com.mirth.connect.model;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
import java.time.ZoneId;
9+
import java.time.ZonedDateTime;
10+
import java.util.GregorianCalendar;
11+
import java.util.List;
12+
13+
import org.apache.commons.lang3.builder.ToStringBuilder;
14+
import org.junit.Test;
15+
16+
public class MessageFilterToStringStyleTest {
17+
18+
@Test
19+
public void testDateFormatting() {
20+
var cal = GregorianCalendar.from(ZonedDateTime.of(2023, 10, 25, 14, 30, 0, 0, ZoneId.of("America/New_York")));
21+
22+
var result = new ToStringBuilder(new Object(), MessageFilterToStringStyle.instance())
23+
.append("date", cal)
24+
.toString();
25+
26+
// Format: uuuu-MM-dd HH:mmXXX'['VV']'
27+
var expected = "Object[" + System.lineSeparator() +
28+
" date=2023-10-25 14:30-04:00[America/New_York]" + System.lineSeparator() +
29+
"]";
30+
assertEquals(expected, result);
31+
}
32+
33+
@Test
34+
public void testRegularObjectField() {
35+
var result = new ToStringBuilder(new Object(), MessageFilterToStringStyle.instance())
36+
.append("myField", "myValue")
37+
.toString();
38+
39+
var expected = "Object[" + System.lineSeparator() +
40+
" myField=myValue" + System.lineSeparator() +
41+
"]";
42+
assertEquals(expected, result);
43+
}
44+
45+
@Test
46+
public void testFlattenedFields() {
47+
// "excludedMetaDataIds" is in the flatten set
48+
var ids = List.of("ID1", "ID2");
49+
50+
var result = new ToStringBuilder(new Object(), MessageFilterToStringStyle.instance())
51+
.append("excludedMetaDataIds", ids)
52+
.toString();
53+
54+
var expected = "Object[" + System.lineSeparator() +
55+
" excludedMetaDataIds=[ID1, ID2]" + System.lineSeparator() +
56+
"]";
57+
assertEquals(expected, result);
58+
}
59+
60+
@Test
61+
public void testNonFlattenedCollectionIndentation() {
62+
var list = List.of("Item1", "Item2");
63+
64+
var result = new ToStringBuilder(new Object(), MessageFilterToStringStyle.instance())
65+
.append("regularList", list)
66+
.toString();
67+
68+
var expected = """
69+
Object[
70+
regularList=[
71+
Item1,
72+
Item2
73+
]
74+
]""";
75+
76+
// Normalize line endings for comparison
77+
assertEquals(expected.replace("\n", System.lineSeparator()), result);
78+
}
79+
80+
@Test
81+
public void testNestedArrayIndentation() {
82+
var nested = new Object[] { "Inner" };
83+
var outer = new Object[] { nested };
84+
85+
var result = new ToStringBuilder(new Object(), MessageFilterToStringStyle.instance())
86+
.append("nested", outer)
87+
.toString();
88+
89+
var expected = """
90+
Object[
91+
nested=[
92+
[
93+
Inner
94+
]
95+
]
96+
]""";
97+
98+
assertEquals(expected.replace("\n", System.lineSeparator()), result);
99+
}
100+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Tony Germano <tony@germano.name>
3+
4+
package com.mirth.connect.model;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
import org.apache.commons.lang3.builder.ToStringBuilder;
9+
import org.junit.Test;
10+
11+
public class SearchElementToStringStyleTest {
12+
13+
@Test
14+
public void testStringQuoting() {
15+
var result = new ToStringBuilder(new Object(), SearchElementToStringStyle.instance())
16+
.append("field", "value")
17+
.toString();
18+
19+
assertEquals("Object[field=\"value\"]", result);
20+
}
21+
22+
@Test
23+
public void testNonStringNoQuotes() {
24+
var val = 123;
25+
var result = new ToStringBuilder(new Object(), SearchElementToStringStyle.instance())
26+
.append("number", val)
27+
.toString();
28+
29+
assertEquals("Object[number=123]", result);
30+
}
31+
32+
@Test
33+
public void testNullValue() {
34+
var result = new ToStringBuilder(new Object(), SearchElementToStringStyle.instance())
35+
.append("nullField", (Object) null)
36+
.toString();
37+
38+
assertEquals("Object[nullField=<null>]", result);
39+
}
40+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Tony Germano <tony@germano.name>
3+
4+
package com.mirth.connect.model.filters.elements;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
import java.util.List;
9+
10+
import org.junit.Test;
11+
12+
import com.mirth.connect.donkey.model.message.ContentType;
13+
14+
public class ContentSearchElementTest {
15+
16+
@Test
17+
public void testAccessors() {
18+
var code = 1;
19+
var searches = List.of("search1", "search2");
20+
21+
var element = new ContentSearchElement(code, searches);
22+
23+
assertEquals(code, element.getContentCode());
24+
assertEquals(searches, element.getSearches());
25+
26+
element.setContentCode(2);
27+
assertEquals(2, element.getContentCode());
28+
29+
var newSearches = List.of("new1");
30+
element.setSearches(newSearches);
31+
assertEquals(newSearches, element.getSearches());
32+
}
33+
34+
@Test
35+
public void testToStringIntegration() {
36+
// contentCode 1 = RAW
37+
var element = new ContentSearchElement(ContentType.RAW.getContentTypeCode(), List.of("foo", "bar"));
38+
39+
var stringVal = element.toString();
40+
41+
var expected = "ContentSearchElement[contentCode=1(Raw), searches=[\"foo\", \"bar\"]]";
42+
43+
assertEquals(expected, stringVal);
44+
}
45+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Tony Germano <tony@germano.name>
3+
4+
package com.mirth.connect.model.filters.elements;
5+
6+
import static org.junit.Assert.assertEquals;
7+
8+
import org.junit.Test;
9+
10+
public class MetaDataSearchElementTest {
11+
12+
@Test
13+
public void testAccessors() {
14+
var element = new MetaDataSearchElement("col", "=", "val", true);
15+
16+
assertEquals("col", element.getColumnName());
17+
assertEquals("=", element.getOperator());
18+
assertEquals("val", element.getValue());
19+
assertEquals(true, element.getIgnoreCase());
20+
21+
element.setColumnName("col2");
22+
assertEquals("col2", element.getColumnName());
23+
24+
element.setOperator("!=");
25+
assertEquals("!=", element.getOperator());
26+
27+
element.setValue(100);
28+
assertEquals(100, element.getValue());
29+
30+
element.setIgnoreCase(false);
31+
assertEquals(false, element.getIgnoreCase());
32+
}
33+
34+
@Test
35+
public void testToStringIntegration() {
36+
var element = new MetaDataSearchElement("MyCol", "EQUALS", "MyVal", true);
37+
38+
var stringVal = element.toString();
39+
40+
// ReflectionToStringBuilder sorts fields by name
41+
var expected = "MetaDataSearchElement[columnName=\"MyCol\",ignoreCase=true,operator=\"EQUALS\",value=\"MyVal\"]";
42+
43+
assertEquals(expected, stringVal);
44+
}
45+
}

0 commit comments

Comments
 (0)