diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3262ac54a4..9770315b35 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' @@ -53,7 +53,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' @@ -63,7 +63,7 @@ jobs: # Only write to the cache for builds on the 'develop' branch cache-read-only: false - run: ./gradlew lint - - uses: yutailang0119/action-android-lint@v4.0.0 + - uses: yutailang0119/action-android-lint@v5.0.0 with: report-path: app/build/reports/lint-results-debug.xml continue-on-error: true @@ -83,7 +83,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' @@ -97,7 +97,7 @@ jobs: run: ./gradlew ktlintCheck - name: Annotate ktlint errors in the PR continue-on-error: false - uses: yutailang0119/action-ktlint@v4 + uses: yutailang0119/action-ktlint@v5 with: report-path: build/reports/ktlint/*.xml build: @@ -116,7 +116,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index df51046868..63b37bbf0a 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -26,7 +26,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' @@ -62,7 +62,7 @@ jobs: keyPassword: ${{ secrets.KEY_PASSWORD }} env: BUILD_TOOLS_VERSION: ${{ env.BUILD_TOOL_VERSION }} - - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.0 + - uses: wzieba/Firebase-Distribution-Github-Action@v1.7.1 with: serviceCredentialsFileContent: ${{ secrets.FIREBASE_CREDENTIALS_FILE_CONTENT }} appId: ${{ secrets.FIREBASE_STAGING_APP_ID_PACKAGE_COM_HEDVIG_APP }} diff --git a/.github/workflows/unused-resources.yml b/.github/workflows/unused-resources.yml index cfa66b586a..1b313389b7 100644 --- a/.github/workflows/unused-resources.yml +++ b/.github/workflows/unused-resources.yml @@ -22,7 +22,7 @@ jobs: LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' diff --git a/.github/workflows/upload-to-play-store.yml b/.github/workflows/upload-to-play-store.yml index a12806b0b3..8af9264fc1 100644 --- a/.github/workflows/upload-to-play-store.yml +++ b/.github/workflows/upload-to-play-store.yml @@ -26,7 +26,7 @@ jobs: LOKALISE_ID: ${{ secrets.LOKALISE_ID }} LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }} - name: Setup JDK 17 - uses: actions/setup-java@v4.7.0 + uses: actions/setup-java@v4.7.1 with: java-version: '21' distribution: 'zulu' diff --git a/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml b/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml index a5918e68ab..568741e54f 100644 --- a/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml +++ b/app/feature/feature-travel-certificate/src/main/AndroidManifest.xml @@ -1,4 +1,2 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt b/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt index 595ebff73e..78c89562d0 100644 --- a/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt +++ b/app/feature/feature-travel-certificate/src/test/kotlin/com/hedvig/android/feature/travelcertificate/GetTravelCertificateSpecificationsUseCaseTest.kt @@ -13,6 +13,9 @@ import com.hedvig.android.apollo.octopus.test.OctopusFakeResolver import com.hedvig.android.apollo.test.TestApolloClientRule import com.hedvig.android.core.common.test.isLeft import com.hedvig.android.core.common.test.isRight +import com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl +import com.hedvig.android.feature.travelcertificate.data.TravelCertificateData +import com.hedvig.android.feature.travelcertificate.data.TravelCertificateError import com.hedvig.android.logger.TestLogcatLoggingRule import kotlinx.coroutines.test.runTest import kotlinx.datetime.LocalDate @@ -39,7 +42,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { @Test fun `when the feature flag is on and the network request fails, we get not Error response`() = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) @@ -48,14 +51,14 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { assertThat( result, - ).isLeft().isInstanceOf() + ).isLeft().isInstanceOf() } @Test fun `when the feature flag is on and the network response contains no travel certificate, we get not eligible`() = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) @@ -67,13 +70,13 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { assertThat( result, - ).isLeft().isInstanceOf() + ).isLeft().isInstanceOf() } @Test fun `when the passed contractId is wrong, we get not eligible`() = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) @@ -85,13 +88,13 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { assertThat( result, - ).isLeft().isInstanceOf() + ).isLeft().isInstanceOf() } @Test fun `when the passed contractId is right, we get TravelCertificateData`() = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) @@ -103,7 +106,6 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { contractSpecifications = listOf( buildTravelCertificateContractSpecification { contractId = "id" - email = "email" minStartDate = LocalDate.parse("2023-02-02") maxStartDate = LocalDate.parse("2023-03-02") maxDurationDays = 1 @@ -117,8 +119,8 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { val result = travelCertificateUseCase.invoke("id") assertThat(result).isRight().isEqualTo( - com.hedvig.android.feature.travelcertificate.data.TravelCertificateData( - com.hedvig.android.feature.travelcertificate.data.TravelCertificateData.TravelCertificateSpecification( + TravelCertificateData( + TravelCertificateData.TravelCertificateSpecification( contractId = "id", email = "email", maxDurationDays = 1, @@ -132,7 +134,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { @Test fun `when the passed contractId is correct, but the contract is not eligible, we get not eligible`() = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) @@ -144,7 +146,6 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { contractSpecifications = listOf( buildTravelCertificateContractSpecification { contractId = "id" - email = "email" minStartDate = LocalDate.parse("2023-02-02") maxStartDate = LocalDate.parse("2023-03-02") maxDurationDays = 1 @@ -159,7 +160,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { assertThat( result, - ).isLeft().isInstanceOf() + ).isLeft().isInstanceOf() } @Test @@ -167,25 +168,25 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { @TestParameter contractSupportsTravelCertificate: Boolean, ) = runTest { val travelCertificateUseCase = - com.hedvig.android.feature.travelcertificate.data.GetTravelCertificateSpecificationsUseCaseImpl( + GetTravelCertificateSpecificationsUseCaseImpl( apolloClient, ) + val contractId = "contractId" apolloClient.enqueueTestResponse( TravelCertificateSpecificationsQuery(), TravelCertificateSpecificationsQuery.Data(OctopusFakeResolver) { currentMember = buildMember { + activeContracts = listOf( + buildContract { + this.id = if (contractSupportsTravelCertificate) contractId else "non-matching ID" + this.supportsTravelCertificate = true + }, + ) travelCertificateSpecifications = buildTravelCertificateSpecification { - activeContracts = listOf( - buildContract { - id = "contractId" - supportsTravelCertificate = contractSupportsTravelCertificate - }, - ) contractSpecifications = listOf( buildTravelCertificateContractSpecification { - contractId = "contractId" - email = "email" + this.contractId = contractId minStartDate = LocalDate.parse("2023-02-02") maxStartDate = LocalDate.parse("2023-03-02") maxDurationDays = 1 @@ -200,9 +201,9 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { if (contractSupportsTravelCertificate) { assertThat(result).isRight().isEqualTo( - com.hedvig.android.feature.travelcertificate.data.TravelCertificateData( - com.hedvig.android.feature.travelcertificate.data.TravelCertificateData.TravelCertificateSpecification( - contractId = "contractId", + TravelCertificateData( + TravelCertificateData.TravelCertificateSpecification( + contractId = contractId, email = "email", maxDurationDays = 1, dateRange = LocalDate.parse("2023-02-02")..LocalDate.parse("2023-03-02"), @@ -213,7 +214,7 @@ internal class GetTravelCertificateSpecificationsUseCaseTest { } else { assertThat( result, - ).isLeft().isInstanceOf() + ).isLeft().isInstanceOf() } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc49715e8d..6b52b0b34b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,86 +5,86 @@ targetSdkVersion = "34" minSdkVersion = "23" # lint versions -lintApi = "31.8.2" -lintGradlePlugin = "8.8.2" +lintApi = "31.10.0" +lintGradlePlugin = "8.10.0" # gradlePlugin versions -androidGradlePlugin = "8.8.2" -apolloAdapters = "0.0.4" -apollo = "4.1.1" +androidGradlePlugin = "8.10.0" +apolloAdapters = "0.0.6" +apollo = "4.2.0" cacheFix = "3.0.1" crashlytics = "3.0.3" -datadogPlugin = "1.15.0" +datadogPlugin = "1.16.0" doctor = "0.10.0" -easylauncher = "6.4.0" +easylauncher = "6.4.1" googleServices = "4.4.2" -gradleDevelocity = "3.19.2" +gradleDevelocity = "4.0.1" kotlin = "2.1.21" -kotlinter = "5.0.1" -ksp = "2.1.10-1.0.31" -ktor = "3.1.1" +kotlinter = "5.0.2" +ksp = "2.1.21-2.0.1" +ktor = "3.1.3" license = "0.9.8" -molecule = "2.0.0" +molecule = "2.1.0" squareSortDependencies = "0.14" # Other versions sorted alphabetically -accompanist = "0.37.2" +accompanist = "0.37.3" androidx-activity-compose = "1.10.1" androidx-activity-core = "1.10.1" androidx-annotation = "1.9.1" -androidx-composeBom = "2025.02.00" +androidx-composeBom = "2025.05.00" #todo: remove this alpha when stable compose version bumps to 1.8 -androidx-datastore = "1.1.3" +androidx-datastore = "1.1.6" androidx-junit = "1.2.1" -androidx-lifecycle = "2.8.7" -androidx-navigation = "2.8.7" +androidx-lifecycle = "2.9.0" +androidx-navigation = "2.9.0" androidx-other-appCompat = "1.7.0" androidx-other-browser = "1.8.0" androidx-other-constraintLayout = "2.2.0" -androidx-other-core = "1.15.0" -androidx-other-splashscreen = "1.2.0-beta01" +androidx-other-core = "1.16.0" +androidx-other-splashscreen = "1.2.0-beta02" androidx-other-startup = "1.2.0" -androidx-other-workManager = "2.10.0" +androidx-other-workManager = "2.10.1" androidx-test = "1.6.1" androidx-testRunners = "1.6.2" -androidx-ui-alpha = "1.8.0-beta03" +androidx-ui-alpha = "1.8.1" androidxGraphicsShapes = "1.0.1" -arrow = "2.0.1" +arrow = "2.1.2" assertK = "0.28.1" atomicfu = "0.27.0" coil = "2.7.0" composeRichtext = "1.0.0-alpha02" coreLibraryDesugaring = "2.1.5" coroutines = "1.10.2" -datadog = "2.18.0" -dependencyAnalysis = "2.10.1" +datadog = "2.21.0" +dependencyAnalysis = "2.17.0" firebaseCrashlyticsBuildtools = "3.0.3" hedvigAuthlib = "1.4.3" junit = "4.13.2" -koinBom = "4.0.2" +koinBom = "4.0.4" kotlinx-serialization = "1.8.1" kotlinxDatetime = "0.6.2" -media3 = "1.5.1" +media3 = "1.7.1" modalSheet = "0.7.0" moneta = "1.4.4" navigationRecentsUrlSharing = "1.0.0" okhttp = "4.12.0" -okio = "3.10.2" +okio = "3.11.0" paging = "3.3.6" playReview = "2.0.2" -playServicesBase = "18.5.0" -retrofit = "2.11.0" +playServicesBase = "18.7.0" +retrofit = "3.0.0" robolectric = "4.14.1" -room = "2.7.0-rc01" +room = "2.7.1" slimber = "2.0.0" -sqlite = "2.5.0-rc01" +sqlite = "2.5.1" testParameterInjector = "1.18" timber = "5.0.1" turbine = "1.2.0" unleash = "1.0.0" uuid = "0.8.4" zXing = "3.5.3" -zoomable = "1.6.2" +zoomable = "1.7.0" [libraries] @@ -163,7 +163,7 @@ datadog-sdk-okhttp = { module = "com.datadoghq:dd-sdk-android-okhttp", version.r datadog-sdk-rum = { module = "com.datadoghq:dd-sdk-android-rum", version.ref = "datadog" } datadog-sdk-trace = { module = "com.datadoghq:dd-sdk-android-trace", version.ref = "datadog" } firebase-analytics = { module = "com.google.firebase:firebase-analytics-ktx" } -firebase-bom = "com.google.firebase:firebase-bom:33.10.0" +firebase-bom = "com.google.firebase:firebase-bom:33.13.0" firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics-ktx" } firebase-dynamicLinks = { module = "com.google.firebase:firebase-dynamic-links" } firebase-messaging = { module = "com.google.firebase:firebase-messaging-ktx" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2733ed5dc3..5c82cb0324 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index d28f713b4f..2a99dc4e0a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -33,7 +33,7 @@ dependencyResolutionManagement { } plugins { - id("com.gradle.develocity") version "3.19.2" + id("com.gradle.develocity") version "4.0.1" } develocity {