package org.atteo.moonshine.orientdb;
import com.google.inject.Inject;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import org.atteo.moonshine.tests.MoonshineConfiguration;
import org.atteo.moonshine.tests.MoonshineTest;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link OrientDb} service.
*/
@MoonshineConfiguration(oneRequestPerClass = true, fromString = ""
+ "<config>"
+ " <orientdb>"
+ " </orientdb>"
+ "</config>"
)
public class OrientDbTest extends MoonshineTest {
@Inject
ODatabaseDocumentTx db;
private final static String PAPER = "Paper";
@Test
public void shouldInjectDb() {
assertThat(db).isNotNull();
}
@Before
public void before() {
if (!db.exists()) {
db.create();
}
}
@Test
public void shouldInsertAndSelect() {
OClass paper = db.getMetadata().getSchema().createClass(PAPER);
assertThat(paper).isNotNull();
ODocument fooPaper = db.newInstance(PAPER);
ODocument barPaper = db.newInstance(PAPER);
db.begin();
fooPaper.fromJSON(getPaper("foo", "foo paper"));
barPaper.fromJSON(getPaper("bar", "bar paper"));
fooPaper.save();
barPaper.save();
db.commit();
List<ODocument> documents = db.query(new OSQLSynchQuery<ODocument>(String.format("select * from %s", PAPER)));
assertThat(documents.size()).isEqualTo(2);
assertThat(documents).contains(fooPaper, barPaper);
}
private String getPaper(String name, String desc) {
return String.format("{\"name\": \"%s\", \"description\": \"%s\"}", name, desc);
}
}