Improve generate()

This commit is contained in:
2023-04-05 23:15:17 +02:00
parent ee89ffcb1d
commit 074228807e
3 changed files with 156 additions and 42 deletions

View File

@@ -1,14 +1,103 @@
package fr.postgresjson.functionGenerator
import java.net.URI
import fr.postgresjson.definition.Function
import kotlin.test.assertEquals
import org.junit.jupiter.api.Test
class FunctionGeneratorTest {
private val functionDirectory = this::class.java.getResource("/sql/function/Test")!!.toURI()
private val generator = FunctionGenerator(functionDirectory)
@Test
fun generate() {
val functionDirectory = this::class.java.getResource("/sql/function/Test")!!.toURI()
FunctionGenerator(functionDirectory)
.generate(URI( "./src/test/kotlin/fr/postgresjson/functionGenerator/generated/"))
fun `generate function`() {
val functionSql = """
|create or replace function test_function_object (inout resource json)
|language plpgsql
|as
|$$
|begin
| resource = json_build_object('id', '1e5f5d41-6d14-4007-897b-0ed2616bec96', 'name', 'changedName');
|end;
|$$
""".trimMargin()
val expectedGenerated = """
|package fr.postgresjson.functionGenerator.generated
|
|import com.fasterxml.jackson.core.type.TypeReference
|import fr.postgresjson.connexion.Requester
|import fr.postgresjson.entity.Serializable
|
|inline fun <reified E: Any?, S: Serializable> Requester.testFunctionObject(resource: S): E {
| return getFunction("test_function_object")
| .selectAny<E>(object : TypeReference<E>() {}, mapOf("resource" to resource))
|}
""".trimMargin()
val generated: String = generator.generate(Function(functionSql))
assertEquals(expectedGenerated, generated)
}
@Test
fun `generate function with return void`() {
val functionSql = """
|create or replace function test_function_void (name text default 'plop') returns void
|language plpgsql
|as
|$$
|begin
| perform 1;
|end;
|$$;
""".trimMargin()
val expectedGenerated = """
|package fr.postgresjson.functionGenerator.generated
|
|import fr.postgresjson.connexion.Requester
|
|fun Requester.testFunctionVoid(name: String = "plop"): Unit {
| getFunction("test_function_void")
| .exec(mapOf("name" to name))
|}
""".trimMargin()
val generated: String = generator.generate(Function(functionSql))
assertEquals(expectedGenerated, generated)
}
@Test
fun `generate function with multiple args and defaults`() {
val functionSql = """
|create or replace function test_function_multiple (name text default 'plop', in hi text default 'hello', out result json)
|language plpgsql
|as
|$$
|begin
| result = json_build_array(
| json_build_object('id', '457daad5-4f1b-4eb7-80ec-6882adb8cc7d', 'name', name),
| json_build_object('id', '8d20abb0-7f77-4b6c-9991-44acd3c88faa', 'name', hi)
| );
|end;
|$$
""".trimMargin()
val expectedGenerated = """
|package fr.postgresjson.functionGenerator.generated
|
|import com.fasterxml.jackson.core.type.TypeReference
|import fr.postgresjson.connexion.Requester
|
|inline fun <reified E: Any?> Requester.testFunctionMultiple(name: String = "plop", hi: String = "hello"): E {
| return getFunction("test_function_multiple")
| .selectAny<E>(object : TypeReference<E>() {}, mapOf("name" to name, "hi" to hi))
|}
""".trimMargin()
val generated: String = generator.generate(Function(functionSql))
assertEquals(expectedGenerated, generated)
}
}