package com.w11k.lsql.tests;
import com.w11k.lsql.Row;
import com.w11k.lsql.Table;
import com.w11k.lsql.exceptions.DeleteException;
import com.w11k.lsql.exceptions.UpdateException;
import org.testng.annotations.Test;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
public class RevisionSupportTest extends AbstractLSqlTest {
@Test
public void insertSetsRevision() {
createTable("CREATE TABLE table1 (id SERIAL PRIMARY KEY, age INT, revision INT DEFAULT 0)");
Table table1 = lSql.table("table1");
table1.enableRevisionSupport();
Row row1 = Row.fromKeyVals("age", 1);
table1.insert(row1);
assertNotNull(row1.get("revision"));
}
@Test
public void updateIncreasesRevision() {
createTable("CREATE TABLE table1 (id INTEGER PRIMARY KEY, age INT, revision INT DEFAULT 0)");
Table table1 = lSql.table("table1");
table1.enableRevisionSupport();
Row row = Row.fromKeyVals("id", 1, "age", 1);
table1.insert(row);
int r1 = row.getInt("revision");
table1.save(row);
int r2 = row.getInt("revision");
assertTrue(r1 < r2);
table1.save(row);
int r3 = row.getInt("revision");
assertTrue(r2 < r3);
}
@Test(expectedExceptions = UpdateException.class)
public void updateFailsOnWrongRevision() {
createTable("CREATE TABLE table1 (id INTEGER PRIMARY KEY, age INT, revision INT DEFAULT 0)");
Table table1 = lSql.table("table1");
table1.enableRevisionSupport();
Row row = Row.fromKeyVals("id", 1, "age", 1);
table1.insert(row);
int r1 = row.getInt("revision");
row.put("revision", r1 + 1);
table1.save(row);
}
@Test(expectedExceptions = DeleteException.class)
public void deleteFailsOnWrongRevision() {
createTable("CREATE TABLE table1 (id INTEGER PRIMARY KEY, age INT, revision INT DEFAULT 0)");
Table table1 = lSql.table("table1");
table1.enableRevisionSupport();
Row row = Row.fromKeyVals("id", 1, "age", 1);
table1.insert(row);
int r1 = row.getInt("revision");
row.put("revision", r1 + 1);
table1.delete(row);
}
}