mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
213 lines
5.6 KiB
Java
213 lines
5.6 KiB
Java
package io.ebeaninternal.server.transaction;
|
|
|
|
import io.ebean.bean.PersistenceContext;
|
|
import io.ebeaninternal.server.deploy.PersistenceContextUtil;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.tests.model.basic.*;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
class DefaultPersistenceContextTest {
|
|
|
|
private final Customer customer42;
|
|
private final Car car1;
|
|
|
|
DefaultPersistenceContextTest() {
|
|
customer42 = new Customer();
|
|
customer42.setId(42);
|
|
car1 = new Car();
|
|
car1.setId(1);
|
|
}
|
|
|
|
private DefaultPersistenceContext pc() {
|
|
return new DefaultPersistenceContext();
|
|
}
|
|
|
|
private DefaultPersistenceContext pcWith42() {
|
|
DefaultPersistenceContext pc = pc();
|
|
pc.put(Customer.class, 42, customer42);
|
|
return pc;
|
|
}
|
|
|
|
Class<?> root(Class<?> cls) {
|
|
return PersistenceContextUtil.root(cls);
|
|
}
|
|
|
|
@Test
|
|
void put_get_withInheritance() {
|
|
PersistenceContext pc = pc();
|
|
pc.put(root(Vehicle.class), 1, car1);
|
|
|
|
Object found = pc.get(root(Car.class), 1);
|
|
assertThat(found).isSameAs(car1);
|
|
}
|
|
|
|
@Test
|
|
void put_get() {
|
|
PersistenceContext pc = pc();
|
|
pc.put(Customer.class, customer42.getId(), customer42);
|
|
|
|
Object found = pc.get(Customer.class, 42);
|
|
assertThat(found).isSameAs(customer42);
|
|
}
|
|
|
|
@Test
|
|
void putIfAbsent_when_absent() {
|
|
PersistenceContext pc = pc();
|
|
Object existing = pc.putIfAbsent(Customer.class, customer42.getId(), customer42);
|
|
|
|
assertThat(existing).isNull();
|
|
}
|
|
|
|
@Test
|
|
void putIfAbsent_when_notAbsent() {
|
|
PersistenceContext pc = pcWith42();
|
|
Object existing = pc.putIfAbsent(Customer.class, customer42.getId(), new Customer());
|
|
|
|
assertThat(existing).isSameAs(customer42);
|
|
}
|
|
|
|
@Test
|
|
void get_when_empty() {
|
|
PersistenceContext pc = pc();
|
|
Object found = pc.get(Customer.class, 42);
|
|
assertThat(found).isNull();
|
|
}
|
|
|
|
@Test
|
|
void get_when_there() {
|
|
PersistenceContext pc = pcWith42();
|
|
Object found = pc.get(Customer.class, 42);
|
|
assertThat(found).isSameAs(customer42);
|
|
}
|
|
|
|
@Test
|
|
void getWithOption_when_empty() {
|
|
PersistenceContext pc = pc();
|
|
PersistenceContext.WithOption withOption = pc.getWithOption(Customer.class, 42);
|
|
assertThat(withOption).isNull();
|
|
}
|
|
|
|
@Test
|
|
void getWithOption_when_there() {
|
|
PersistenceContext pc = pcWith42();
|
|
|
|
PersistenceContext.WithOption withOption = pc.getWithOption(Customer.class, 42);
|
|
assertThat(withOption.getBean()).isSameAs(customer42);
|
|
}
|
|
|
|
@Test
|
|
void getWithOption_when_deleted() {
|
|
PersistenceContext pc = pcWith42();
|
|
pc.deleted(Customer.class, 42);
|
|
|
|
PersistenceContext.WithOption withOption = pc.getWithOption(Customer.class, 42);
|
|
assertThat(withOption.isDeleted()).isTrue();
|
|
assertThat(withOption.getBean()).isNull();
|
|
}
|
|
|
|
@Test
|
|
void size_when_empty() {
|
|
PersistenceContext pc = pc();
|
|
assertThat(pc.size(Customer.class)).isEqualTo(0);
|
|
}
|
|
|
|
@Test
|
|
void size_when_some() {
|
|
PersistenceContext pc = pcWith42();
|
|
assertThat(pc.size(Customer.class)).isEqualTo(1);
|
|
}
|
|
|
|
@Test
|
|
void clear() {
|
|
PersistenceContext pc = pcWith42();
|
|
pc.clear();
|
|
assertThat(pc.size(Customer.class)).isEqualTo(0);
|
|
}
|
|
|
|
@Test
|
|
void clearClass() {
|
|
PersistenceContext pc = pcWith42();
|
|
pc.clear(Customer.class);
|
|
assertThat(pc.size(Customer.class)).isEqualTo(0);
|
|
}
|
|
|
|
@Test
|
|
void clearClassAndId() {
|
|
PersistenceContext pc = pcWith42();
|
|
pc.put(Customer.class, 43, new Customer());
|
|
|
|
pc.clear(Customer.class, 42);
|
|
assertThat(pc.size(Customer.class)).isEqualTo(1);
|
|
|
|
pc.clear(Customer.class, 43);
|
|
assertThat(pc.size(Customer.class)).isEqualTo(0);
|
|
}
|
|
|
|
@Test
|
|
void beginIterate() {
|
|
final DefaultPersistenceContext pc = pcWith42();
|
|
final Object origCustomer42 = pc.get(Customer.class, 42);
|
|
|
|
// act
|
|
pc.beginIterate();
|
|
assertThat(pc.size(Customer.class)).isEqualTo(1);
|
|
|
|
// assert same instance (bean effectively transferred to iterator persistence context
|
|
final Object customer42 = pc.get(Customer.class, 42);
|
|
assertThat(customer42).isSameAs(origCustomer42);
|
|
final PersistenceContext.WithOption option = pc.getWithOption(Customer.class, 42);
|
|
assertThat(option.getBean()).isSameAs(origCustomer42);
|
|
pc.endIterate();
|
|
}
|
|
|
|
@Test
|
|
void beginIterate_many() throws InterruptedException {
|
|
DefaultPersistenceContext pc = new DefaultPersistenceContext();
|
|
addCustomers(pc, 1, 100);
|
|
addContacts(pc, 1, 1010);
|
|
assertThat(pc.size(Customer.class)).isEqualTo(100);
|
|
assertThat(pc.size(Contact.class)).isEqualTo(1010);
|
|
|
|
// act
|
|
pc.beginIterate();
|
|
assertThat(pc.size(Customer.class)).isEqualTo(100);
|
|
assertThat(pc.size(Contact.class)).isEqualTo(1010);
|
|
|
|
addCustomers(pc, 200, 100);
|
|
addContacts(pc, 2000, 1010);
|
|
|
|
assertThat(pc.size(Customer.class)).isEqualTo(200);
|
|
assertThat(pc.size(Contact.class)).isEqualTo(2020);
|
|
pc.endIterate();
|
|
|
|
System.gc();
|
|
Thread.sleep(50); // give the GC some time
|
|
|
|
assertThat(pc.size(Customer.class)).isEqualTo(100);
|
|
assertThat(pc.size(Contact.class)).isEqualTo(1010);
|
|
}
|
|
|
|
@Test
|
|
void toString_sillyTest() {
|
|
DefaultPersistenceContext pc = pcWith42();
|
|
assertThat(pc.toString()).contains("org.tests.model.basic.Customer");
|
|
}
|
|
|
|
private void addCustomers(PersistenceContext pc, int start, int loop) {
|
|
for (int i = start; i < start + loop; i++) {
|
|
Customer bean = new Customer();
|
|
bean.setId(i);
|
|
pc.put(Customer.class, i, bean);
|
|
}
|
|
}
|
|
|
|
private void addContacts(PersistenceContext pc, int start, int loop) {
|
|
for (int i = start; i < start + loop; i++) {
|
|
Contact bean = new Contact();
|
|
bean.setId(i);
|
|
pc.put(Contact.class, i, bean);
|
|
}
|
|
}
|
|
}
|