@@ -2,14 +2,18 @@ package dev.helight.krescent.mongo
22
33import com.mongodb.kotlin.client.coroutine.MongoClient
44import dev.helight.krescent.checkpoints.CheckpointBucket
5+ import dev.helight.krescent.checkpoints.StoredCheckpoint
56import kotlinx.coroutines.runBlocking
7+ import kotlinx.serialization.json.JsonPrimitive
68import org.bson.Document
79import org.junit.jupiter.api.Assertions.assertEquals
810import org.junit.jupiter.api.Test
911import org.testcontainers.containers.GenericContainer
1012import org.testcontainers.junit.jupiter.Container
1113import org.testcontainers.junit.jupiter.Testcontainers
1214import java.time.Duration
15+ import java.time.Instant
16+ import kotlin.test.assertNull
1317
1418@Testcontainers
1519class MongoCollectionViewTest {
@@ -49,4 +53,44 @@ class MongoCollectionViewTest {
4953 assertEquals(1 , view.collection.countDocuments())
5054 }
5155
56+
57+ @Test
58+ fun `Test Checkpoint Storage` () = runBlocking {
59+ val client = MongoClient .create(connectionString)
60+ val database = client.getDatabase(" test" )
61+ val storage = MongoCheckpointStorage (database)
62+
63+ val testCheckpointNS = " test-namespace"
64+ assertNull(storage.getLatestCheckpoint(testCheckpointNS))
65+
66+ val checkpoint = StoredCheckpoint (
67+ namespace = testCheckpointNS,
68+ revision = 1 ,
69+ position = " test-position" ,
70+ timestamp = Instant .now(),
71+ data = JsonPrimitive (" test-data" )
72+ )
73+
74+ storage.storeCheckpoint(checkpoint)
75+ val loadedCheckpoint = storage.getLatestCheckpoint(testCheckpointNS)
76+ assertEquals(checkpoint.namespace, loadedCheckpoint?.namespace)
77+ assertEquals(1 , loadedCheckpoint?.revision)
78+
79+ val updatedCheckpoint = StoredCheckpoint (
80+ namespace = testCheckpointNS,
81+ revision = 2 ,
82+ position = " updated-position" ,
83+ timestamp = Instant .now(),
84+ data = JsonPrimitive (" updated-data" )
85+ )
86+ storage.storeCheckpoint(updatedCheckpoint)
87+
88+ val reloadedCheckpoint = storage.getLatestCheckpoint(testCheckpointNS)
89+ assertEquals(checkpoint.namespace, reloadedCheckpoint?.namespace)
90+ assertEquals(2 , reloadedCheckpoint?.revision)
91+
92+ storage.clearCheckpoints()
93+ assertNull(storage.getLatestCheckpoint(testCheckpointNS))
94+ }
95+
5296}
0 commit comments