Skip to content

Commit 8c3a9d7

Browse files
committed
Revert "Fix PreviewsTest to cleanup VMs"
This reverts commit 4a6b343.
1 parent 4a6b343 commit 8c3a9d7

File tree

1 file changed

+139
-164
lines changed
  • firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database

1 file changed

+139
-164
lines changed

firebase-database/src/commonTest/kotlin/dev/gitlive/firebase/database/database.kt

+139-164
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import dev.gitlive.firebase.initialize
77
import dev.gitlive.firebase.runBlockingTest
88
import dev.gitlive.firebase.runTest
99
import kotlinx.coroutines.Dispatchers
10-
import kotlinx.coroutines.delay
1110
import kotlinx.coroutines.flow.first
1211
import kotlinx.coroutines.flow.map
1312
import kotlinx.coroutines.withContext
@@ -22,7 +21,6 @@ import kotlin.test.assertFailsWith
2221
import kotlin.test.assertFalse
2322
import kotlin.test.assertTrue
2423
import kotlin.time.Duration.Companion.minutes
25-
import kotlin.time.Duration.Companion.seconds
2624

2725
expect val emulatorHost: String
2826
expect val context: Any
@@ -55,9 +53,6 @@ class FirebaseDatabaseTest {
5553

5654
database = Firebase.database(app).apply {
5755
useEmulator(emulatorHost, 9000)
58-
setLoggingEnabled(true)
59-
}.also {
60-
it.goOnline()
6156
}
6257
}
6358

@@ -68,169 +63,155 @@ class FirebaseDatabaseTest {
6863
}
6964
}
7065

71-
// @Test
72-
// fun testSetValue() = runTest {
73-
// ensureDatabaseConnected()
74-
// val testValue = "test"
75-
// val testReference = database.reference("testPath")
76-
//
77-
// testReference.setValue(testValue)
78-
//
79-
// val testReferenceValue = testReference
80-
// .valueEvents
81-
// .first()
82-
// .value<String>()
83-
//
84-
// assertEquals(testValue, testReferenceValue)
85-
// }
86-
//
87-
// @Test
88-
// fun testChildCount() = runTest {
89-
// setupRealtimeData()
90-
// val dataSnapshot = database
91-
// .reference("FirebaseRealtimeDatabaseTest")
92-
// .valueEvents
93-
// .first()
94-
//
95-
// val firebaseDatabaseChildCount = dataSnapshot.child("values").children.count()
96-
// assertEquals(3, firebaseDatabaseChildCount)
97-
// }
98-
//
99-
// @Test
100-
// fun testBasicIncrementTransaction() = runTest {
101-
// ensureDatabaseConnected()
102-
// val data = DatabaseTest("PostOne", 2)
103-
// val userRef = database.reference("users/user_1/post_id_1")
104-
// setupDatabase(userRef, data, DatabaseTest.serializer())
105-
//
106-
// // Check database before transaction
107-
// val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
108-
// assertEquals(data.title, userDocBefore.title)
109-
// assertEquals(data.likes, userDocBefore.likes)
110-
//
111-
// // Run transaction
112-
// val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes + 1) }
113-
// val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
114-
//
115-
// // Check the database after transaction
116-
// assertEquals(data.title, userDocAfter.title)
117-
// assertEquals(data.likes + 1, userDocAfter.likes)
118-
// }
119-
//
120-
// @Test
121-
// fun testBasicDecrementTransaction() = runTest {
122-
// ensureDatabaseConnected()
123-
// val data = DatabaseTest("PostTwo", 2)
124-
// val userRef = database.reference("users/user_1/post_id_2")
125-
// setupDatabase(userRef, data, DatabaseTest.serializer())
126-
//
127-
// // Check database before transaction
128-
// val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
129-
// assertEquals(data.title, userDocBefore.title)
130-
// assertEquals(data.likes, userDocBefore.likes)
131-
//
132-
// // Run transaction
133-
// val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes - 1) }
134-
// val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
135-
//
136-
// // Check the database after transaction
137-
// assertEquals(data.title, userDocAfter.title)
138-
// assertEquals(data.likes - 1, userDocAfter.likes)
139-
// }
140-
//
141-
// @Test
142-
// fun testSetServerTimestamp() = runTest {
143-
// ensureDatabaseConnected()
144-
// val testReference = database.reference("testSetServerTimestamp")
145-
//
146-
// testReference.setValue(ServerValue.TIMESTAMP)
147-
//
148-
// val timestamp = testReference
149-
// .valueEvents
150-
// .first()
151-
// .value<Long>()
152-
//
153-
// assertTrue(timestamp > 0)
154-
// }
155-
//
156-
// @Test
157-
// fun testIncrement() = runTest {
158-
// ensureDatabaseConnected()
159-
// val testReference = database.reference("testIncrement")
160-
//
161-
// testReference.setValue(2.0)
162-
//
163-
// val value = testReference
164-
// .valueEvents
165-
// .first()
166-
// .value<Double>()
167-
//
168-
// assertEquals(2.0, value)
169-
//
170-
// testReference.setValue(ServerValue.increment(5.0))
171-
// val updatedValue = testReference
172-
// .valueEvents
173-
// .first()
174-
// .value<Double>()
175-
//
176-
// assertEquals(7.0, updatedValue)
177-
// }
178-
//
179-
// @Test
180-
// fun testBreakRules() = runTest {
181-
// ensureDatabaseConnected()
182-
// val reference = database
183-
// .reference("FirebaseRealtimeDatabaseTest")
184-
// val child = reference.child("lastActivity")
185-
// assertFailsWith<DatabaseException> {
186-
// child.setValue("stringNotAllowed")
187-
// }
188-
// child.setValue(2)
189-
// assertFailsWith<DatabaseException> {
190-
// reference.updateChildren(mapOf("lastActivity" to "stringNotAllowed"))
191-
// }
192-
// }
193-
//
194-
// @Test
195-
// fun testUpdateChildren() = runTest {
196-
// setupRealtimeData()
197-
// val reference = database
198-
// .reference("FirebaseRealtimeDatabaseTest")
199-
// val valueEvents = reference.child("lastActivity").valueEvents
200-
// assertTrue(valueEvents.first().exists)
201-
// reference.updateChildren(mapOf("test" to false, "nested" to mapOf("lastActivity" to null), "lastActivity" to null))
202-
// assertFalse(valueEvents.first().exists)
203-
// }
66+
@Test
67+
fun testSetValue() = runTest {
68+
ensureDatabaseConnected()
69+
val testValue = "test"
70+
val testReference = database.reference("testPath")
71+
72+
testReference.setValue(testValue)
73+
74+
val testReferenceValue = testReference
75+
.valueEvents
76+
.first()
77+
.value<String>()
78+
79+
assertEquals(testValue, testReferenceValue)
80+
}
20481

