Files
ebean/ebean-test/src/test/java/org/multitenant/partition/MultiTenantPartitionTest.java
T

131 lines
3.5 KiB
Java

package org.multitenant.partition;
import io.ebean.BaseTestCase;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.TenantMode;
import org.ebeantest.LoggedSqlCollector;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class MultiTenantPartitionTest extends BaseTestCase {
private static final String[] names = {"Ace", "Base", "Case", "Dae", "Eva"};
static List<MtTenant> tenants() {
List<MtTenant> tenants = new ArrayList<>();
for (int i = 0; i < 5; i++) {
tenants.add(new MtTenant("ten_"+i, names[i], names[i]+"@foo.com".toLowerCase()));
}
return tenants;
}
private static final Database server = init();
static {
server.saveAll(tenants());
}
@AfterAll
public static void shutdown() {
server.shutdown();
}
@Test
public void start() {
UserContext.set("rob", "ten_1");
LoggedSqlCollector.start();
MtContent content = new MtContent("first title");
server.save(content);
List<String> sql = LoggedSqlCollector.current();
assertSql(sql.get(0)).contains("insert into mt_content (title, body, when_modified, when_created, version, tenant_id) values (?,?,?,?,?,?)");
content.setBody("some body");
server.save(content);
sql = LoggedSqlCollector.current();
assertSql(sql.get(0)).contains("update mt_content set body=?, when_modified=?, version=? where id=? and tenant_id=? and version=?");
server.delete(content);
sql = LoggedSqlCollector.current();
assertSql(sql.get(0)).contains("delete from mt_content where id=? and tenant_id=? and version=?");
LoggedSqlCollector.stop();
}
@Test
public void deleteById() {
UserContext.set("fred", "ten_2");
MtContent content = new MtContent("first title");
server.save(content);
LoggedSqlCollector.start();
int rows = server.delete(MtContent.class, content.getId());
List<String> sql = LoggedSqlCollector.stop();
assertSql(sql.get(0)).contains("delete from mt_content where id=? and tenant_id=?");
assertThat(rows).isEqualTo(1);
rows = server.delete(MtContent.class, 99999);
assertThat(rows).isEqualTo(0);
}
@Test
public void deleteByIds() {
UserContext.set("fred", "ten_2");
MtContent a = newContent("title a");
MtContent b = newContent("title b");
List<Long> ids = Arrays.asList(a.getId(), b.getId(), 99998L);
LoggedSqlCollector.start();
int rows = server.deleteAll(MtContent.class, ids);
assertThat(rows).isEqualTo(2);
List<String> sql = LoggedSqlCollector.stop();
assertSql(sql.get(0)).contains("delete from mt_content where id=? and tenant_id=?");
}
private MtContent newContent(String title) {
MtContent content = new MtContent(title);
server.save(content);
return content;
}
private static Database init() {
DatabaseConfig config = new DatabaseConfig();
config.setName("h2multitenant");
config.loadFromProperties();
config.setDdlGenerate(true);
config.setDdlRun(true);
config.setDdlExtra(false);
config.setRegister(false);
config.setDefaultServer(false);
config.setCurrentTenantProvider(new CurrentTenant());
config.setTenantMode(TenantMode.PARTITION);
config.getClasses().add(MtTenant.class);
config.getClasses().add(MtContent.class);
return DatabaseFactory.create(config);
}
}