73 lines
2.7 KiB
Scala
73 lines
2.7 KiB
Scala
package solutions.bitbadger.documents.scala.tests
|
|
|
|
import org.junit.jupiter.api.Assertions.*
|
|
import org.junit.jupiter.api.{AfterEach, DisplayName, Test}
|
|
import solutions.bitbadger.documents.{DocumentException, Field}
|
|
import solutions.bitbadger.documents.query.PatchQuery
|
|
|
|
import scala.jdk.CollectionConverters.*
|
|
|
|
@DisplayName("Scala | Query | PatchQuery")
|
|
class PatchQueryTest:
|
|
|
|
/**
|
|
* Reset the dialect
|
|
*/
|
|
@AfterEach
|
|
def cleanUp(): Unit =
|
|
ForceDialect.none()
|
|
|
|
@Test
|
|
@DisplayName("byId generates correctly | PostgreSQL")
|
|
def byIdPostgres(): Unit =
|
|
ForceDialect.postgres()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = data || :data WHERE data->>'id' = :id", PatchQuery.byId(TEST_TABLE),
|
|
"Patch query not constructed correctly")
|
|
|
|
@Test
|
|
@DisplayName("byId generates correctly | SQLite")
|
|
def byIdSQLite(): Unit =
|
|
ForceDialect.sqlite()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = json_patch(data, json(:data)) WHERE data->>'id' = :id",
|
|
PatchQuery.byId(TEST_TABLE), "Patch query not constructed correctly")
|
|
|
|
@Test
|
|
@DisplayName("byFields generates correctly | PostgreSQL")
|
|
def byFieldsPostgres(): Unit =
|
|
ForceDialect.postgres()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = data || :data WHERE data->>'z' = :y",
|
|
PatchQuery.byFields(TEST_TABLE, List(Field.equal("z", "", ":y")).asJava), "Patch query not constructed correctly")
|
|
|
|
@Test
|
|
@DisplayName("byFields generates correctly | SQLite")
|
|
def byFieldsSQLite(): Unit =
|
|
ForceDialect.sqlite()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = json_patch(data, json(:data)) WHERE data->>'z' = :y",
|
|
PatchQuery.byFields(TEST_TABLE, List(Field.equal("z", "", ":y")).asJava), "Patch query not constructed correctly")
|
|
|
|
@Test
|
|
@DisplayName("byContains generates correctly | PostgreSQL")
|
|
def byContainsPostgres(): Unit =
|
|
ForceDialect.postgres()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = data || :data WHERE data @> :criteria",
|
|
PatchQuery.byContains(TEST_TABLE), "Patch query not constructed correctly" )
|
|
|
|
@Test
|
|
@DisplayName("byContains fails | SQLite")
|
|
def byContainsSQLite(): Unit =
|
|
ForceDialect.sqlite()
|
|
assertThrows(classOf[DocumentException], () => PatchQuery.byContains(TEST_TABLE))
|
|
|
|
@Test
|
|
@DisplayName("byJsonPath generates correctly | PostgreSQL")
|
|
def byJsonPathPostgres(): Unit =
|
|
ForceDialect.postgres()
|
|
assertEquals(s"UPDATE $TEST_TABLE SET data = data || :data WHERE jsonb_path_exists(data, :path::jsonpath)",
|
|
PatchQuery.byJsonPath(TEST_TABLE), "Patch query not constructed correctly")
|
|
|
|
@Test
|
|
@DisplayName("byJsonPath fails | SQLite")
|
|
def byJsonPathSQLite(): Unit =
|
|
ForceDialect.sqlite()
|
|
assertThrows(classOf[DocumentException], () => PatchQuery.byJsonPath(TEST_TABLE))
|