20582
@Test
206-
fun testUpdateChildrenOnDisconnect() = runBlockingTest {
83+
fun testChildCount() = runTest {
20784
setupRealtimeData()
208-
withTimeout(120.seconds) {
209-
val reference = database
210-
.reference("FirebaseRealtimeDatabaseTest")
211-
val valueEvents = reference.child("lastActivity").valueEvents
212-
assertTrue(valueEvents.first().exists)
213-
reference.onDisconnect().updateChildren(
214-
mapOf(
215-
"test" to false,
216-
"nested" to mapOf("lastActivity" to null),
217-
"lastActivity" to null
218-
)
219-
)
220-
database.goOffline()
85+
val dataSnapshot = database
86+
.reference("FirebaseRealtimeDatabaseTest")
87+
.valueEvents
88+
.first()
22189

90+
val firebaseDatabaseChildCount = dataSnapshot.child("values").children.count()
91+
assertEquals(3, firebaseDatabaseChildCount)
92+
}
22293

94+
@Test
95+
fun testBasicIncrementTransaction() = runTest {
96+
ensureDatabaseConnected()
97+
val data = DatabaseTest("PostOne", 2)
98+
val userRef = database.reference("users/user_1/post_id_1")
99+
setupDatabase(userRef, data, DatabaseTest.serializer())
100+
101+
// Check database before transaction
102+
val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
103+
assertEquals(data.title, userDocBefore.title)
104+
assertEquals(data.likes, userDocBefore.likes)
105+
106+
// Run transaction
107+
val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes + 1) }
108+
val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
109+
110+
// Check the database after transaction
111+
assertEquals(data.title, userDocAfter.title)
112+
assertEquals(data.likes + 1, userDocAfter.likes)
113+
}
223114

