Skip to content

Commit 4d75467

Browse files
authored
fix: types and tests (#17)
* fixes action schema error * fixes type error * fixes sonar project exclusions path
1 parent d0a4445 commit 4d75467

File tree

6 files changed

+41
-5
lines changed

6 files changed

+41
-5
lines changed

android/src/androidTest/java/com/formbricks/android/FormbricksInstrumentedTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ class FormbricksInstrumentedTest {
125125
assertNotNull("Should have click_demo_button action class", clickDemoButtonAction)
126126

127127
val triggers = firstSurveyBeforeTrack?.triggers ?: listOf()
128-
val matchingTrigger = triggers.firstOrNull { it.actionClass?.id == clickDemoButtonAction?.id }
128+
val matchingTrigger = triggers.firstOrNull { it.actionClass?.name == clickDemoButtonAction?.name }
129129
assertNotNull("Survey should have matching trigger", matchingTrigger)
130130

131131
// Now track the event

android/src/androidTest/java/com/formbricks/android/manager/SurveyManagerInstrumentedTest.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package com.formbricks.android.manager
22

33
import androidx.test.ext.junit.runners.AndroidJUnit4
4-
import com.formbricks.android.Formbricks
54
import com.formbricks.android.model.environment.*
65
import com.formbricks.android.model.user.Display
76
import org.junit.Assert.*
87
import org.junit.Before
98
import org.junit.Test
109
import org.junit.runner.RunWith
1110
import java.util.Date
12-
import java.util.concurrent.TimeUnit
1311

1412
@RunWith(AndroidJUnit4::class)
1513
class SurveyManagerInstrumentedTest {

android/src/main/java/com/formbricks/android/manager/SurveyManager.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ import com.formbricks.android.extensions.expiresAt
77
import com.formbricks.android.extensions.guard
88
import com.formbricks.android.logger.Logger
99
import com.formbricks.android.model.environment.EnvironmentDataHolder
10+
import com.formbricks.android.model.environment.SegmentFilterResource
11+
import com.formbricks.android.model.environment.SegmentFilterResourceDeserializer
1012
import com.formbricks.android.model.environment.Survey
1113
import com.formbricks.android.model.error.SDKError
1214
import com.formbricks.android.model.user.Display
1315
import com.google.gson.Gson
16+
import com.google.gson.GsonBuilder
1417
import kotlinx.coroutines.CoroutineScope
1518
import kotlinx.coroutines.Dispatchers
1619
import kotlinx.coroutines.launch
@@ -36,6 +39,16 @@ object SurveyManager {
3639
private val prefManager by lazy { Formbricks.applicationContext.getSharedPreferences(FORMBRICKS_PREFS, Context.MODE_PRIVATE) }
3740
internal var filteredSurveys: MutableList<Survey> = mutableListOf()
3841

42+
// 1) Build your Gson once, registering only the SegmentFilterResource adapter:
43+
val gson = GsonBuilder()
44+
.registerTypeAdapter(
45+
SegmentFilterResource::class.java,
46+
SegmentFilterResourceDeserializer()
47+
)
48+
.create()
49+
50+
51+
3952
private var environmentDataHolderJson: String?
4053
get() {
4154
return prefManager.getString(PREF_FORMBRICKS_DATA_HOLDER, "")
@@ -57,7 +70,7 @@ object SurveyManager {
5770
synchronized(this) {
5871
backingEnvironmentDataHolder = environmentDataHolderJson?.let { json ->
5972
try {
60-
Gson().fromJson(json, EnvironmentDataHolder::class.java)
73+
gson.fromJson(json, EnvironmentDataHolder::class.java)
6174
} catch (e: Exception) {
6275
Logger.e(RuntimeException("Unable to retrieve environment data from the local storage."))
6376
null

android/src/main/java/com/formbricks/android/model/environment/ActionClassReference.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ import kotlinx.serialization.Serializable
55

66
@Serializable
77
data class ActionClassReference(
8-
@SerializedName("id") val id: String?,
98
@SerializedName("name") val name: String?
109
)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.formbricks.android.model.environment
2+
3+
import com.google.gson.*
4+
import com.google.gson.reflect.TypeToken
5+
import java.lang.reflect.Type
6+
7+
class SegmentFilterResourceDeserializer : JsonDeserializer<SegmentFilterResource> {
8+
override fun deserialize(
9+
json: JsonElement,
10+
typeOfT: Type,
11+
context: JsonDeserializationContext
12+
): SegmentFilterResource {
13+
return if (json.isJsonArray) {
14+
// JSON is an array → treat it as a Group
15+
val listType = object : TypeToken<List<SegmentFilter>>() {}.type
16+
val filters: List<SegmentFilter> = context.deserialize(json, listType)
17+
SegmentFilterResource.Group(filters)
18+
} else {
19+
// JSON is an object → treat it as a Primitive
20+
val prim: SegmentPrimitiveFilter =
21+
context.deserialize(json, SegmentPrimitiveFilter::class.java)
22+
SegmentFilterResource.Primitive(prim)
23+
}
24+
}
25+
}

sonar-project.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ sonar.coverage.exclusions=**/test/**/*,**/androidTest/**/*,**/*.js,**/*.json,\
2525
**/*_Factory.kt,\
2626
**/*_MembersInjector.kt,\
2727
**/FormbricksAPIError.kt,\
28+
**/network/FormbricksService.kt,\
2829
**/Logger.kt,\
2930
**/Guard.kt,\
3031
**/DateExtensions.kt,\

0 commit comments

Comments
 (0)