Newer
Older
simple-database-kotlin / test / nl / astraeus / database / TestQueries.kt
rnentjes on 18 Oct 2015 1 KB First commit
package nl.astraeus.database

import nl.astraeus.database.annotations.Id
import nl.astraeus.database.jdbc.ConnectionPool
import nl.astraeus.database.jdbc.ConnectionProvider
import org.junit.After
import org.junit.Before
import org.junit.Test
import java.sql.Connection
import java.sql.DriverManager
import java.sql.SQLException
import kotlin.test.assertTrue

/**
 * User: rnentjes
 * Date: 18-10-15
 * Time: 17:00
 */

class User(@Id var id: Long = 0, var name: String, var email: String) {
    constructor(): this(0, "", "")

    constructor(name: String, email: String): this(0, name, email)
}

class UserDao(): Dao<User>(User::class.java)

class TestQueries {
    @Before fun setUp() {
        DdlMapping.get().setExecuteDDLUpdates(true)

        ConnectionPool.get().setConnectionProvider(object : ConnectionProvider {
            override fun getConnection(): Connection {
                try {
                    Class.forName("org.h2.Driver")

                    val connection = DriverManager.getConnection("jdbc:h2:mem:TestQueries", "sa", "")
                    connection.autoCommit = false

                    return connection
                } catch (e: ClassNotFoundException) {
                    throw IllegalStateException(e)
                } catch (e: SQLException) {
                    throw IllegalStateException(e)
                }
            }
        })
    }

    @After fun tearDown() {
        // tear down the test case
    }

    @Test fun testWhere() {
        var dao = UserDao()

        transaction {
            dao.insert(User("Rien", "info@nentjes.com"))
            dao.insert(User("Piet", "piet@nentjes.com"))

            var found = dao.where("name = ?", "Rien")

            assertTrue {
                found.size() == 1
            }

            for(user in found) {
                println("Found: ${user.name}")
            }
        }
    }

}