Skip to content

Commit bb85be5

Browse files
author
github-actions
committed
Merge remote-tracking branch 'origin/main'
2 parents e95f5f3 + 27fe2a7 commit bb85be5

File tree

3 files changed

+45
-45
lines changed

3 files changed

+45
-45
lines changed

app/src/main/java/com/example/android/architecture/blueprints/todoapp/data/DefaultTasksRepository.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class DefaultTasksRepository(
4141

4242
override suspend fun createTask(title: String, description: String): Task {
4343
val task = Task(title = title, description = description)
44-
tasksDao.insertTask(task.toLocalModel())
44+
tasksDao.insertTask(task.toLocal())
4545
saveTasksToNetwork()
4646
return task
4747
}
@@ -52,7 +52,7 @@ class DefaultTasksRepository(
5252
description = description
5353
) ?: throw Exception("Task (id $taskId) not found")
5454

55-
tasksDao.insertTask(task.toLocalModel())
55+
tasksDao.insertTask(task.toLocal())
5656
saveTasksToNetwork()
5757
}
5858

@@ -61,7 +61,7 @@ class DefaultTasksRepository(
6161
loadTasksFromNetwork()
6262
}
6363
return withContext(coroutineDispatcher) {
64-
tasksDao.getTasks().toExternalModels()
64+
tasksDao.getTasks().toExternal()
6565
}
6666
}
6767

