Skip to content

Commit 0148bf1

Browse files
committed
Add usecase to overwrite duratino
1 parent 647db3c commit 0148bf1

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

Task-Tracker-Usecases/src/commonMain/kotlin/app/tasktrackersystems/tasktracker/usecases/UseCases.kt

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import app.tasktrackersystems.tasktracker.usecases.tasks.AddTaskDuration
77
import app.tasktrackersystems.tasktracker.usecases.tasks.ListTasks
88
import app.tasktrackersystems.tasktracker.usecases.tasks.RemoveTask
99
import app.tasktrackersystems.tasktracker.usecases.tasks.RenameTask
10+
import app.tasktrackersystems.tasktracker.usecases.tasks.SetTaskDuration
1011
import app.tasktrackersystems.tasktracker.usecases.tasks.TaskCollectionReader
1112

1213
class UseCases(
@@ -23,6 +24,7 @@ class UseCases(
2324
fun createAddTask(taskName: String): UseCase<Task> = AddTask(taskCollection, taskName)
2425
fun createListTasks(): UseCase<Iterator<Task>> = ListTasks(taskCollection)
2526
fun createAddTaskDuration(task: Task, duration: Long): UseCase<Task> = AddTaskDuration(taskCollection, task, duration)
27+
fun createSetTaskDuration(task: Task, duration: Long): UseCase<Task> = SetTaskDuration(taskCollection, task, duration)
2628
fun createRemoveTask(task: Task): UseCase<Unit> = RemoveTask(taskCollection, task)
2729
fun createRenameTask(task: Task, taskName: String): UseCase<Task> = RenameTask(taskCollection, task, taskName)
2830
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package app.tasktrackersystems.tasktracker.usecases.tasks
2+
3+
import app.tasktrackersystems.tasktracker.entities.Task
4+
import app.tasktrackersystems.tasktracker.entities.TaskCollection
5+
import app.tasktrackersystems.tasktracker.usecases.UseCase
6+
7+
class SetTaskDuration(private val collection: TaskCollection, private var task: Task, private val duration: Long) :
8+
UseCase<Task> {
9+
override fun invoke(): Task {
10+
val task2 = task.copy(totalDuration = duration)
11+
collection.replace(task, task2)
12+
return task2
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package app.tasktrackersystems.tasktracker.usecases.tasks
2+
3+
import app.tasktrackersystems.tasktracker.entities.Task
4+
import app.tasktrackersystems.tasktracker.entities.TaskCollection
5+
import app.tasktrackersystems.tasktracker.usecases.UseCases
6+
import io.mockative.Mock
7+
import io.mockative.classOf
8+
import io.mockative.given
9+
import io.mockative.mock
10+
import io.mockative.once
11+
import io.mockative.thenDoNothing
12+
import io.mockative.verify
13+
import kotlin.test.Test
14+
15+
class SetTaskDurationTests {
16+
@Mock
17+
val collection = mock(classOf<TaskCollection>())
18+
19+
@Test
20+
fun setDuration() {
21+
val task = Task("TaskName", 0)
22+
val task2 = Task("TaskName", 5)
23+
given(collection).invocation { replace(task, task2) }
24+
.thenDoNothing()
25+
26+
UseCases.createUseCasesFromReaders(object : TaskCollectionReader {
27+
override fun read(): TaskCollection = collection
28+
}).createSetTaskDuration(task, 5).invoke()
29+
30+
verify(collection).invocation { replace(task, task2) }
31+
.wasInvoked(exactly = once)
32+
}
33+
34+
@Test
35+
fun setDurationMultipleTimes() {
36+
val task = Task("TaskName", 0)
37+
val task2a = Task("TaskName", 5)
38+
val task2b = Task("TaskName", 10)
39+
given(collection).invocation { replace(task, task2a) }
40+
.thenDoNothing()
41+
given(collection).invocation { replace(task2a, task2b) }
42+
.thenDoNothing()
43+
44+
val setDuration = UseCases.createUseCasesFromReaders(object : TaskCollectionReader {
45+
override fun read(): TaskCollection = collection
46+
}).createSetTaskDuration(task, 5)
47+
val setDuration2 = UseCases.createUseCasesFromReaders(object : TaskCollectionReader {
48+
override fun read(): TaskCollection = collection
49+
}).createSetTaskDuration(task, 10)
50+
51+
setDuration.invoke()
52+
setDuration2.invoke()
53+
54+
verify(collection).invocation { replace(task, task2a) }
55+
.wasInvoked(exactly = once)
56+
verify(collection).invocation { replace(task, task2b) }
57+
.wasInvoked(exactly = once)
58+
}
59+
}

0 commit comments

Comments
 (0)