Skip to content

Commit f4eebf2

Browse files
Merge branch '14-box-get-relation-tests' into 'dev'
Test Box.getRelationEntities and related, add docs and enforce types. Closes #14 See merge request objectbox/objectbox-java!22
2 parents dd1a637 + 1f3a913 commit f4eebf2

File tree

2 files changed

+74
-11
lines changed

2 files changed

+74
-11
lines changed

objectbox-java/src/main/java/io/objectbox/Box.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -642,19 +642,33 @@ public long[] internalGetRelationIds(int sourceEntityId, int relationId, long ke
642642
}
643643
}
644644

645-
public List<T> getRelationEntities(RelationInfo relationInfo, long id) {
645+
/**
646+
* Given a ToMany relation and the ID of a source entity gets the target entities of the relation from their box,
647+
* for example {@code orderBox.getRelationEntities(Customer_.orders, customer.getId())}.
648+
*/
649+
public List<T> getRelationEntities(RelationInfo<?, T> relationInfo, long id) {
646650
return internalGetRelationEntities(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, false);
647651
}
648652

649-
public List<T> getRelationBacklinkEntities(RelationInfo relationInfo, long id) {
653+
/**
654+
* Given a ToMany relation and the ID of a target entity gets all source entities pointing to this target entity,
655+
* for example {@code customerBox.getRelationEntities(Customer_.orders, order.getId())}.
656+
*/
657+
public List<T> getRelationBacklinkEntities(RelationInfo<T, ?> relationInfo, long id) {
650658
return internalGetRelationEntities(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, true);
651659
}
652660

653-
public long[] getRelationIds(RelationInfo relationInfo, long id) {
661+
/**
662+
* Like {@link #getRelationEntities(RelationInfo, long)}, but only returns the IDs of the target entities.
663+
*/
664+
public long[] getRelationIds(RelationInfo<?, T> relationInfo, long id) {
654665
return internalGetRelationIds(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, false);
655666
}
656667

657-
public long[] getRelationBacklinkIds(RelationInfo relationInfo, long id) {
668+
/**
669+
* Like {@link #getRelationBacklinkEntities(RelationInfo, long)}, but only returns the IDs of the source entities.
670+
*/
671+
public long[] getRelationBacklinkIds(RelationInfo<T, ?> relationInfo, long id) {
658672
return internalGetRelationIds(relationInfo.sourceInfo.getEntityId(), relationInfo.relationId, id, true);
659673
}
660674

tests/objectbox-java-test/src/test/java/io/objectbox/relation/ToManyStandaloneTest.java

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,14 @@
1616

1717
package io.objectbox.relation;
1818

19+
import io.objectbox.Cursor;
20+
import io.objectbox.InternalAccess;
1921
import org.junit.Test;
2022

2123
import java.util.ArrayList;
2224
import java.util.Collections;
2325
import java.util.List;
2426

25-
import io.objectbox.Cursor;
26-
import io.objectbox.InternalAccess;
27-
2827
import static org.junit.Assert.*;
2928

3029
/**
@@ -62,10 +61,6 @@ public void testGet() {
6261
customer = customerBox.get(customer.getId());
6362
final ToMany<Order> toMany = customer.getOrdersStandalone();
6463

65-
// RelationInfo<Order> info = Customer_.ordersStandalone;
66-
// int sourceEntityId = info.sourceInfo.getEntityId();
67-
// assertEquals(2, orderBox.internalGetRelationEntities(sourceEntityId, info.relationId, customer.getId()).size());
68-
6964
assertGetOrder1And2(toMany);
7065
}
7166

@@ -92,6 +87,60 @@ public void run() {
9287
});
9388
}
9489

90+
@Test
91+
public void testGetRelationEntitiesAndIds() {
92+
Customer customer = putCustomerWithOrders(2);
93+
putOrder(null, "order3"); // without customer
94+
Customer customerNoOrders = putCustomer();
95+
96+
// customer with orders
97+
long customerId = customer.getId();
98+
List<Order> ordersActual = orderBox.getRelationEntities(Customer_.ordersStandalone, customerId);
99+
assertEquals(2, ordersActual.size());
100+
assertEquals("order1", ordersActual.get(0).getText());
101+
assertEquals("order2", ordersActual.get(1).getText());
102+
103+
long[] orderIdsActual = orderBox.getRelationIds(Customer_.ordersStandalone, customerId);
104+
assertEquals(2, orderIdsActual.length);
105+
assertEquals(ordersActual.get(0).getId(), orderIdsActual[0]);
106+
assertEquals(ordersActual.get(1).getId(), orderIdsActual[1]);
107+
108+
// customer without orders
109+
long customerNoOrdersId = customerNoOrders.getId();
110+
List<Order> noOrdersActual = orderBox.getRelationEntities(Customer_.ordersStandalone, customerNoOrdersId);
111+
assertEquals(0, noOrdersActual.size());
112+
113+
long[] noOrderIdsActual = orderBox.getRelationIds(Customer_.ordersStandalone, customerNoOrdersId);
114+
assertEquals(0, noOrderIdsActual.length);
115+
}
116+
117+
@Test
118+
public void testGetRelationBacklinkEntitiesAndIds() {
119+
Customer customer = putCustomerWithOrders(2);
120+
Order order1 = customer.getOrdersStandalone().get(0);
121+
putCustomer(); // without orders
122+
Order orderNoCustomer = putOrder(null, "order3");
123+
124+
// order with customer
125+
long order1Id = order1.getId();
126+
List<Customer> customersActual = customerBox.getRelationBacklinkEntities(Customer_.ordersStandalone, order1Id);
127+
assertEquals(1, customersActual.size());
128+
assertEquals(customer.getId(), customersActual.get(0).getId());
129+
130+
long[] customerIdsActual = customerBox.getRelationBacklinkIds(Customer_.ordersStandalone, order1Id);
131+
assertEquals(1, customerIdsActual.length);
132+
assertEquals(customer.getId(), customerIdsActual[0]);
133+
134+
// order without customer
135+
long orderNoCustomerId = orderNoCustomer.getId();
136+
List<Customer> noCustomersActual = customerBox
137+
.getRelationBacklinkEntities(Customer_.ordersStandalone, orderNoCustomerId);
138+
assertEquals(0, noCustomersActual.size());
139+
140+
long[] noCustomerIdsActual = customerBox.getRelationBacklinkIds(Customer_.ordersStandalone, orderNoCustomerId);
141+
assertEquals(0, noCustomerIdsActual.length);
142+
}
143+
95144
@Test
96145
public void testReset() {
97146
Customer customer = putCustomerWithOrders(2);

0 commit comments

Comments
 (0)