@@ -72,7 +72,7 @@ class DefaultTasksRepository(
7272
override fun getTasksStream(): Flow<List<Task>> {
7373
return tasksDao.observeTasks().map { tasks ->
7474
withContext(coroutineDispatcher) {
75-
tasks.toExternalModels()
75+
tasks.toExternal()
7676
}
7777
}
7878
}
@@ -82,7 +82,7 @@ class DefaultTasksRepository(
8282
}
8383

8484
override fun getTaskStream(taskId: String): Flow<Task?> {
85-
return tasksDao.observeTaskById(taskId).map { it.toExternalModel() }
85+
return tasksDao.observeTaskById(taskId).map { it.toExternal() }
8686
}
8787

8888
/**
@@ -95,7 +95,7 @@ class DefaultTasksRepository(
9595
if (forceUpdate) {
9696
loadTasksFromNetwork()
9797
}
98-
return tasksDao.getTaskById(taskId)?.toExternalModel()
98+
return tasksDao.getTaskById(taskId)?.toExternal()
9999
}
100100

101101
override suspend fun completeTask(taskId: String) {
@@ -141,15 +141,15 @@ class DefaultTasksRepository(
141141

142142
tasksDao.deleteTasks()
143143
remoteTasks.forEach { task ->
144-
tasksDao.insertTask(task.toTaskEntity())
144+
tasksDao.insertTask(task.toLocal())
145145
}
146146
}
147147
}
148148

149149
private suspend fun saveTasksToNetwork() {
150150
withContext(coroutineDispatcher) {
151151
val localTasks = tasksDao.getTasks()
152-
tasksNetworkDataSource.saveTasks(localTasks.toNetworkModels())
152+
tasksNetworkDataSource.saveTasks(localTasks.toNetwork())
153153
}
154154
}
155155
}

app/src/main/java/com/example/android/architecture/blueprints/todoapp/data/ModelMappingExt.kt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,28 @@ import com.example.android.architecture.blueprints.todoapp.data.source.network.T
2424
* Data model mapping extension functions. There are three model types:
2525
*
2626
* - Task: External model exposed to other layers in the architecture.
27-
* Obtained using `toExternalModel`.
27+
* Obtained using `toExternal`.
2828
*
2929
* - NetworkTask: Internal model used to represent a task from the network. Obtained using
30-
* `toNetworkModel`.
30+
* `toNetwork`.
3131
*
3232
* - LocalTask: Internal model used to represent a task stored locally in a database. Obtained
33-
* using `toLocalModel`.
33+
* using `toLocal`.
3434
*
3535
*/
3636

3737
// External to local
38-
fun Task.toLocalModel() = LocalTask(
38+
fun Task.toLocal() = LocalTask(
3939
id = id,
4040
title = title,
4141
description = description,
4242
isCompleted = isCompleted,
4343
)
4444

45-
fun List.toLocalModels() = map(Task::toLocalModel)
45+
fun List.toLocal() = map(Task::toLocal)
4646

4747
// Local to External
48-
fun LocalTask.toExternalModel() = Task(
48+
fun LocalTask.toExternal() = Task(
4949
id = id,
5050
title = title,
5151
description = description,
@@ -55,38 +55,38 @@ fun LocalTask.toExternalModel() = Task(
5555
// Note: JvmName is used to provide a unique name for each extension function with the same name.
5656
// Without this, type erasure will cause compiler errors because these methods will have the same
5757
// signature on the JVM.
58-
@JvmName("taskEntitiesToExternalModels")
59-
fun List.toExternalModels() = map(LocalTask::toExternalModel)
58+
@JvmName("localToExternal")
59+
fun List.toExternal() = map(LocalTask::toExternal)
6060

6161
// Network to Local
62-
fun NetworkTask.toTaskEntity() = LocalTask(
62+
fun NetworkTask.toLocal() = LocalTask(
6363
id = id,
6464
title = title,
6565
description = shortDescription,
6666
isCompleted = (status == TaskStatus.COMPLETE),
6767
)
6868

69-
@JvmName("networkTasksToTaskEntities")
70-
fun List.toTaskEntities() = map(NetworkTask::toTaskEntity)
69+
@JvmName("networkToLocal")
70+
fun List.toLocal() = map(NetworkTask::toLocal)
7171

7272
// Local to Network
73-
fun LocalTask.toNetworkModel() = NetworkTask(
73+
fun LocalTask.toNetwork() = NetworkTask(
7474
id = id,
7575
title = title,
7676
shortDescription = description,
7777
status = if (isCompleted) { TaskStatus.COMPLETE } else { TaskStatus.ACTIVE }
7878
)
7979

80-
fun List.toNetworkModels() = map(LocalTask::toNetworkModel)
80+
fun List.toNetwork() = map(LocalTask::toNetwork)
8181

8282
// External to Network
83-
fun Task.toNetworkModel() = toLocalModel().toNetworkModel()
83+
fun Task.toNetwork() = toLocal().toNetwork()
8484

85-
@JvmName("tasksToNetworkTasks")
86-
fun List.toNetworkModels() = map(Task::toNetworkModel)
85+
@JvmName("externalToNetwork")
86+
fun List.toNetwork() = map(Task::toNetwork)
8787

8888
// Network to External
89-
fun NetworkTask.toExternalModel() = toTaskEntity().toExternalModel()
89+
fun NetworkTask.toExternal() = toLocal().toExternal()
9090

91-
@JvmName("networkTasksToTasks")
92-
fun List.toExternalModels() = map(NetworkTask::toExternalModel)
91+
@JvmName("networkToExternal")
92+
fun List.toExternal() = map(NetworkTask::toExternal)

app/src/test/java/com/example/android/architecture/blueprints/todoapp/data/DefaultTasksRepositoryTest.kt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ class DefaultTasksRepositoryTest {
3636
private val task2 = Task(title = "Title2", description = "Description2")
3737
private val task3 = Task(title = "Title3", description = "Description3")
3838
private val newTask = Task(title = "Title new", description = "Description new")
39-
private val networkTasks = listOf(task1, task2).toNetworkModels().sortedBy { it.id }
40-
private val localTasks = listOf(task3.toLocalModel()).sortedBy { it.id }
39+
private val networkTasks = listOf(task1, task2).toNetwork().sortedBy { it.id }
40+
private val localTasks = listOf(task3.toLocal()).sortedBy { it.id }
4141

4242
private val newTasks = listOf(newTask).sortedBy { it.id }
4343
private lateinit var tasksNetworkDataSource: FakeNetworkDataSource
@@ -81,7 +81,7 @@ class DefaultTasksRepositoryTest {
8181
val initial = tasksRepository.getTasks(forceUpdate = true)
8282

8383
// Change the remote data source
84-
tasksNetworkDataSource.tasks = newTasks.toNetworkModels().toMutableList()
84+
tasksNetworkDataSource.tasks = newTasks.toNetwork().toMutableList()
8585

8686
// Load the tasks again without forcing a refresh
8787
val second = tasksRepository.getTasks()
@@ -97,21 +97,21 @@ class DefaultTasksRepositoryTest {
9797
val tasks = tasksRepository.getTasks(true)
9898

9999
// Then tasks are loaded from the remote data source
100-
assertThat(tasks).isEqualTo(networkTasks.toExternalModels())
100+
assertThat(tasks).isEqualTo(networkTasks.toExternal())
101101
}
102102

103103
@Test
104104
fun saveTask_savesToLocalAndRemote() = runTest {
105105
// Make sure newTask is not in the remote or local datasources
106-
assertThat(tasksNetworkDataSource.tasks).doesNotContain(newTask.toNetworkModel())
107-
assertThat(tasksLocalDataSource.tasks).doesNotContain(newTask.toLocalModel())
106+
assertThat(tasksNetworkDataSource.tasks).doesNotContain(newTask.toNetwork())
107+
assertThat(tasksLocalDataSource.tasks).doesNotContain(newTask.toLocal())
108108

109109
// When a task is saved to the tasks repository
110110
val newTask = tasksRepository.createTask(newTask.title, newTask.description)
111111

112112
// Then the remote and local sources are called
113-
assertThat(tasksNetworkDataSource.tasks).contains(newTask.toNetworkModel())
114-
assertThat(tasksLocalDataSource.tasks?.contains(newTask.toLocalModel()))
113+
assertThat(tasksNetworkDataSource.tasks).contains(newTask.toNetwork())
114+
assertThat(tasksLocalDataSource.tasks?.contains(newTask.toLocal()))
115115
}
116116

117117
@Test
@@ -120,7 +120,7 @@ class DefaultTasksRepositoryTest {
120120
val tasks = tasksRepository.getTasks()
121121

122122
// Set a different list of tasks in REMOTE
123-
tasksNetworkDataSource.tasks = newTasks.toNetworkModels().toMutableList()
123+
tasksNetworkDataSource.tasks = newTasks.toNetwork().toMutableList()
124124

125125
// But if tasks are cached, subsequent calls load from cache
126126
val cachedTasks = tasksRepository.getTasks()
@@ -151,7 +151,7 @@ class DefaultTasksRepositoryTest {
151151
tasksNetworkDataSource.tasks = null
152152

153153
// The repository fetches from the local source
154-
assertThat(tasksRepository.getTasks()).isEqualTo(localTasks.toExternalModels())
154+
assertThat(tasksRepository.getTasks()).isEqualTo(localTasks.toExternal())
155155
}
156156

157157
@Test(expected = Exception::class)
@@ -171,8 +171,8 @@ class DefaultTasksRepositoryTest {
171171
// Forcing an update will fetch tasks from remote
172172
val newTasks = tasksRepository.getTasks(true)
173173

174-
assertThat(newTasks).isEqualTo(networkTasks.toExternalModels())
175-
assertThat(newTasks).isEqualTo(tasksLocalDataSource.tasks?.toExternalModels())
174+
assertThat(newTasks).isEqualTo(networkTasks.toExternal())
175+
assertThat(newTasks).isEqualTo(tasksLocalDataSource.tasks?.toExternal())
176176
assertThat(tasksLocalDataSource.tasks).isEqualTo(initialLocal)
177177
}
178178

@@ -210,11 +210,11 @@ class DefaultTasksRepositoryTest {
210210
@Test
211211
fun getTask_repositoryCachesAfterFirstApiCall() = runTest {
212212
// Obtain a task from the local data source
213-
tasksLocalDataSource.tasks = mutableListOf(task1.toLocalModel())
213+
tasksLocalDataSource.tasks = mutableListOf(task1.toLocal())
214214
val initial = tasksRepository.getTask(task1.id)
215215

216216
// Change the tasks on the remote
217-
tasksNetworkDataSource.tasks = newTasks.toNetworkModels().toMutableList()
217+
tasksNetworkDataSource.tasks = newTasks.toNetwork().toMutableList()
218218

219219
// Obtain the same task again
220220
val second = tasksRepository.getTask(task1.id)
@@ -226,12 +226,12 @@ class DefaultTasksRepositoryTest {
226226
@Test
227227
fun getTask_forceRefresh() = runTest {
228228
// Trigger the repository to load data, which loads from remote and caches
229-
tasksNetworkDataSource.tasks = mutableListOf(task1.toNetworkModel())
229+
tasksNetworkDataSource.tasks = mutableListOf(task1.toNetwork())
230230
val task1FirstTime = tasksRepository.getTask(task1.id, forceUpdate = true)
231231
assertThat(task1FirstTime?.id).isEqualTo(task1.id)
232232

233233
// Configure the remote data source to return a different task
234-
tasksNetworkDataSource.tasks = mutableListOf(task2.toNetworkModel())
234+
tasksNetworkDataSource.tasks = mutableListOf(task2.toNetwork())
235235

236236
// Force refresh
237237
val task1SecondTime = tasksRepository.getTask(task1.id, true)
@@ -246,8 +246,8 @@ class DefaultTasksRepositoryTest {
246246
fun clearCompletedTasks() = runTest {
247247
val completedTask = task1.copy(isCompleted = true)
248248
tasksLocalDataSource.tasks = mutableListOf(
249-
completedTask.toLocalModel(),
250-
task2.toLocalModel()
249+
completedTask.toLocal(),
250+
task2.toLocal()
251251
)
252252
tasksRepository.clearCompletedTasks()
253253

0 commit comments

Comments
 (0)