package org.tests.refresh;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.SqlRow;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class TestRefreshWithMany extends BaseTestCase {
@Test
public void test() {
ResetBasicData.reset();
Customer customer = ResetBasicData.createCustomer("refresher", "22 refresh set", "23 fresh", 9);
Ebean.save(customer);
assertEquals(3, customer.getContacts().size());
int rc = Ebean.createSqlUpdate("update o_customer set name = :name where id = :id")
.setParameter("name", "ref-modified")
.setParameter("id", customer.getId())
.execute();
int rc2 = Ebean.createSqlUpdate("update contact set first_name = concat(first_name,'-mod') where customer_id = :id")
.setParameter("id", customer.getId())
.execute();
assertEquals(1, rc);
assertEquals(3, rc2);
Ebean.refresh(customer);
assertEquals("ref-modified", customer.getName());
assertEquals(3, customer.getContacts().size());
assertEquals(true, customer.getContacts().get(0).getFirstName().endsWith("-mod"));
// now try again when the bean is fully loaded
Customer customer1 = Ebean.find(Customer.class)
.fetch("contacts")
.setId(customer.getId())
.findUnique();
int rcb1 = Ebean.createSqlUpdate("update o_customer set name = :name where id = :id")
.setParameter("name", "ref-modified-again")
.setParameter("id", customer.getId())
.execute();
int rcb2 = Ebean.createSqlUpdate("update contact set first_name = :first, last_name='foo' where customer_id = :id")
.setParameter("id", customer.getId())
.setParameter("first", "-alt")
.execute();
List<SqlRow> sqlRows = Ebean.createSqlQuery("select id, first_name, last_name from contact").findList();
for (SqlRow sqlRow : sqlRows) {
sqlRow.get("id");
sqlRow.get("first_name");
sqlRow.get("last_name");
}
assertEquals(1, rcb1);
assertEquals(3, rcb2);
Ebean.refresh(customer1);
assertEquals("ref-modified-again", customer1.getName());
assertEquals(3, customer1.getContacts().size());
for (Contact contact : customer1.getContacts()) {
contact.getId();
contact.getFirstName();
contact.getLastName();
}
assertEquals(true, customer1.getContacts().get(0).getFirstName().endsWith("-alt"));
}
}