package se.ginkou.database;
import static org.junit.Assert.*;
import java.sql.SQLException;
import java.util.List;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import se.ginkou.Account;
import se.ginkou.Transaction;
public class SQLiteDBTest {
private SQLiteDB db;
private Transaction[] randomT;
private Account account;
private Account account2;
@Before
public void setUp() {
db = SQLiteDB.getDB("test.db");
db.clear();
randomT = randomTransactions();
account = new Account(26762537, "Testaccount");
account2 = new Account(26762578, "Testaccount2");
}
@Test
public void addTransactions() throws SQLException, ClassNotFoundException {
db.addTransactions(randomT);
List<Transaction> result = db.getTransactions("select * from transactions");
assertEquals(randomT.length, result.size());
for (int i = 0; i < randomT.length; i++) {
assertEquals(randomT[i], result.get(i));
}
assertEquals(randomT.length, db.sizeTransactions());
db.clearAllTransactions();
int numberOfTransactions = db.getTransactions("SELECT * FROM transactions").size();
assertEquals(0, numberOfTransactions);
}
@Test
public void addAccount() {
db.addAccount(account);
List<Account> result = db.getAccounts();
assertEquals(result.size(), 1);
assertEquals(account, result.get(0));
}
@Test
public void clearAllTransactionsFrom() {
DateTime before = new DateTime("2012-04-23");
DateTime after = new DateTime("2012-04-30");
DateTime onDate = new DateTime("2012-04-27");
db.addTransaction(new Transaction(
account,
before,
"before transaction",
(double)(100)));
db.addTransaction(new Transaction(
account,
onDate,
"ondate transaction",
(double)(100)));
db.addTransaction(new Transaction(
account,
after,
"after transaction",
(double)(100)));
db.addTransaction(new Transaction(
account2,
before,
"before transaction",
(double)(100)));
db.addTransaction(new Transaction(
account2,
onDate,
"ondate transaction",
(double)(100)));
db.addTransaction(new Transaction(
account2,
after,
"after transaction",
(double)(100)));
assertEquals(6, db.sizeTransactions());
db.clearAllTransactionsFrom(new DateTime(), account);
assertEquals(6, db.sizeTransactions());
db.clearAllTransactionsFrom(after, account);
assertEquals(5, db.sizeTransactions());
db.clearAllTransactionsFrom(onDate, account);
assertEquals(4, db.sizeTransactions());
db.clearAllTransactionsFrom(before, account2);
assertEquals(1, db.sizeTransactions());
db.clearAllTransactionsFrom(before, account);
assertEquals(0, db.sizeTransactions());
//db.addTransactions(dummyTransactions());
}
@Test
public void sizeOfResult() {
db.addTransactions(randomTransactions());
assertEquals(10, db.sizeTransactions());
assertEquals(10, db.sizeOfResult("SELECT * FROM transactions"));
}
private Transaction[] randomTransactions() {
Transaction[] transactions = new Transaction[10];
for (int i = 0; i < 10; i++) {
transactions[i] = new Transaction(
new Account(51232897892L, null),
new DateTime(),
"Test transaction " + i,
(double)(i*2000 + i*37));
}
return transactions;
}
}