From 02fdc4b057ff4924bdd817c4ff5ac49132b1eb03 Mon Sep 17 00:00:00 2001 From: dkhawk Date: Tue, 14 May 2024 17:14:37 -0600 Subject: [PATCH] Adds testing for searchByTextRequest --- places-ktx/build.gradle | 10 +++- .../places/ktx/api/net/PlacesClient.kt | 2 - .../places/ktx/api/net/SearchByTextRequest.kt | 20 +++++++ .../ktx/api/net/SearchByTextRequestTest.kt | 55 +++++++++++++++++++ 4 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 places-ktx/src/test/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequestTest.kt diff --git a/places-ktx/build.gradle b/places-ktx/build.gradle index 59f1000..26be68f 100644 --- a/places-ktx/build.gradle +++ b/places-ktx/build.gradle @@ -42,13 +42,20 @@ android { testOptions { unitTests.returnDefaultValues = true } + + buildTypes { + debug { + testCoverageEnabled = true + } + } + namespace "com.google.android.libraries.places.ktx" } dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.9.24' implementation('org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0') - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.0" implementation "com.android.volley:volley:1.2.1" implementation 'androidx.multidex:multidex:2.0.1' api "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.0" @@ -60,4 +67,5 @@ dependencies { testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0" testImplementation "junit:junit:4.13.2" testImplementation "org.mockito:mockito-core:5.11.0" + testImplementation "com.google.truth:truth:1.4.2" } \ No newline at end of file diff --git a/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/PlacesClient.kt b/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/PlacesClient.kt index ddd190e..f24fdc2 100644 --- a/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/PlacesClient.kt +++ b/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/PlacesClient.kt @@ -145,8 +145,6 @@ public suspend fun PlacesClient.awaitIsOpen( * * Fetches the place(s) of interest using a text query. If an error occurred, an [ApiException] will * be thrown. - * - * Only available with Places SDK for Android (New). */ public suspend fun PlacesClient.awaitSearchByText( textQuery: String, diff --git a/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequest.kt b/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequest.kt index 48b45bf..25c2e26 100644 --- a/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequest.kt +++ b/places-ktx/src/main/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequest.kt @@ -17,6 +17,14 @@ package com.google.android.libraries.places.ktx.api.net import com.google.android.libraries.places.api.model.Place import com.google.android.libraries.places.api.net.SearchByTextRequest +public enum class PriceLevel(public val value: Int) { + FREE(0), // Note: not for use in the API call. + INEXPENSIVE(1), + MODERATE(2), + EXPENSIVE(3), + VERY_EXPENSIVE(4) +} + /** * Builds a new [SearchByTextRequest]. * @@ -34,3 +42,15 @@ public fun searchByTextRequest( .apply(actions) .build() } + +public fun SearchByTextRequest.Builder.setPriceLevels( + priceLevels: Collection +): SearchByTextRequest.Builder { + return this.setPriceLevels(priceLevels.map { it.value }) +} + +public fun SearchByTextRequest.Builder.setPriceLevels( + vararg priceLevels: PriceLevel +): SearchByTextRequest.Builder { + return this.setPriceLevels(priceLevels.map { it.value }) +} diff --git a/places-ktx/src/test/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequestTest.kt b/places-ktx/src/test/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequestTest.kt new file mode 100644 index 0000000..09ae49f --- /dev/null +++ b/places-ktx/src/test/java/com/google/android/libraries/places/ktx/api/net/SearchByTextRequestTest.kt @@ -0,0 +1,55 @@ +package com.google.android.libraries.places.ktx.api.net + +import com.google.android.gms.maps.model.LatLng +import com.google.android.gms.tasks.CancellationTokenSource +import com.google.android.libraries.places.api.model.CircularBounds +import com.google.android.libraries.places.api.model.Place +import com.google.android.libraries.places.api.net.SearchByTextRequest +import com.google.common.truth.Truth.assertThat +import org.junit.Test + +internal class SearchByTextRequestTest { + @Test + fun testBuilderNoActions() { + val request = searchByTextRequest( + textQuery = "test query", + placeFields = listOf(Place.Field.NAME) + ) + + assertThat(request.textQuery).isEqualTo("test query") + assertThat(request.placeFields).containsExactly(Place.Field.NAME) + } + + @Test + fun testBuilderWithActions() { + val cancellationToken = CancellationTokenSource().token + val ashland = LatLng(42.193893370553916, -122.7088890892941) + val radiusInMeters = 1500.0 + + val request = searchByTextRequest( + textQuery = "test query", + placeFields = listOf(Place.Field.NAME, Place.Field.ADDRESS), + ) { + setCancellationToken(cancellationToken) + includedType = "national_park" + isOpenNow = true + minRating = 4.0 + setPriceLevels(PriceLevel.MODERATE, PriceLevel.EXPENSIVE) + rankPreference = SearchByTextRequest.RankPreference.RELEVANCE + regionCode = "US" + + locationBias = CircularBounds.newInstance(ashland, radiusInMeters) + } + + assertThat(request.locationBias) + .isEqualTo(CircularBounds.newInstance(ashland, radiusInMeters)) + assertThat(request.isOpenNow).isTrue() + assertThat(request.minRating).isEqualTo(4.0) + assertThat(request.priceLevels) + .containsExactly(PriceLevel.MODERATE.value, PriceLevel.EXPENSIVE.value) + assertThat(request.rankPreference).isEqualTo(SearchByTextRequest.RankPreference.RELEVANCE) + assertThat(request.regionCode).isEqualTo("US") + assertThat(request.includedType).isEqualTo("national_park") + assertThat(request.textQuery).isEqualTo("test query") + } +} \ No newline at end of file