Skip to content

Commit 290fbcf

Browse files
committed
[Update] remove search for characters and comics
1 parent 9f4567c commit 290fbcf

43 files changed

Lines changed: 210 additions & 593 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeCharactersNetwork.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
3+
import com.rumosoft.characters.data.repository.CHARACTERS_LIMIT
44
import com.rumosoft.marvelapi.data.network.CharactersNetwork
55
import com.rumosoft.marvelapi.data.network.HeroesResult
66
import com.rumosoft.marvelapi.data.network.apimodels.HeroDto
77
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
88
import javax.inject.Inject
99

1010
class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
11-
override suspend fun searchHeroes(
11+
override suspend fun getHeroes(
1212
offset: Int,
1313
limit: Int,
14-
nameStartsWith: String
1514
): Result<HeroesResult> {
1615
val heroesResult = HeroesResult(
1716
paginationInfo = PaginationInfo(
1817
current = 0,
1918
total = 0,
2019
),
21-
characters = (offset .. offset + CHARACTERS_SEARCH_LIMIT).map {
20+
characters = (offset .. offset + CHARACTERS_LIMIT).map {
2221
HeroDto(
2322
id = it.toLong(),
2423
name = "character $it",
@@ -33,7 +32,7 @@ class FakeCharactersNetwork @Inject constructor(): CharactersNetwork {
3332
}
3433

3534
override suspend fun getHeroDetails(heroId: Long): Result<HeroDto?> {
36-
val hero = searchHeroes(0, 0, "").getOrNull()?.characters?.find { it.id == heroId }
35+
val hero = getHeroes(0, 0).getOrNull()?.characters?.find { it.id == heroId }
3736
return hero?.let {
3837
Result.success(it)
3938
} ?: Result.failure(Exception("Hero not found"))

app/src/androidTest/java/com/rumosoft/marvelcompose/data/FakeComicsNetwork.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
package com.rumosoft.marvelcompose.data
22

3-
import com.rumosoft.characters.data.repository.CHARACTERS_SEARCH_LIMIT
43
import com.rumosoft.marvelapi.data.network.ComicsNetwork
54
import com.rumosoft.marvelapi.data.network.ComicsResult
65
import com.rumosoft.marvelapi.data.network.apimodels.ComicDto
76
import com.rumosoft.marvelapi.data.network.apimodels.PaginationInfo
87
import javax.inject.Inject
98

109
class FakeComicsNetwork @Inject constructor(): ComicsNetwork {
11-
override suspend fun searchComics(
10+
override suspend fun getComics(
1211
offset: Int,
1312
limit: Int,
14-
titleStartsWith: String
1513
): Result<ComicsResult> {
1614
val comicsResult = ComicsResult(
1715
paginationInfo = PaginationInfo(
1816
current = 0,
1917
total = 0,
2018
),
21-
comics = (offset..offset + CHARACTERS_SEARCH_LIMIT).map {
19+
comics = (offset..offset + limit).map {
2220
ComicDto(
2321
id = it,
2422
title = "comic $it",
Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.rumosoft.characters.presentation.screen
22

3-
import androidx.annotation.StringRes
43
import androidx.compose.foundation.layout.Box
54
import androidx.compose.foundation.layout.padding
65
import androidx.compose.material3.Scaffold
@@ -12,21 +11,15 @@ import androidx.compose.runtime.setValue
1211
import androidx.compose.ui.Modifier
1312
import androidx.compose.ui.test.ExperimentalTestApi
1413
import androidx.compose.ui.test.assertIsDisplayed
15-
import androidx.compose.ui.test.hasContentDescription
1614
import androidx.compose.ui.test.hasText
1715
import androidx.compose.ui.test.junit4.ComposeContentTestRule
18-
import androidx.compose.ui.test.onNodeWithContentDescription
1916
import androidx.compose.ui.test.onNodeWithTag
2017
import androidx.compose.ui.test.onNodeWithText
21-
import androidx.compose.ui.test.performClick
22-
import androidx.compose.ui.test.performTextInput
2318
import androidx.compose.ui.test.performTouchInput
2419
import androidx.compose.ui.test.swipeUp
25-
import androidx.test.platform.app.InstrumentationRegistry
2620
import com.rumosoft.characters.presentation.FakeCharacters
2721
import com.rumosoft.characters.presentation.viewmodel.state.HeroListState
2822
import com.rumosoft.characters.presentation.viewmodel.state.HeroListSuccessResult
29-
import com.rumosoft.components.R
3023
import com.rumosoft.components.presentation.theme.MarvelComposeTheme
3124

3225
fun HeroListScreenTest.heroListRobot(func: HeroListRobot.() -> Unit) =
@@ -39,20 +32,13 @@ class HeroListRobot(private val composeTestRule: ComposeContentTestRule) {
3932
init {
4033
composeTestRule.setContent {
4134
MarvelComposeTheme {
42-
var searchState by remember { mutableStateOf("") }
43-
var showSearchBar by remember { mutableStateOf(false) }
4435
var endReached by remember { mutableStateOf(false) }
4536
if (endReached) {
4637
Text(END_REACHED_TEXT)
4738
}
4839
Scaffold(
4940
topBar = {
50-
CharactersTopBar(
51-
searchText = searchState,
52-
showSearchBar = showSearchBar,
53-
onToggleSearchClick = { showSearchBar = true },
54-
onValueChanged = { searchState = it },
55-
)
41+
CharactersTopBar()
5642
}
5743
) { innerPadding ->
5844
Box(modifier = Modifier.padding(innerPadding)) {
@@ -74,19 +60,6 @@ class HeroListRobot(private val composeTestRule: ComposeContentTestRule) {
7460
}
7561
}
7662

77-
@OptIn(ExperimentalTestApi::class)
78-
fun onCharacterSearched(searchText: String) {
79-
onMagnifierTapped()
80-
composeTestRule.waitUntilExactlyOneExists(hasContentDescription(getString(R.string.search_text)))
81-
composeTestRule.onNodeWithContentDescription(getString(R.string.search_text))
82-
.performClick()
83-
.performTextInput(searchText)
84-
}
85-
86-
fun onMagnifierTapped() {
87-
composeTestRule.onNodeWithContentDescription(getString(R.string.search)).performClick()
88-
}
89-
9063
infix fun verify(func: HeroListResultRobot.() -> Unit) =
9164
HeroListResultRobot(composeTestRule).apply { func() }
9265
}
@@ -96,13 +69,6 @@ class HeroListResultRobot(private val composeTestRule: ComposeContentTestRule) {
9669
textIsDisplayed(name)
9770
}
9871

99-
fun searchIsDisplayed() {
100-
contentDescriptionIsDisplayed(getString(R.string.search_text))
101-
}
102-
103-
fun textIsSearched(name: String) {
104-
textIsDisplayed(name)
105-
}
10672

10773
fun endIsReached() {
10874
composeTestRule.onNodeWithText(END_REACHED_TEXT).assertIsDisplayed()
@@ -117,13 +83,4 @@ class HeroListResultRobot(private val composeTestRule: ComposeContentTestRule) {
11783
composeTestRule.waitUntilExactlyOneExists(hasText(text))
11884
composeTestRule.onNodeWithText(text).assertIsDisplayed()
11985
}
120-
121-
@OptIn(ExperimentalTestApi::class)
122-
fun contentDescriptionIsDisplayed(contentDescription: String) {
123-
composeTestRule.waitUntilExactlyOneExists(hasContentDescription(contentDescription))
124-
composeTestRule.onNodeWithContentDescription(contentDescription).assertIsDisplayed()
125-
}
12686
}
127-
128-
private fun getString(@StringRes stringResource: Int) =
129-
InstrumentationRegistry.getInstrumentation().targetContext.getString(stringResource)

feature-characters/src/androidTest/java/com/rumosoft/characters/presentation/screen/HeroListScreenTest.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,6 @@ class HeroListScreenTest {
1616
}
1717
}
1818

19-
@Test
20-
fun whenMagnifierTappedItShowsSearchTextInput() {
21-
heroListRobot {
22-
onMagnifierTapped()
23-
} verify {
24-
searchIsDisplayed()
25-
}
26-
}
27-
28-
@Test
29-
fun whenCharacterIsSearchedItsShownInSearchTextInput() {
30-
heroListRobot {
31-
onCharacterSearched("searchText")
32-
} verify {
33-
textIsSearched("searchText")
34-
}
35-
}
3619

3720
@Test
3821
fun withoutASwipeUpEndReachedIsNotInvoked() {

feature-characters/src/main/java/com/rumosoft/characters/data/repository/SearchRepositoryImpl.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,28 @@ package com.rumosoft.characters.data.repository
22

33
import com.rumosoft.characters.data.mappers.toHero
44
import com.rumosoft.characters.domain.model.Character
5-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
5+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
66
import com.rumosoft.marvelapi.data.network.CallInProgressException
77
import com.rumosoft.marvelapi.data.network.CharactersNetwork
88
import timber.log.Timber
99
import javax.inject.Inject
1010

11-
const val CHARACTERS_SEARCH_LIMIT = 20
11+
const val CHARACTERS_LIMIT = 20
1212

13-
class SearchRepositoryImpl @Inject constructor(
13+
class CharactersRepositoryImpl @Inject constructor(
1414
private val network: CharactersNetwork,
15-
) : SearchRepository {
15+
) : CharactersRepository {
1616
private var isRequestInProgress = false
1717

18-
override suspend fun performSearch(
19-
nameStartsWith: String,
18+
override suspend fun getCharacters(
2019
page: Int,
2120
): Result<List<Character>> {
2221
if (isRequestInProgress) {
2322
Timber.d("Request is in progress")
2423
return Result.failure(CallInProgressException("Request is in progress"))
2524
}
26-
Timber.d("Performing Network Search")
27-
val networkResult = performNetworkSearch(nameStartsWith, page)
25+
Timber.d("Fetching characters")
26+
val networkResult = performNetworkFetch(page)
2827
if (networkResult.isSuccess) {
2928
Timber.d("Returned results")
3029
}
@@ -44,13 +43,12 @@ class SearchRepositoryImpl @Inject constructor(
4443
return network.getComicThumbnail(comicId)
4544
}
4645

47-
private suspend fun performNetworkSearch(
48-
nameStartsWith: String,
46+
private suspend fun performNetworkFetch(
4947
page: Int,
5048
): Result<List<Character>> {
5149
isRequestInProgress = true
52-
val offset = (page - 1) * CHARACTERS_SEARCH_LIMIT
53-
val networkResult = network.searchHeroes(offset, CHARACTERS_SEARCH_LIMIT, nameStartsWith)
50+
val offset = (page - 1) * CHARACTERS_LIMIT
51+
val networkResult = network.getHeroes(offset, CHARACTERS_LIMIT)
5452
isRequestInProgress = false
5553
return networkResult.map { result ->
5654
result.characters?.map { it.toHero() } ?: emptyList()
Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package com.rumosoft.characters.domain.model
22

3-
import android.net.Uri
4-
import android.os.Bundle
53
import android.os.Parcelable
64
import androidx.annotation.Keep
7-
import androidx.navigation.NavType
8-
import com.rumosoft.marvelapi.infrastructure.extensions.parcelable
95
import kotlinx.parcelize.Parcelize
106
import kotlinx.serialization.Serializable
11-
import kotlinx.serialization.json.Json
127

138
@Keep
149
@Parcelize
@@ -30,16 +25,3 @@ data class Link(
3025
val url: String,
3126
) : Parcelable
3227

33-
val CharacterNavType = object : NavType<Character>(isNullableAllowed = false) {
34-
override fun put(bundle: Bundle, key: String, value: Character) {
35-
bundle.putParcelable(key, value)
36-
}
37-
38-
override fun get(bundle: Bundle, key: String): Character? {
39-
return bundle.parcelable(key) as Character?
40-
}
41-
42-
override fun parseValue(value: String): Character {
43-
return Json.decodeFromString(Uri.decode(value))
44-
}
45-
}

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetCharacterDetailsUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

77
class GetCharacterDetailsUseCase @Inject constructor(
8-
private val repository: SearchRepository,
8+
private val repository: CharactersRepository,
99
) {
1010
suspend operator fun invoke(
1111
characterId: Long,

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/GetComicThumbnailUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.rumosoft.characters.domain.usecase
22

3-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
3+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
44
import javax.inject.Inject
55

66
class GetComicThumbnailUseCase @Inject constructor(
7-
private val repository: SearchRepository,
7+
private val repository: CharactersRepository,
88
) {
99
suspend operator fun invoke(comicId: Int): Result<String> =
1010
repository.getThumbnail(comicId)
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.rumosoft.characters.domain.usecase
22

33
import com.rumosoft.characters.domain.model.Character
4-
import com.rumosoft.characters.domain.usecase.interfaces.SearchRepository
4+
import com.rumosoft.characters.domain.usecase.interfaces.CharactersRepository
55
import javax.inject.Inject
66

7-
class SearchUseCase @Inject constructor(
8-
private val repository: SearchRepository,
7+
class GetCharactersUseCase @Inject constructor(
8+
private val repository: CharactersRepository,
99
) {
10-
suspend operator fun invoke(nameStart: String, page: Int): Result<List<Character>> =
11-
repository.performSearch(nameStart, page)
10+
suspend operator fun invoke(page: Int): Result<List<Character>> =
11+
repository.getCharacters(page)
1212
}

feature-characters/src/main/java/com/rumosoft/characters/domain/usecase/interfaces/SearchRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package com.rumosoft.characters.domain.usecase.interfaces
22

33
import com.rumosoft.characters.domain.model.Character
44

5-
interface SearchRepository {
6-
suspend fun performSearch(nameStartsWith: String, page: Int): Result<List<Character>>
5+
interface CharactersRepository {
6+
suspend fun getCharacters(page: Int): Result<List<Character>>
77
suspend fun getCharacterDetails(heroId: Long): Result<Character?>
88
suspend fun getThumbnail(comicId: Int): Result<String>
99
}

0 commit comments

Comments
 (0)