@@ -17,6 +17,7 @@ import kotlin.test.AfterTest
17
17
import kotlin.test.BeforeTest
18
18
import kotlin.test.Test
19
19
import kotlin.test.assertEquals
20
+ import kotlin.test.assertFailsWith
20
21
import kotlin.test.assertFalse
21
22
import kotlin.test.assertTrue
22
23
import kotlin.time.Duration.Companion.minutes
@@ -62,116 +63,142 @@ class FirebaseDatabaseTest {
62
63
}
63
64
}
64
65
65
- // @Test
66
- // fun testSetValue() = runTest {
67
- // ensureDatabaseConnected()
68
- // val testValue = "test"
69
- // val testReference = database.reference("testPath")
70
- //
71
- // testReference.setValue(testValue)
72
- //
73
- // val testReferenceValue = testReference
74
- // .valueEvents
75
- // .first()
76
- // .value<String>()
77
- //
78
- // assertEquals(testValue, testReferenceValue)
79
- // }
80
- //
81
- // @Test
82
- // fun testChildCount() = runTest {
83
- // setupRealtimeData()
84
- // val dataSnapshot = database
85
- // .reference("FirebaseRealtimeDatabaseTest")
86
- // .valueEvents
87
- // .first()
88
- //
89
- // val firebaseDatabaseChildCount = dataSnapshot.children.count()
90
- // assertEquals(3, firebaseDatabaseChildCount)
91
- // }
92
- //
93
- // @Test
94
- // fun testBasicIncrementTransaction() = runTest {
95
- // ensureDatabaseConnected()
96
- // val data = DatabaseTest("PostOne", 2)
97
- // val userRef = database.reference("users/user_1/post_id_1")
98
- // setupDatabase(userRef, data, DatabaseTest.serializer())
99
- //
100
- // // Check database before transaction
101
- // val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
102
- // assertEquals(data.title, userDocBefore.title)
103
- // assertEquals(data.likes, userDocBefore.likes)
104
- //
105
- // // Run transaction
106
- // val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes + 1) }
107
- // val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
108
- //
109
- // // Check the database after transaction
110
- // assertEquals(data.title, userDocAfter.title)
111
- // assertEquals(data.likes + 1, userDocAfter.likes)
112
- // }
113
- //
114
- // @Test
115
- // fun testBasicDecrementTransaction() = runTest {
116
- // ensureDatabaseConnected()
117
- // val data = DatabaseTest("PostTwo", 2)
118
- // val userRef = database.reference("users/user_1/post_id_2")
119
- // setupDatabase(userRef, data, DatabaseTest.serializer())
120
- //
121
- // // Check database before transaction
122
- // val userDocBefore = userRef.valueEvents.first().value(DatabaseTest.serializer())
123
- // assertEquals(data.title, userDocBefore.title)
124
- // assertEquals(data.likes, userDocBefore.likes)
125
- //
126
- // // Run transaction
127
- // val transactionSnapshot = userRef.runTransaction(DatabaseTest.serializer()) { it.copy(likes = it.likes - 1) }
128
- // val userDocAfter = transactionSnapshot.value(DatabaseTest.serializer())
129
- //
130
- // // Check the database after transaction
131
- // assertEquals(data.title, userDocAfter.title)
132
- // assertEquals(data.likes - 1, userDocAfter.likes)
133
- // }
134
- //
135
- // @Test
136
- // fun testSetServerTimestamp() = runTest {
137
- // ensureDatabaseConnected()
138
- // val testReference = database.reference("testSetServerTimestamp")
139
- //
140
- // testReference.setValue(ServerValue.TIMESTAMP)
141
- //
142
- // val timestamp = testReference
143
- // .valueEvents
144
- // .first()
145
- // .value<Long>()
146
- //
147
- // assertTrue(timestamp > 0)
148
- // }
149
- //
150
- // @Test
151
- // fun testIncrement() = runTest {
152
- // ensureDatabaseConnected()
153
- // val testReference = database.reference("testIncrement")
154
- //
155
- // testReference.setValue(2.0)
156
- //
157
- // val value = testReference
158
- // .valueEvents
159
- // .first()
160
- // .value<Double>()
161
- //
162
- // assertEquals(2.0, value)
163
- //
164
- // testReference.setValue(ServerValue.increment(5.0))
165
- // val updatedValue = testReference
166
- // .valueEvents
167
- // .first()
168
- // .value<Double>()
169
- //
170
- // assertEquals(7.0, updatedValue)
171
- // }
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
+ }
81
+
82
+ @Test
83
+ fun testChildCount () = runTest {
84
+ setupRealtimeData()
85
+ val dataSnapshot = database
86
+ .reference(" FirebaseRealtimeDatabaseTest" )
87
+ .valueEvents
88
+ .first()
89
+
90
+ val firebaseDatabaseChildCount = dataSnapshot.child(" values" ).children.count()
91
+ assertEquals(3 , firebaseDatabaseChildCount)
92
+ }
93
+
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
+ }
114
+
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" )
155
+
156
+ testReference.setValue(2.0 )
157
+
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" ))
186
+ }
187
+ }
172
188
173
189
@Test
174
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 {
175
202
setupRealtimeData()
176
203
val reference = database
177
204
.reference(" FirebaseRealtimeDatabaseTest" )
0 commit comments