Add tests

This commit is contained in:
2021-07-14 20:20:52 +02:00
parent 4ff30e1201
commit 4ad69238c7
2 changed files with 93 additions and 3 deletions

View File

@@ -60,14 +60,14 @@ class Requester(
fun getFunction(name: String): Function { fun getFunction(name: String): Function {
if (functions[name] === null) { if (functions[name] === null) {
throw Exception("No function defined for $name") throw NoFunctionDefined(name)
} }
return functions[name]!! return functions[name]!!
} }
fun getQuery(path: String): Query { fun getQuery(path: String): Query {
if (queries[path] === null) { if (queries[path] === null) {
throw Exception("No query defined in $path") throw NoQueryDefined(path)
} }
return queries[path]!! return queries[path]!!
} }
@@ -107,4 +107,7 @@ class Requester(
return req return req
} }
} }
class NoFunctionDefined(name: String) : Exception("No function defined for $name")
class NoQueryDefined(path: String) : Exception("No query defined in $path")
} }

View File

@@ -2,15 +2,48 @@ package fr.postgresjson
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import fr.postgresjson.connexion.Requester.NoFunctionDefined
import fr.postgresjson.connexion.Requester.NoQueryDefined
import fr.postgresjson.entity.UuidEntity import fr.postgresjson.entity.UuidEntity
import org.junit.Assert import org.junit.Assert
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertThrows
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import java.util.UUID import java.util.UUID
class RequesterTest : TestAbstract() { class RequesterTest : TestAbstract() {
class ObjTest(val name: String, id: UUID = UUID.fromString("5623d902-3067-42f3-bfd9-095dbb12c29f")) : UuidEntity(id) class ObjTest(val name: String, id: UUID = UUID.fromString("5623d902-3067-42f3-bfd9-095dbb12c29f")) : UuidEntity(id)
@Test
fun `function toString`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI()
val name: String = Requester(connection)
.addFunction(resources)
.getFunction("test_function")
.name
assertEquals("test_function", name)
}
@Test
fun `add function as string`() {
val sql = """
CREATE OR REPLACE FUNCTION test_function (name text default 'plop', IN hi text default 'hello', out result json)
LANGUAGE plpgsql
AS
$$
BEGIN
result = json_build_object('id', '457daad5-4f1b-4eb7-80ec-6882adb8cc7d', 'name', name);
END;
$$
""".trimIndent()
val name: String = Requester(connection)
.addFunction(sql)
.getFunction("test_function")
.name
assertEquals("test_function", name)
}
@Test @Test
fun `get query from file`() { fun `get query from file`() {
val resources = this::class.java.getResource("/sql/query").toURI() val resources = this::class.java.getResource("/sql/query").toURI()
@@ -23,6 +56,36 @@ class RequesterTest : TestAbstract() {
assertEquals(objTest.name, "test") assertEquals(objTest.name, "test")
} }
@Test
fun `get query from file with wrong name throw exception`() {
val resources = this::class.java.getResource("/sql/query").toURI()
assertThrows(NoQueryDefined::class.java) {
Requester(connection)
.addQuery(resources)
.getQuery("wrongName")
}
}
@Test
fun `get queries from file`() {
val resources = this::class.java.getResource("/sql/query").toURI()
val name: String = Requester(connection)
.addQuery(resources)
.getQueries()[0].name
assertEquals(name, "DeleteTest")
}
@Test
fun `get function from file with wrong name throw exception`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI()
assertThrows(NoFunctionDefined::class.java) {
Requester(connection)
.addFunction(resources)
.getFunction("wrongName")
}
}
@Test @Test
fun `get function from file`() { fun `get function from file`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI() val resources = this::class.java.getResource("/sql/function/Test").toURI()
@@ -91,7 +154,7 @@ class RequesterTest : TestAbstract() {
} }
@Test @Test
fun `call selectOne on function with object`() { fun `call selectOne on function with object and named argument`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI() val resources = this::class.java.getResource("/sql/function/Test").toURI()
val obj2 = ObjTest("original") val obj2 = ObjTest("original")
val obj: ObjTest = Requester(connection) val obj: ObjTest = Requester(connection)
@@ -103,6 +166,30 @@ class RequesterTest : TestAbstract() {
assertEquals("original", obj2.name) assertEquals("original", obj2.name)
} }
@Test
fun `call selectOne on function with object`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI()
val obj2 = ObjTest("original")
val obj: ObjTest = Requester(connection)
.addFunction(resources)
.getFunction("test_function_object")
.selectOne(obj2)!!
assertEquals("changedName", obj.name)
assertEquals("original", obj2.name)
}
@Test
fun `call selectOne on function with object and no arguments`() {
val resources = this::class.java.getResource("/sql/function/Test").toURI()
val obj: ObjTest = Requester(connection)
.addFunction(resources)
.getFunction("test_function")
.selectOne()!!
assertEquals("plop", obj.name)
}
@Test @Test
fun `call selectOne on query`() { fun `call selectOne on query`() {
val resources = this::class.java.getResource("/sql/query").toURI() val resources = this::class.java.getResource("/sql/query").toURI()