Skip to content

Commit eee7598

Browse files
author
sds100
committed
Merge branch 'feature/32-searching-a-mapcode-without-territory' into develop
2 parents 1bc1503 + 0c0e0a1 commit eee7598

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

app/src/main/java/com/mapcode/map/MapViewModel.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,17 @@ class MapViewModel @Inject constructor(
170170

171171
//first try to decode it as a mapcode, if that fails then try to geocode it as an address
172172
viewModelScope.launch(dispatchers.io) {
173-
val resolveAddressResult: Result<Location>
173+
val resolveAddressResult: Result<Location> =
174+
useCase.decodeMapcode(query).recoverCatching {
175+
val mapcode = mapcodes.value[mapcodeIndex.value]
176+
val queryWithTerritory = "${mapcode.territory.name} $query"
174177

175-
val decodeMapcodeResult = useCase.decodeMapcode(query)
178+
val decodeQueryWithCurrentTerritoryResult = useCase.decodeMapcode(queryWithTerritory)
176179

177-
if (decodeMapcodeResult.isSuccess) {
178-
resolveAddressResult = decodeMapcodeResult
179-
} else {
180-
resolveAddressResult = useCase.geocode(query)
181-
}
180+
decodeQueryWithCurrentTerritoryResult.getOrThrow()
181+
}.recoverCatching {
182+
useCase.geocode(query).getOrThrow()
183+
}
182184

183185
onResolveAddressQuery(query, resolveAddressResult)
184186
}

app/src/test/java/com/mapcode/map/MapViewModelTest.kt

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,6 @@ internal class MapViewModelTest {
593593
addresses = listOf("Street, City, Country"),
594594
mapcodes = listOf(
595595
Mapcode("AB.CD", Territory.NLD),
596-
Mapcode("VX.YZ", Territory.NLD)
597596
)
598597
)
599598
)
@@ -603,7 +602,7 @@ internal class MapViewModelTest {
603602

604603
assertThat(viewModel.zoom.value).isEqualTo(17f)
605604
}
606-
605+
607606
@Test
608607
fun `zoom into street level after searching a latitude`() = runTest {
609608
viewModel.queryLatitude("1.0")
@@ -619,4 +618,41 @@ internal class MapViewModelTest {
619618

620619
assertThat(viewModel.zoom.value).isEqualTo(17f)
621620
}
621+
622+
@Test
623+
fun `use current territory if no mapcode territory specified when searching for mapcode`() = runTest {
624+
useCase.knownLocations.add(
625+
FakeLocation(
626+
0.0,
627+
0.0,
628+
addresses = listOf("1 Street, City, Country"),
629+
mapcodes = listOf(
630+
Mapcode("XY.ZA", Territory.NLD),
631+
Mapcode("XYZ.ABC", Territory.AAA),
632+
)
633+
)
634+
)
635+
useCase.knownLocations.add(
636+
FakeLocation(
637+
1.0,
638+
1.0,
639+
addresses = listOf("2 Street, City, Country"),
640+
mapcodes = listOf(
641+
Mapcode("AB.CD", Territory.NLD),
642+
Mapcode("FGH.JKL", Territory.AAA),
643+
)
644+
)
645+
)
646+
647+
viewModel.onCameraMoved(0.0, 0.0, 0f)
648+
runCurrent()
649+
650+
viewModel.onTerritoryClick() // check that it uses the user's chosen territory
651+
runCurrent()
652+
653+
viewModel.queryAddress("FGH.JKL")
654+
runCurrent()
655+
656+
assertThat(viewModel.location.value).isEqualTo(Location(1.0, 1.0))
657+
}
622658
}

0 commit comments

Comments
 (0)