224-
ensureDatabaseDisconnected()
115+
@Test
116+
fun testBasicDecrementTransaction() = runTest {
117+
ensureDatabaseConnected()
118+
val data = DatabaseTest("PostTwo", 2)
119+
val userRef = database.reference("users/user_1/post_id_2")
120+
setupDatabase(userRef, data, DatabaseTest.serializer())
121+
122+
// Check database before transaction
123+
val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
124+
assertEquals(data.title, userDocBefore.title)
125+
assertEquals(data.likes, userDocBefore.likes)
126+
127+
// Run transaction
128+
val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes - 1) }
129+
val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
130+
131+
// Check the database after transaction
132+
assertEquals(data.title, userDocAfter.title)
133+
assertEquals(data.likes - 1, userDocAfter.likes)
134+
}
135+
136+
@Test
137+
fun testSetServerTimestamp() = runTest {
138+
ensureDatabaseConnected()
139+
val testReference = database.reference("testSetServerTimestamp")
140+
141+
testReference.setValue(ServerValue.TIMESTAMP)
142+
143+
val timestamp = testReference
144+
.valueEvents
145+
.first()
146+
.value<Long>()
147+
148+
assertTrue(timestamp > 0)
149+
}
150+
151+
@Test
152+
fun testIncrement() = runTest {
153+
ensureDatabaseConnected()
154+
val testReference = database.reference("testIncrement")
225155

226-
delay(10000)
156+
testReference.setValue(2.0)
227157

228-
// database.goOnline()
229-
// ensureDatabaseConnected()
230-
assertFalse(valueEvents.first().exists)
158+
val value = testReference
159+
.valueEvents
160+
.first()
161+
.value<Double>()
162+
163+
assertEquals(2.0, value)
164+
165+
testReference.setValue(ServerValue.increment(5.0))
166+
val updatedValue = testReference
167+
.valueEvents
168+
.first()
169+
.value<Double>()
170+
171+
assertEquals(7.0, updatedValue)
172+
}
173+
174+
@Test
175+
fun testBreakRules() = runTest {
176+
ensureDatabaseConnected()
177+
val reference = database
178+
.reference("FirebaseRealtimeDatabaseTest")
179+
val child = reference.child("lastActivity")
180+
assertFailsWith<DatabaseException> {
181+
child.setValue("stringNotAllowed")
182+
}
183+
child.setValue(2)
184+
assertFailsWith<DatabaseException> {
185+
reference.updateChildren(mapOf("lastActivity" to "stringNotAllowed"))
231186
}
232187
}
233188

189+
@Test
190+
fun testUpdateChildren() = runTest {
191+
setupRealtimeData()
192+
val reference = database
193+
.reference("FirebaseRealtimeDatabaseTest")
194+
val valueEvents = reference.child("lastActivity").valueEvents
195+
assertTrue(valueEvents.first().exists)
196+
reference.updateChildren(mapOf("test" to false, "nested" to mapOf("lastActivity" to null), "lastActivity" to null))
197+
assertFalse(valueEvents.first().exists)
198+
}
199+
200+
@Test
201+
fun testUpdateChildrenOnDisconnect() = runTest {
202+
setupRealtimeData()
203+
val reference = database
204+
.reference("FirebaseRealtimeDatabaseTest")
205+
val valueEvents = reference.child("lastActivity").valueEvents
206+
assertTrue(valueEvents.first().exists)
207+
reference.onDisconnect().updateChildren(mapOf("test" to false, "nested" to mapOf("lastActivity" to null), "lastActivity" to null))
208+
database.goOffline()
209+
210+
database.goOnline()
211+
ensureDatabaseConnected()
212+
assertFalse(valueEvents.first().exists)
213+
}
214+
234215
private suspend fun setupRealtimeData() {
235216
ensureDatabaseConnected()
236217
val firebaseDatabaseTestReference = database
@@ -259,14 +240,8 @@ class FirebaseDatabaseTest {
259240
}
260241

261242
private suspend fun ensureDatabaseConnected() = withContext(Dispatchers.Default.limitedParallelism(1)) {
262-
withTimeout(10.seconds) {
243+
withTimeout(2.minutes) {
263244
database.reference(".info/connected").valueEvents.first { it.value() }
264245
}
265246
}
266-
267-
private suspend fun ensureDatabaseDisconnected() = withContext(Dispatchers.Default.limitedParallelism(1)) {
268-
withTimeout(10.seconds) {
269-
database.reference(".info/connected").valueEvents.first { !it.value<Boolean>() }
270-
}
271-
}
272247
}

0 commit comments

Comments
 (0)