@@ -12,7 +12,7 @@ expect fun runTest(test: suspend () -> Unit)
12
12
class FirebaseDatabaseTest {
13
13
14
14
@Serializable
15
- data class DatabaseTest (val prop : String , val likes : Int = 0 )
15
+ data class DatabaseTest (val title : String , val likes : Int = 0 )
16
16
17
17
@BeforeTest
18
18
fun initializeFirebase () {
@@ -34,51 +34,56 @@ class FirebaseDatabaseTest {
34
34
}
35
35
}
36
36
37
- @AfterTest
38
- fun tearDown () {
39
- Firebase
40
- .takeIf { Firebase .apps(context).isNotEmpty() }
41
- ?.apply { app.delete() }
42
- }
43
-
44
37
@Test
45
38
fun testBasicIncrementTransaction () = runTest {
46
- val data = DatabaseTest (" post1 " , 2 )
39
+ val data = DatabaseTest (" PostOne " , 2 )
47
40
val userRef = Firebase .database.reference(" users/user_1/post_id_1" )
48
41
setupDatabase(userRef, data, DatabaseTest .serializer())
49
42
50
43
// Check database before transaction
51
44
val userDocBefore = userRef.valueEvents.first().value(DatabaseTest .serializer())
52
- assertEquals(data.prop , userDocBefore.prop )
45
+ assertEquals(data.title , userDocBefore.title )
53
46
assertEquals(data.likes, userDocBefore.likes)
54
47
55
48
// Run transaction
56
- userRef.runTransaction(DatabaseTest .serializer()) { DatabaseTest (data.prop, it.likes + 1 ) }
49
+ val transactionSnapshot = userRef.runTransaction(DatabaseTest .serializer()) { DatabaseTest (data.title, it.likes + 1 ) }
50
+ val userDocAfter = transactionSnapshot.value(DatabaseTest .serializer())
57
51
58
52
// Check the database after transaction
59
- val userDocAfter = userRef.valueEvents.first().value(DatabaseTest .serializer())
60
- assertEquals(data.prop, userDocAfter.prop)
61
- assertEquals(data.likes, userDocAfter.likes + 1 )
53
+ assertEquals(data.title, userDocAfter.title)
54
+ assertEquals(data.likes + 1 , userDocAfter.likes)
55
+
56
+ // cleanUp Firebase
57
+ cleanUp()
62
58
}
63
59
64
60
@Test
65
61
fun testBasicDecrementTransaction () = runTest {
66
- val data = DatabaseTest (" post2 " , 2 )
62
+ val data = DatabaseTest (" PostTwo " , 2 )
67
63
val userRef = Firebase .database.reference(" users/user_1/post_id_2" )
68
64
setupDatabase(userRef, data, DatabaseTest .serializer())
69
65
70
66
// Check database before transaction
71
67
val userDocBefore = userRef.valueEvents.first().value(DatabaseTest .serializer())
72
- assertEquals(data.prop , userDocBefore.prop )
68
+ assertEquals(data.title , userDocBefore.title )
73
69
assertEquals(data.likes, userDocBefore.likes)
74
70
75
71
// Run transaction
76
- userRef.runTransaction(DatabaseTest .serializer()) { DatabaseTest (data.prop, it.likes - 1 ) }
72
+ val transactionSnapshot = userRef.runTransaction(DatabaseTest .serializer()) { DatabaseTest (data.title, it.likes - 1 ) }
73
+ val userDocAfter = transactionSnapshot.value(DatabaseTest .serializer())
77
74
78
75
// Check the database after transaction
79
- val userDocAfter = userRef.valueEvents.first().value(DatabaseTest .serializer())
80
- assertEquals(data.prop, userDocAfter.prop)
81
- assertEquals(data.likes, userDocAfter.likes - 1 )
76
+ assertEquals(data.title, userDocAfter.title)
77
+ assertEquals(data.likes - 1 , userDocAfter.likes)
78
+
79
+ // cleanUp Firebase
80
+ cleanUp()
81
+ }
82
+
83
+ private fun cleanUp () {
84
+ Firebase
85
+ .takeIf { Firebase .apps(context).isNotEmpty() }
86
+ ?.apply { app.delete() }
82
87
}
83
88
84
89
private suspend fun <T > setupDatabase (ref : DatabaseReference , data : T , strategy : SerializationStrategy <T >) {
0 commit comments