Skip to content

Commit 777559f

Browse files
committed
Added more UTs
1 parent 8a06c95 commit 777559f

File tree

3 files changed

+222
-1
lines changed

3 files changed

+222
-1
lines changed

document-store/src/main/java/org/hypertrace/core/documentstore/expression/impl/FlatCollectionDataType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Marker interface for database-specific type metadata used in flat relational collections.
55
*
66
* <p>Implementations of this interface represent the native data types of specific relational
7-
* databases (e.g., PostgreSQL, MySQL, Oracle). Type information enables:
7+
* databases (e.g., PostgreSQL, MySQL, etc). Type information enables:
88
*
99
* <ul>
1010
* <li>Type-safe query generation without runtime type inference

document-store/src/test/java/org/hypertrace/core/documentstore/expression/impl/ArrayIdentifierExpressionTest.java

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
import static org.junit.jupiter.api.Assertions.assertThrows;
56
import static org.junit.jupiter.api.Assertions.assertTrue;
67

78
import java.util.Optional;
@@ -106,4 +107,152 @@ void testOfBytesArrayInequality() {
106107

107108
assertNotEquals(expr1, expr2);
108109
}
110+
111+
@Test
112+
void testOfStringsCreatesInstanceWithTextType() {
113+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofStrings("tags");
114+
115+
assertEquals("tags", expression.getName());
116+
assertTrue(expression.getArrayElementType().isPresent());
117+
assertEquals(PostgresDataType.TEXT, expression.getArrayElementType().get());
118+
assertEquals("text[]", expression.getPostgresArrayTypeString().orElse(null));
119+
}
120+
121+
@Test
122+
void testOfIntsCreatesInstanceWithIntegerType() {
123+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofInts("ids");
124+
125+
assertEquals("ids", expression.getName());
126+
assertTrue(expression.getArrayElementType().isPresent());
127+
assertEquals(PostgresDataType.INTEGER, expression.getArrayElementType().get());
128+
assertEquals("integer[]", expression.getPostgresArrayTypeString().orElse(null));
129+
}
130+
131+
@Test
132+
void testOfLongsCreatesInstanceWithBigintType() {
133+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofLongs("timestamps");
134+
135+
assertEquals("timestamps", expression.getName());
136+
assertTrue(expression.getArrayElementType().isPresent());
137+
assertEquals(PostgresDataType.BIGINT, expression.getArrayElementType().get());
138+
assertEquals("bigint[]", expression.getPostgresArrayTypeString().orElse(null));
139+
}
140+
141+
@Test
142+
void testOfShortsCreatesInstanceWithSmallintType() {
143+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofShorts("counts");
144+
145+
assertEquals("counts", expression.getName());
146+
assertTrue(expression.getArrayElementType().isPresent());
147+
assertEquals(PostgresDataType.SMALLINT, expression.getArrayElementType().get());
148+
assertEquals("smallint[]", expression.getPostgresArrayTypeString().orElse(null));
149+
}
150+
151+
@Test
152+
void testOfFloatsCreatesInstanceWithFloatType() {
153+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofFloats("temperatures");
154+
155+
assertEquals("temperatures", expression.getName());
156+
assertTrue(expression.getArrayElementType().isPresent());
157+
assertEquals(PostgresDataType.FLOAT, expression.getArrayElementType().get());
158+
assertEquals("real[]", expression.getPostgresArrayTypeString().orElse(null));
159+
}
160+
161+
@Test
162+
void testOfDoublesCreatesInstanceWithDoubleType() {
163+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofDoubles("coordinates");
164+
165+
assertEquals("coordinates", expression.getName());
166+
assertTrue(expression.getArrayElementType().isPresent());
167+
assertEquals(PostgresDataType.DOUBLE, expression.getArrayElementType().get());
168+
assertEquals("double precision[]", expression.getPostgresArrayTypeString().orElse(null));
169+
}
170+
171+
@Test
172+
void testOfDecimalsCreatesInstanceWithNumericType() {
173+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofDecimals("prices");
174+
175+
assertEquals("prices", expression.getName());
176+
assertTrue(expression.getArrayElementType().isPresent());
177+
assertEquals(PostgresDataType.NUMERIC, expression.getArrayElementType().get());
178+
assertEquals("numeric[]", expression.getPostgresArrayTypeString().orElse(null));
179+
}
180+
181+
@Test
182+
void testOfBooleansCreatesInstanceWithBooleanType() {
183+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofBooleans("flags");
184+
185+
assertEquals("flags", expression.getName());
186+
assertTrue(expression.getArrayElementType().isPresent());
187+
assertEquals(PostgresDataType.BOOLEAN, expression.getArrayElementType().get());
188+
assertEquals("boolean[]", expression.getPostgresArrayTypeString().orElse(null));
189+
}
190+
191+
@Test
192+
void testOfTimestampsCreatesInstanceWithTimestampType() {
193+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofTimestamps("events");
194+
195+
assertEquals("events", expression.getName());
196+
assertTrue(expression.getArrayElementType().isPresent());
197+
assertEquals(PostgresDataType.TIMESTAMP, expression.getArrayElementType().get());
198+
assertEquals("timestamp[]", expression.getPostgresArrayTypeString().orElse(null));
199+
}
200+
201+
@Test
202+
void testOfTimestampsTzCreatesInstanceWithTimestampTzType() {
203+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofTimestampsTz("eventsTz");
204+
205+
assertEquals("eventsTz", expression.getName());
206+
assertTrue(expression.getArrayElementType().isPresent());
207+
assertEquals(PostgresDataType.TIMESTAMPTZ, expression.getArrayElementType().get());
208+
assertEquals("timestamptz[]", expression.getPostgresArrayTypeString().orElse(null));
209+
}
210+
211+
@Test
212+
void testOfDatesCreatesInstanceWithDateType() {
213+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofDates("dates");
214+
215+
assertEquals("dates", expression.getName());
216+
assertTrue(expression.getArrayElementType().isPresent());
217+
assertEquals(PostgresDataType.DATE, expression.getArrayElementType().get());
218+
assertEquals("date[]", expression.getPostgresArrayTypeString().orElse(null));
219+
}
220+
221+
@Test
222+
void testOfUuidsCreatesInstanceWithUuidType() {
223+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.ofUuids("uuids");
224+
225+
assertEquals("uuids", expression.getName());
226+
assertTrue(expression.getArrayElementType().isPresent());
227+
assertEquals(PostgresDataType.UUID, expression.getArrayElementType().get());
228+
assertEquals("uuid[]", expression.getPostgresArrayTypeString().orElse(null));
229+
}
230+
231+
@Test
232+
void testToPostgresArrayTypeThrowsExceptionForNonPostgresDataType() throws Exception {
233+
// Create an expression with a custom FlatCollectionDataType that is not PostgresDataType
234+
FlatCollectionDataType customType =
235+
new FlatCollectionDataType() {
236+
@Override
237+
public String getType() {
238+
return "custom_type";
239+
}
240+
};
241+
242+
ArrayIdentifierExpression expression = new ArrayIdentifierExpression("test", customType);
243+
244+
// Calling getPostgresArrayTypeString should throw IllegalArgumentException
245+
IllegalArgumentException exception =
246+
assertThrows(IllegalArgumentException.class, () -> expression.getPostgresArrayTypeString());
247+
248+
assertTrue(exception.getMessage().contains("Only PostgresDataType is currently supported"));
249+
}
250+
251+
@Test
252+
void testGetPostgresArrayTypeStringReturnsEmptyForNullType() {
253+
ArrayIdentifierExpression expression = ArrayIdentifierExpression.of("untyped");
254+
255+
Optional<String> arrayType = expression.getPostgresArrayTypeString();
256+
assertTrue(arrayType.isEmpty());
257+
}
109258
}

