package org.javalite.activejdbc;
import org.javalite.activejdbc.test.ActiveJDBCTest;
import org.javalite.activejdbc.test_models.Item;
import org.junit.Test;
/**
* @author Igor Polevoy
*/
public class OptimisticLockingOverrideVersionColumnTest extends ActiveJDBCTest {
@Test
public void shouldSetVersionToOneWhenCreatingNewRecord(){
deleteAndPopulateTable("items");
Item m = new Item();
m.set("item_number", 1);
m.set("item_description", "descr 1");
m.saveIt();
Item m1 = Item.findById(1);
a(m1.get("lock_version")).shouldBeEqual(1);
}
@Test
public void shouldAdvanceVersionWhenRecordIsUpdated(){
deleteAndPopulateTable("items");
Item m = new Item();
m.set("item_number", 1);
m.set("item_description", "descr 1");
m.saveIt();
m = Item.findById(1);
m.set("item_description", "descr 2").saveIt();
a(m.get("lock_version")).shouldBeEqual(2);// this will ensure that the value is updated in the model itself
m = Item.findById(1);
a(m.get("lock_version")).shouldBeEqual(2);
m = Item.findById(1);
m.set("item_description", "descr 3").saveIt();
m = Item.findById(1);
a(m.get("lock_version")).shouldBeEqual(3);
}
@Test(expected = StaleModelException.class)
public void shouldThrowExceptionWhenVersionCollisionHappens(){
deleteAndPopulateTable("items");
Item m = new Item();
m.set("item_number", 1);
m.set("item_description", "descr 2").saveIt();
m.saveIt();
Item m1 = Item.findById(1);
Item m2 = Item.findById(1);
m1.set("item_description", "descr 5").saveIt();
m2.set("item_description", "descr 6").saveIt(); //<<<<================ this will cause the StaleModelException
}
}