add MeasurementRepository
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package ltd.hlaeja.repository
|
||||
|
||||
import com.influxdb.client.InfluxDBClient
|
||||
import com.influxdb.client.QueryApi
|
||||
import com.influxdb.client.WriteApi
|
||||
import com.influxdb.client.write.Point
|
||||
import com.influxdb.query.FluxTable
|
||||
import io.mockk.Runs
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
import java.util.UUID
|
||||
import kotlin.test.Test
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import ltd.hlaeja.properties.InfluxDbProperties
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
|
||||
class MeasurementRepositoryTest {
|
||||
|
||||
private val client: InfluxDBClient = mockk()
|
||||
private val properties: InfluxDbProperties = mockk()
|
||||
private val writeApi: WriteApi = mockk()
|
||||
private val queryApi: QueryApi = mockk()
|
||||
|
||||
private lateinit var repository: MeasurementRepository
|
||||
|
||||
@BeforeEach
|
||||
fun setUp() {
|
||||
repository = MeasurementRepository(client, properties)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `save point to influxdb`() = runTest {
|
||||
// given
|
||||
val point = Point.measurement("test").addField("value", 12.3)
|
||||
|
||||
every { client.makeWriteApi() } returns writeApi
|
||||
every { writeApi.writePoint(any()) } just Runs
|
||||
|
||||
// when
|
||||
repository.save(point)
|
||||
|
||||
// then
|
||||
coVerify { writeApi.writePoint(point) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `load fields from influxdb by client and device`() = runTest {
|
||||
// given
|
||||
val clientUuid = UUID.fromString("00000000-0000-0000-0000-000000000000")
|
||||
val deviceUuid = UUID.fromString("00000000-0000-0000-0000-000000000001")
|
||||
val mockResult = mutableListOf(FluxTable())
|
||||
|
||||
every { client.queryApi } returns queryApi
|
||||
properties.apply {
|
||||
every { bucket } returns "bucket"
|
||||
every { org } returns "organization"
|
||||
}
|
||||
every { queryApi.query(any(String::class), any(String::class)) } returns mockResult
|
||||
|
||||
// when
|
||||
val result = repository.getByNode(clientUuid, deviceUuid)
|
||||
|
||||
// then
|
||||
assertEquals(mockResult, result)
|
||||
verify {
|
||||
queryApi.query(
|
||||
"from(bucket: \"bucket\")\n" +
|
||||
" |> range(start: -1y)\n" +
|
||||
" |> filter(fn: (r) => r[\"_measurement\"] == \"00000000-0000-0000-0000-000000000000\")\n" +
|
||||
" |> filter(fn: (r) => r[\"node\"] == \"00000000-0000-0000-0000-000000000001\")\n" +
|
||||
" |> group(columns: [\"_field\"])\n" +
|
||||
" |> sort(columns: [\"_time\"], desc: true)\n" +
|
||||
" |> limit(n: 1)",
|
||||
"organization",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user