document-store/src/test/java/org/hypertrace/core/documentstore/expression/impl/IdentifierExpressionTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,78 @@ void testOfBooleanCreatesInstanceWithBooleanType() {
8383
assertEquals(PostgresDataType.BOOLEAN, expression.getFlatCollectionDataType());
8484
}
8585

86+
@Test
87+
void testOfShortCreatesInstanceWithSmallintType() {
88+
IdentifierExpression expression = IdentifierExpression.ofShort("count");
89+
90+
assertEquals("count", expression.getName());
91+
assertEquals(PostgresDataType.SMALLINT, expression.getFlatCollectionDataType());
92+
}
93+
94+
@Test
95+
void testOfFloatCreatesInstanceWithFloatType() {
96+
IdentifierExpression expression = IdentifierExpression.ofFloat("temperature");
97+
98+
assertEquals("temperature", expression.getName());
99+
assertEquals(PostgresDataType.FLOAT, expression.getFlatCollectionDataType());
100+
}
101+
102+
@Test
103+
void testOfDoubleCreatesInstanceWithDoubleType() {
104+
IdentifierExpression expression = IdentifierExpression.ofDouble("latitude");
105+
106+
assertEquals("latitude", expression.getName());
107+
assertEquals(PostgresDataType.DOUBLE, expression.getFlatCollectionDataType());
108+
}
109+
110+
@Test
111+
void testOfDecimalCreatesInstanceWithNumericType() {
112+
IdentifierExpression expression = IdentifierExpression.ofDecimal("price");
113+
114+
assertEquals("price", expression.getName());
115+
assertEquals(PostgresDataType.NUMERIC, expression.getFlatCollectionDataType());
116+
}
117+
118+
@Test
119+
void testOfTimestampCreatesInstanceWithTimestampType() {
120+
IdentifierExpression expression = IdentifierExpression.ofTimestamp("createdAt");
121+
122+
assertEquals("createdAt", expression.getName());
123+
assertEquals(PostgresDataType.TIMESTAMP, expression.getFlatCollectionDataType());
124+
}
125+
126+
@Test
127+
void testOfTimestampTzCreatesInstanceWithTimestampTzType() {
128+
IdentifierExpression expression = IdentifierExpression.ofTimestampTz("updatedAt");
129+
130+
assertEquals("updatedAt", expression.getName());
131+
assertEquals(PostgresDataType.TIMESTAMPTZ, expression.getFlatCollectionDataType());
132+
}
133+
134+
@Test
135+
void testOfDateCreatesInstanceWithDateType() {
136+
IdentifierExpression expression = IdentifierExpression.ofDate("birthDate");
137+
138+
assertEquals("birthDate", expression.getName());
139+
assertEquals(PostgresDataType.DATE, expression.getFlatCollectionDataType());
140+
}
141+
142+
@Test
143+
void testOfUuidCreatesInstanceWithUuidType() {
144+
IdentifierExpression expression = IdentifierExpression.ofUuid("id");
145+
146+
assertEquals("id", expression.getName());
147+
assertEquals(PostgresDataType.UUID, expression.getFlatCollectionDataType());
148+
}
149+
150+
@Test
151+
void testOfJsonbCreatesInstanceWithJsonbType() {
152+
IdentifierExpression expression = IdentifierExpression.ofJsonb("metadata");
153+
154+
assertEquals("metadata", expression.getName());
155+
assertEquals(PostgresDataType.JSONB, expression.getFlatCollectionDataType());
156+
}
157+
86158
@Test
87159
void testMultipleTypedExpressionsAreEqualWithSameNameAndType() {
88160
IdentifierExpression expr1 = IdentifierExpression.ofBytes("file");

0 commit comments

Comments
 (0)