Skip to content

Commit 8502aeb

Browse files
Test flex map queries.
1 parent e7a587e commit 8502aeb

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package io.objectbox.query;
2+
3+
import io.objectbox.TestEntity;
4+
import io.objectbox.TestEntity_;
5+
import org.junit.Test;
6+
7+
import java.util.Arrays;
8+
import java.util.HashMap;
9+
import java.util.List;
10+
import java.util.Map;
11+
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertThrows;
14+
import static org.junit.Assert.assertTrue;
15+
16+
public class FlexQueryTest extends AbstractQueryTest {
17+
18+
private TestEntity createFlexMapEntity(String s, boolean b, long l, float f, double d) {
19+
TestEntity entity = new TestEntity();
20+
Map<String, Object> map = new HashMap<>();
21+
map.put(s + "-string", s);
22+
map.put(s + "-boolean", b);
23+
map.put(s + "-long", l);
24+
map.put(s + "-float", f);
25+
map.put(s + "-double", d);
26+
map.put(s + "-list", Arrays.asList(s, b, l, f, d));
27+
Map<String, Object> embeddedMap = new HashMap<>();
28+
embeddedMap.put("embedded-key", "embedded-value");
29+
map.put(s + "-map", embeddedMap);
30+
entity.setStringObjectMap(map);
31+
return entity;
32+
}
33+
34+
@Test
35+
public void contains_stringObjectMap() {
36+
// Note: map keys and values can not be null, so no need to test. See FlexMapConverterTest.
37+
box.put(
38+
createFlexMapEntity("banana", true, -1L, 1.3f, -1.4d),
39+
createFlexMapEntity("banana milk shake", false, 1L, -1.3f, 1.4d)
40+
);
41+
42+
// contains throws when used with flex property.
43+
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
44+
() -> box.query(TestEntity_.stringObjectMap.contains("banana-string")));
45+
assertEquals("Property type is neither a string nor array of strings: Flex", exception.getMessage());
46+
47+
// containsElement only matches if key is equal.
48+
assertContainsKey("banana-string");
49+
assertContainsKey("banana-boolean");
50+
assertContainsKey("banana-long");
51+
assertContainsKey("banana-float");
52+
assertContainsKey("banana-double");
53+
assertContainsKey("banana-list");
54+
assertContainsKey("banana-map");
55+
56+
// containsKeyValue only matches if key and value is equal.
57+
assertContainsKeyValue("banana-string", "banana");
58+
assertContainsKeyValue("banana-long", -1L);
59+
// containsKeyValue only supports strings and integers.
60+
61+
// setParameters works with strings and integers.
62+
Query<TestEntity> setParamQuery = box.query(
63+
TestEntity_.stringObjectMap.containsKeyValue("", "").alias("contains")
64+
).build();
65+
assertEquals(0, setParamQuery.find().size());
66+
67+
setParamQuery.setParameters(TestEntity_.stringObjectMap, "banana-string", "banana");
68+
List<TestEntity> setParamResults = setParamQuery.find();
69+
assertEquals(1, setParamResults.size());
70+
assertTrue(setParamResults.get(0).getStringObjectMap().containsKey("banana-string"));
71+
72+
setParamQuery.setParameters("contains", "banana milk shake-long", Long.toString(1));
73+
setParamResults = setParamQuery.find();
74+
assertEquals(1, setParamResults.size());
75+
assertTrue(setParamResults.get(0).getStringObjectMap().containsKey("banana milk shake-long"));
76+
}
77+
78+
private void assertContainsKey(String key) {
79+
List<TestEntity> results = box.query(
80+
TestEntity_.stringObjectMap.containsElement(key)
81+
).build().find();
82+
assertEquals(1, results.size());
83+
assertTrue(results.get(0).getStringObjectMap().containsKey(key));
84+
}
85+
86+
private void assertContainsKeyValue(String key, Object value) {
87+
List<TestEntity> results = box.query(
88+
TestEntity_.stringObjectMap.containsKeyValue(key, value.toString())
89+
).build().find();
90+
assertEquals(1, results.size());
91+
assertTrue(results.get(0).getStringObjectMap().containsKey(key));
92+
assertEquals(value, results.get(0).getStringObjectMap().get(key));
93+
}
94+
}

0 commit comments

Comments
 (0)