package org.javers.core.examples;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.diff.Change;
import org.javers.core.diff.changetype.NewObject;
import org.javers.core.diff.changetype.ValueChange;
import org.javers.core.examples.model.Person;
import org.javers.core.metamodel.object.CdoSnapshot;
import org.javers.repository.jql.QueryBuilder;
import org.junit.Test;
import java.util.List;
import static org.fest.assertions.api.Assertions.assertThat;
public class BasicCommitExample {
@Test
public void shouldCommitToJaversRepository() {
//given:
// prepare JaVers instance. By default, JaVers uses InMemoryRepository,
// it's useful for testing
Javers javers = JaversBuilder.javers().build();
// init your data
Person robert = new Person("bob", "Robert Martin");
// and persist initial commit
javers.commit("user", robert);
// do some changes
robert.setName("Robert C.");
// and persist another commit
javers.commit("user", robert);
// when:
List<CdoSnapshot> snapshots = javers.findSnapshots(
QueryBuilder.byInstanceId("bob", Person.class).build());
// then:
// there should be two Snapshots with Bob's state
assertThat(snapshots).hasSize(2);
}
@Test
public void shouldListStateHistory() {
// given:
// commit some changes
Javers javers = JaversBuilder.javers().build();
Person robert = new Person("bob", "Robert Martin");
javers.commit("user", robert);
robert.setName("Robert C.");
javers.commit("user", robert);
// when:
// list state history - last 10 snapshots
List<CdoSnapshot> snapshots = javers.findSnapshots(
QueryBuilder.byInstanceId("bob", Person.class).limit(10).build());
// then:
// there should be two Snapshots with Bob's state
assertThat(snapshots).hasSize(2);
CdoSnapshot newState = snapshots.get(0);
CdoSnapshot oldState = snapshots.get(1);
assertThat(oldState.getPropertyValue("name")).isEqualTo("Robert Martin");
assertThat(newState.getPropertyValue("name")).isEqualTo("Robert C.");
}
@Test
public void shouldListChangeHistory() {
// given:
// commit some changes
Javers javers = JaversBuilder.javers().build();
Person robert = new Person("bob", "Robert Martin");
javers.commit("user", robert);
robert.setName("Robert C.");
javers.commit("user", robert);
// when:
// list change history
List<Change> changes = javers.findChanges(
QueryBuilder.byInstanceId("bob", Person.class).build());
// then:
// there should be one ValueChange with Bob's firstName
assertThat(changes).hasSize(1);
ValueChange change = (ValueChange) changes.get(0);
assertThat(change.getPropertyName()).isEqualTo("name");
assertThat(change.getLeft()).isEqualTo("Robert Martin");
assertThat(change.getRight()).isEqualTo("Robert C.");
}
}