diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml
new file mode 100644
index 0000000..852add7
--- /dev/null
+++ b/.idea/androidTestResultsUserPreferences.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index bb4912a..f4fc197 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -66,6 +66,7 @@ dependencies {
// implementation(libs.androidx.material3.android)
testImplementation(libs.junit)
testImplementation("junit:junit:4.12")
+ testImplementation("junit:junit:4.12")
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
@@ -121,8 +122,21 @@ dependencies {
testImplementation("junit:junit:4.13")
- testImplementation("org.mockito:mockito-core:5.2.1")
+ testImplementation("org.mockito:mockito-core:5.7.0")
+ androidTestImplementation("org.mockito:mockito-core:5.7.0")
testImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
+ androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.2.1")
+
+ // Use mockito-android for Android instrumentation tests
+ androidTestImplementation ("org.mockito:mockito-android:4.4.0")
+ androidTestImplementation ("androidx.arch.core:core-testing:2.2.0")
+
+ testImplementation("io.mockk:mockk:1.12.0")
+ androidTestImplementation("io.mockk:mockk-android:1.12.0")
+
+
+
+
//truth
testImplementation ("com.google.truth:truth:1.0.1")
diff --git a/app/src/main/java/com/example/kocelainterview/common/di/repositorymodule/RepositoryModule.kt b/app/src/main/java/com/example/kocelainterview/common/di/repositorymodule/RepositoryModule.kt
index c6ca33e..83c663a 100644
--- a/app/src/main/java/com/example/kocelainterview/common/di/repositorymodule/RepositoryModule.kt
+++ b/app/src/main/java/com/example/kocelainterview/common/di/repositorymodule/RepositoryModule.kt
@@ -38,7 +38,8 @@ object RepositoryModule {
context.applicationContext,
ShipDatabase::class.java,
"ship_database"
- ).fallbackToDestructiveMigration().build()
+ ).fallbackToDestructiveMigration()
+ .build()
}
@Provides
diff --git a/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDetailDto.kt b/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDetailDto.kt
index 5eca6ec..e647e0c 100644
--- a/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDetailDto.kt
+++ b/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDetailDto.kt
@@ -9,7 +9,7 @@ data class ShipDetailDto(
val `class`: Int,
val course_deg: Any,
val home_port: String,
- val image: String,
+ val image: String?,
val imo: Int,
val mmsi: Int,
val roles: List,
@@ -27,5 +27,5 @@ data class ShipDetailDto(
)
fun ShipDetailDto.toShipDetail():ShipDetail{
- return ShipDetail(active, home_port, ship_id, ship_name, ship_type,image, weight_kg, year_built)
+ return ShipDetail(active, image, home_port, ship_id, ship_name, ship_type, weight_kg, year_built)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDto.kt b/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDto.kt
index 12a998d..9f837e3 100644
--- a/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDto.kt
+++ b/app/src/main/java/com/example/kocelainterview/data/remote/dto/ShipDto.kt
@@ -7,26 +7,12 @@ import com.example.kocelainterview.domain.model.Ship
data class ShipDto(
- // val abs: Int,
+
val active: Boolean,
-// val attempted_landings: Any?,
-// val `class`: Int,
-// val course_deg: Any,
- // val home_port: String,
val image: String?,
-// val imo: Int,
-// val mmsi: Int,
-// val roles: List,
val ship_id: String,
- // val ship_model: Any?,
val ship_name: String,
-// val ship_type: String,
- // val speed_kn: Int,
-// val status: String,
-// val successful_landings: Any?,
-// val url: String,
val weight_kg: Int,
- // val weight_lbs: Int,
val year_built: Int
)
diff --git a/app/src/main/java/com/example/kocelainterview/domain/model/Ship.kt b/app/src/main/java/com/example/kocelainterview/domain/model/Ship.kt
index f2462da..a76b777 100644
--- a/app/src/main/java/com/example/kocelainterview/domain/model/Ship.kt
+++ b/app/src/main/java/com/example/kocelainterview/domain/model/Ship.kt
@@ -3,7 +3,6 @@ package com.example.kocelainterview.domain.model
data class Ship(
-
val active: Boolean,
val image: String?,
val ship_id: String,
diff --git a/app/src/main/java/com/example/kocelainterview/domain/model/ShipDetail.kt b/app/src/main/java/com/example/kocelainterview/domain/model/ShipDetail.kt
index 553c3be..da9610e 100644
--- a/app/src/main/java/com/example/kocelainterview/domain/model/ShipDetail.kt
+++ b/app/src/main/java/com/example/kocelainterview/domain/model/ShipDetail.kt
@@ -2,7 +2,7 @@ package com.example.kocelainterview.domain.model
data class ShipDetail(
val active: Boolean,
- val image: String,
+ val image: String?,
val home_port: String,
val ship_id: String,
val ship_name: String,
diff --git a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/SearchBar.kt b/app/src/main/java/com/example/kocelainterview/presentation/search_controller/search_screen/SearchBar.kt
similarity index 96%
rename from app/src/main/java/com/example/kocelainterview/presentation/ships_screen/SearchBar.kt
rename to app/src/main/java/com/example/kocelainterview/presentation/search_controller/search_screen/SearchBar.kt
index 82bbd75..bfbfa86 100644
--- a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/SearchBar.kt
+++ b/app/src/main/java/com/example/kocelainterview/presentation/search_controller/search_screen/SearchBar.kt
@@ -1,4 +1,4 @@
-package com.example.kocelainterview.presentation.ships_screen
+package com.example.kocelainterview.presentation.search_controller.search_screen
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
diff --git a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListItem.kt b/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListItem.kt
deleted file mode 100644
index 447ba56..0000000
--- a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListItem.kt
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.example.kocelainterview.presentation.ships_screen
-
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.IntrinsicSize
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
-import androidx.compose.material3.Card
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-import coil.compose.AsyncImage
-
-import com.example.kocelainterview.domain.model.Ship
-
-
-@Composable
-fun ShipListItem(
- modifier:Modifier = Modifier,
- ship: Ship,
-) {
- Card(
- modifier = modifier,
- //elevation = 4.dp
-
- ) {
- Row (
- modifier = Modifier
- .fillMaxWidth()
- .height(IntrinsicSize.Max)
- .padding(16.dp)
- ){
- AsyncImage(
- model = ship.image,
- contentDescription = ship.ship_name,
- modifier = Modifier
- .weight(1f)
- .height(150.dp)
- )
- Spacer(modifier = Modifier.width(16.dp))
- Column(
- modifier = Modifier
- .weight(3f)
- .fillMaxWidth(),
- verticalArrangement = Arrangement.Center
- ){
- Text(
- text = "ShipName: ${ship.ship_name}",
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.fillMaxWidth()
- )
-
- Spacer(modifier = Modifier.height(8.dp))
-
- Text(
- text = "YearBuilt: ${ship.year_built}",
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.fillMaxWidth()
- )
-
- Spacer(modifier = Modifier.height(8.dp))
- Text(
- text = "Active Status: ${ship.active}",
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.fillMaxWidth()
- )
- Spacer(modifier = Modifier.height(8.dp))
-
- Text(
- text = "Weight in KG: ${ship.weight_kg}",
- style = MaterialTheme.typography.bodyMedium,
- modifier = Modifier.fillMaxWidth()
- )
- }
- }
- }
-}
-
-
-
diff --git a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListScreen.kt b/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListScreen.kt
index 27972c5..fd177ac 100644
--- a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListScreen.kt
+++ b/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListScreen.kt
@@ -20,8 +20,8 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
-import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -34,10 +34,10 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavController
-import coil.annotation.ExperimentalCoilApi
import coil.compose.rememberAsyncImagePainter
import com.example.kocelainterview.domain.model.Ship
import com.example.kocelainterview.presentation.navigation.Screen
+import com.example.kocelainterview.presentation.search_controller.search_screen.SearchBar
import com.example.kocelainterview.presentation.search_controller.search_view_model.SearchViewModel
@@ -48,9 +48,10 @@ fun ShipListScreen(
navController: NavController,
viewModel: ShipListViewModel = hiltViewModel(),
- view:SearchViewModel = hiltViewModel()
+ searchViewModel:SearchViewModel = hiltViewModel()
) {
val state = viewModel.state.value
+ val searchState by searchViewModel.state.collectAsState()
var searchText by remember { mutableStateOf("") }
@@ -71,7 +72,7 @@ fun ShipListScreen(
searchQuery = searchText,
onSearchQueryChanged = { searchText = it }, // Update the search query
onSearchClicked = {
- view.searchShip(searchText)
+ searchViewModel.searchShip(searchText)
}
)
diff --git a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListViewModel.kt b/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListViewModel.kt
index 754f5c8..e69bc55 100644
--- a/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListViewModel.kt
+++ b/app/src/main/java/com/example/kocelainterview/presentation/ships_screen/ShipListViewModel.kt
@@ -23,7 +23,7 @@ class ShipListViewModel @Inject constructor(
getShips()
}
- private fun getShips() {
+ fun getShips() {
viewModelScope.launch {
getShipsUseCase() // No search query parameter
.onEach { result ->