From 2e1e138e1c9abad40895dc17bd002acc0053acb0 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Wed, 12 Aug 2026 13:13:23 +0200 Subject: [PATCH 1/2] feature flag gates the request --- .../src/main/graphql/QueryHome.graphql | 4 +-- .../home/home/data/GetHomeDataUseCase.kt | 28 ++++++++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/feature/feature-home/src/main/graphql/QueryHome.graphql b/app/feature/feature-home/src/main/graphql/QueryHome.graphql index 4b94f35902..818064dadb 100644 --- a/app/feature/feature-home/src/main/graphql/QueryHome.graphql +++ b/app/feature/feature-home/src/main/graphql/QueryHome.graphql @@ -1,4 +1,4 @@ -query Home($claimsHistoryFlag: Boolean!, $resumeClaimEnabled: Boolean!) { +query Home($claimsHistoryFlag: Boolean!, $resumeClaimEnabled: Boolean!, $disableShopSessions: Boolean!) { currentMember { firstName resumableClaimIntent @include(if: $resumeClaimEnabled) { @@ -80,7 +80,7 @@ query Home($claimsHistoryFlag: Boolean!, $resumeClaimEnabled: Boolean!) { } } } - ongoingShopSessions { + ongoingShopSessions @skip(if: $disableShopSessions) { id display { title diff --git a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt index 352badbe9d..7c36d466f8 100644 --- a/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt +++ b/app/feature/feature-home/src/main/kotlin/com/hedvig/android/feature/home/home/data/GetHomeDataUseCase.kt @@ -78,7 +78,7 @@ internal class GetHomeDataUseCaseImpl( ) .flatMapLatest { (resumeClaimEnabled, disableShopSessions) -> combine( - apolloClient.query(HomeQuery(true, resumeClaimEnabled)) + apolloClient.query(HomeQuery(true, resumeClaimEnabled, disableShopSessions)) .fetchPolicy(if (forceNetworkFetch) FetchPolicy.NetworkOnly else FetchPolicy.CacheAndNetwork) .safeFlow(), flow { @@ -156,21 +156,17 @@ internal class GetHomeDataUseCaseImpl( val otherCrossSellsData = crossSellsData.otherCrossSells.map { it.toCrossSell() } - val ongoingShopSessions = if (disableShopSessions) { - emptyList() - } else { - homeQueryData.currentMember.ongoingShopSessions.map { session -> - OngoingShopSession( - id = session.id, - title = session.display.title, - subtitle = session.display.subtitle, - monthlyNet = session.display.monthlyNet?.let { - UiMoney(it.amount, UiCurrencyCode.fromCurrencyCode(it.currencyCode)) - }, - resumeUrl = session.display.resumeUrl, - pillowImageUrl = session.display.pillowImage?.src, - ) - } + val ongoingShopSessions = homeQueryData.currentMember.ongoingShopSessions.orEmpty().map { session -> + OngoingShopSession( + id = session.id, + title = session.display.title, + subtitle = session.display.subtitle, + monthlyNet = session.display.monthlyNet?.let { + UiMoney(it.amount, UiCurrencyCode.fromCurrencyCode(it.currencyCode)) + }, + resumeUrl = session.display.resumeUrl, + pillowImageUrl = session.display.pillowImage?.src, + ) } val recommendedAddon = crossSellsData.recommendedAddon?.let { RecommendedAddon( From 6304c36d24362d115c4443ebb1634744725c3066 Mon Sep 17 00:00:00 2001 From: mariiapanasetskaia Date: Wed, 12 Aug 2026 13:20:06 +0200 Subject: [PATCH 2/2] test change --- .../home/home/data/GetHomeUseCaseTest.kt | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/app/feature/feature-home/src/test/kotlin/com/hedvig/android/feature/home/home/data/GetHomeUseCaseTest.kt b/app/feature/feature-home/src/test/kotlin/com/hedvig/android/feature/home/home/data/GetHomeUseCaseTest.kt index 1ff82688c1..426d524c3f 100644 --- a/app/feature/feature-home/src/test/kotlin/com/hedvig/android/feature/home/home/data/GetHomeUseCaseTest.kt +++ b/app/feature/feature-home/src/test/kotlin/com/hedvig/android/feature/home/home/data/GetHomeUseCaseTest.kt @@ -104,7 +104,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = GetHomeDataUseCaseImpl( apolloClient.apply { registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestResponse( @@ -153,7 +153,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = GetHomeDataUseCaseImpl( apolloClient.apply { registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestResponse( @@ -188,7 +188,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { importantMessages = List(3) { index -> @@ -230,7 +230,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { importantMessages = emptyList() @@ -259,7 +259,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { claimsActive = listOf( @@ -301,7 +301,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { claimsActive = emptyList() @@ -330,7 +330,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { activeContracts = emptyList() @@ -377,7 +377,7 @@ internal class GetHomeUseCaseTest { testClock.now().toLocalDateTime(timeZone).date } apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolverWithFilledLists) { currentMember = buildMember { activeContracts = listOf( @@ -419,7 +419,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { activeContracts = emptyList() @@ -472,7 +472,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, false), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { resumableClaimIntent = null @@ -545,7 +545,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, false), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestResponse( @@ -607,7 +607,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, false), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestResponse( @@ -659,7 +659,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestResponse( @@ -702,7 +702,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders() apolloClient.registerTestResponse( - HomeQuery(true, true), + HomeQuery(true, true, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { crossSellV2 = buildCrossSellV2 { @@ -768,7 +768,7 @@ internal class GetHomeUseCaseTest { // The primary HomeQuery gate succeeds; the two auxiliary chat signals fail at the network level. // The screen must still load (Right) with those signals folded to safe defaults rather than blanking. apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, false), HomeQuery.Data(OctopusFakeResolver), ) apolloClient.registerTestNetworkError(UnreadMessageCountQuery()) @@ -793,7 +793,7 @@ internal class GetHomeUseCaseTest { val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, false), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { ongoingShopSessions = listOf( @@ -839,7 +839,7 @@ internal class GetHomeUseCaseTest { } @Test - fun `ongoing shop sessions are dropped when the kill switch is on`() = runTest { + fun `ongoing shop sessions are not requested when the kill switch is on`() = runTest { val featureManager = FakeFeatureManager( mapOf( Feature.ENABLE_NEW_CONVERSATION_FROM_INBOX to false, @@ -849,19 +849,13 @@ internal class GetHomeUseCaseTest { ) val getHomeDataUseCase = testUseCaseWithoutReminders(featureManager) + // The response is registered for disableShopSessions = true only. If the field were still asked for, no + // registered response would match the sent variables and the query would fail instead of returning data. apolloClient.registerTestResponse( - HomeQuery(true, false), + HomeQuery(true, false, true), HomeQuery.Data(OctopusFakeResolver) { currentMember = buildMember { - ongoingShopSessions = listOf( - buildShopSession { - id = "session-1" - display = buildShopSessionDisplay { - title = "Home + Accident" - resumeUrl = "https://hedvig.com/resume/session-1" - } - }, - ) + ongoingShopSessions = emptyList() } }, )