1
- package com.powersync
1
+ package com.powersync.sync
2
2
3
3
import app.cash.turbine.turbineScope
4
- import co.touchlab.kermit.ExperimentalKermitApi
5
4
import co.touchlab.kermit.Logger
6
- import co.touchlab.kermit.Severity
7
- import co.touchlab.kermit.TestConfig
8
- import co.touchlab.kermit.TestLogWriter
5
+ import com.powersync.PowerSyncDatabase
9
6
import com.powersync.bucket.BucketChecksum
10
7
import com.powersync.bucket.BucketPriority
11
8
import com.powersync.bucket.Checkpoint
12
9
import com.powersync.bucket.OpType
13
10
import com.powersync.bucket.OplogEntry
14
- import com.powersync.connectors.PowerSyncBackendConnector
15
- import com.powersync.connectors.PowerSyncCredentials
16
11
import com.powersync.db.PowerSyncDatabaseImpl
17
12
import com.powersync.db.schema.Schema
18
- import com.powersync.sync.SyncLine
19
- import com.powersync.sync.SyncStream
20
- import com.powersync.testutils.MockSyncService
21
13
import com.powersync.testutils.UserRow
22
- import com.powersync.testutils.cleanup
23
14
import com.powersync.testutils.factory
24
- import com.powersync.testutils.generatePrintLogWriter
25
15
import com.powersync.testutils.waitFor
26
16
import com.powersync.utils.JsonUtil
27
- import dev.mokkery.answering.returns
28
- import dev.mokkery.everySuspend
29
- import dev.mokkery.mock
30
- import kotlinx.coroutines.CoroutineScope
31
- import kotlinx.coroutines.channels.Channel
32
- import kotlinx.coroutines.flow.receiveAsFlow
33
- import kotlinx.coroutines.runBlocking
34
17
import kotlinx.coroutines.test.runTest
35
18
import kotlinx.serialization.encodeToString
36
- import kotlinx.serialization.json.JsonObject
37
- import kotlin.test.AfterTest
38
- import kotlin.test.BeforeTest
39
19
import kotlin.test.Test
40
20
import kotlin.test.assertEquals
41
21
import kotlin.test.assertFalse
42
22
import kotlin.test.assertNotNull
43
23
import kotlin.test.assertTrue
44
24
import kotlin.time.Duration.Companion.seconds
45
25
46
- @OptIn(ExperimentalKermitApi ::class )
47
- class SyncIntegrationTest {
48
- private val logWriter =
49
- TestLogWriter (
50
- loggable = Severity .Debug ,
51
- )
52
-
53
- private val logger =
54
- Logger (
55
- TestConfig (
56
- minSeverity = Severity .Debug ,
57
- logWriterList = listOf (logWriter, generatePrintLogWriter()),
58
- ),
59
- )
60
- private lateinit var database: PowerSyncDatabaseImpl
61
- private lateinit var connector: PowerSyncBackendConnector
62
- private lateinit var syncLines: Channel <SyncLine >
63
-
64
- @BeforeTest
65
- fun setup () {
66
- cleanup(" testdb" )
67
- logWriter.reset()
68
- database = openDb()
69
- connector =
70
- mock<PowerSyncBackendConnector > {
71
- everySuspend { getCredentialsCached() } returns
72
- PowerSyncCredentials (
73
- token = " test-token" ,
74
- userId = " test-user" ,
75
- endpoint = " https://test.com" ,
76
- )
77
-
78
- everySuspend { invalidateCredentials() } returns Unit
79
- }
80
- syncLines = Channel ()
81
-
82
- runBlocking {
83
- database.disconnectAndClear(true )
84
- }
85
- }
86
-
87
- @AfterTest
88
- fun teardown () {
89
- runBlocking {
90
- database.close()
91
- }
92
- cleanup(" testdb" )
93
- }
94
-
95
- private fun openDb () =
96
- PowerSyncDatabase (
97
- factory = factory,
98
- schema = Schema (UserRow .table),
99
- dbFilename = " testdb" ,
100
- ) as PowerSyncDatabaseImpl
101
-
102
- private fun CoroutineScope.syncStream (): SyncStream {
103
- val client = MockSyncService .client(this , syncLines.receiveAsFlow())
104
- return SyncStream (
105
- bucketStorage = database.bucketStorage,
106
- connector = connector,
107
- httpEngine = client,
108
- uploadCrud = { },
109
- retryDelayMs = 10 ,
110
- logger = logger,
111
- params = JsonObject (emptyMap()),
112
- )
113
- }
114
-
26
+ @OptIn(co.touchlab.kermit.ExperimentalKermitApi ::class )
27
+ class SyncIntegrationTest : BaseInMemorySyncTest () {
115
28
private suspend fun expectUserCount (amount : Int ) {
116
29
val users = database.getAll(" SELECT * FROM users;" ) { UserRow .from(it) }
117
30
assertEquals(amount, users.size, " Expected $amount users, got $users " )
@@ -466,4 +379,4 @@ class SyncIntegrationTest {
466
379
database.close()
467
380
syncLines.close()
468
381
}
469
- }
382
+ }
0 commit comments