Skip to content

Commit e41b52a

Browse files
authored
chore: add more instrumented tests (#14)
* chore: exclude UI component FormbricksFragment from unit test coverage * chore: add test for api service * improve api service and tests
1 parent 3408d56 commit e41b52a

File tree

3 files changed

+72
-10
lines changed

3 files changed

+72
-10
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.formbricks.android.network
2+
3+
import android.content.Context
4+
import androidx.test.core.app.ApplicationProvider
5+
import androidx.test.ext.junit.runners.AndroidJUnit4
6+
import androidx.test.platform.app.InstrumentationRegistry
7+
import com.formbricks.android.model.user.PostUserBody
8+
import org.junit.Assert.*
9+
import org.junit.Before
10+
import org.junit.Test
11+
import org.junit.runner.RunWith
12+
13+
@RunWith(AndroidJUnit4::class)
14+
class FormbricksApiServiceInstrumentedTest {
15+
private lateinit var context: Context
16+
private lateinit var apiService: FormbricksApiService
17+
18+
@Before
19+
fun setUp() {
20+
context = ApplicationProvider.getApplicationContext()
21+
apiService = FormbricksApiService()
22+
// You may want to initialize with a test server or mock URL
23+
apiService.initialize("https://example.com", isLoggingEnabled = false)
24+
}
25+
26+
@Test
27+
fun testInitialization() {
28+
// This test just verifies that initialization does not throw
29+
try {
30+
apiService.initialize("https://example.com", isLoggingEnabled = false)
31+
} catch (e: Exception) {
32+
fail("Initialization should not throw: ${e.message}")
33+
}
34+
}
35+
36+
@Test
37+
fun testGetEnvironmentStateObject_handlesErrorGracefully() {
38+
val result = apiService.getEnvironmentStateObject("dummy-environment-id")
39+
assertTrue(result.isFailure)
40+
result.exceptionOrNull()?.let { e ->
41+
println("Exception caught as expected: ${e.message}")
42+
}
43+
}
44+
45+
@Test
46+
fun testPostUser_handlesErrorGracefully() {
47+
// This should fail gracefully since the URL is unreachable
48+
val dummyBody = PostUserBody("dummy-user-id", null)
49+
val result = apiService.postUser("dummy-environment-id", dummyBody)
50+
assertTrue(result.isFailure)
51+
}
52+
53+
// Add more integration-style tests as needed, e.g.:
54+
// - testGetEnvironmentStateObject_withMockServer
55+
// - testPostUser_withMockServer
56+
// These would require a running test server or a mock web server
57+
}

android/src/main/java/com/formbricks/android/network/FormbricksApiService.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,20 @@ open class FormbricksApiService {
2424
}
2525

2626
open fun getEnvironmentStateObject(environmentId: String): Result<EnvironmentDataHolder> {
27-
val result = execute {
28-
retrofit.create(FormbricksService::class.java)
29-
.getEnvironmentState(environmentId)
27+
return try {
28+
val result = execute {
29+
retrofit.create(FormbricksService::class.java)
30+
.getEnvironmentState(environmentId)
31+
}
32+
val json = Json { ignoreUnknownKeys = true }
33+
val resultMap = result.getOrThrow()
34+
val resultJson = mapToJsonElement(resultMap).jsonObject
35+
val environmentResponse = json.decodeFromJsonElement<EnvironmentResponse>(resultJson)
36+
val data = EnvironmentDataHolder(environmentResponse.data, resultMap)
37+
Result.success(data)
38+
} catch (e: Exception) {
39+
Result.failure(e)
3040
}
31-
val json = Json { ignoreUnknownKeys = true }
32-
val resultMap = result.getOrThrow()
33-
val resultJson = mapToJsonElement(resultMap).jsonObject
34-
val environmentResponse = json.decodeFromJsonElement<EnvironmentResponse>(resultJson)
35-
val data = EnvironmentDataHolder(environmentResponse.data, resultMap)
36-
return Result.success(data)
3741
}
3842

3943
open fun postUser(environmentId: String, body: PostUserBody): Result<UserResponse> {

sonar-project.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ sonar.coverage.exclusions=**/test/**/*,**/androidTest/**/*,**/*.js,**/*.json,\
2727
**/FormbricksAPIError.kt,\
2828
**/Logger.kt,\
2929
**/Guard.kt,\
30-
**/DateExtensions.kt
30+
**/DateExtensions.kt,\
31+
**/webview/FormbricksFragment.kt
3132

3233
# Debug
3334
sonar.verbose=true

0 commit comments

Comments
 (0)