Files
solutions.bitbadger.documents/src/scala/src/test/scala/PatchQueryTest.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))