Skip to content

Commit 07a8299

Browse files
author
Gerrit Garbereder
committed
Add basic activity usecases
1 parent 12d5974 commit 07a8299

File tree

7 files changed

+126
-0
lines changed

7 files changed

+126
-0
lines changed

Task-Tracker-Usecases/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ kotlin {
1616
sourceSets {
1717
val commonMain by getting {
1818
dependencies {
19+
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
1920
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
2021
}
2122
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Activity
4+
import com.garbereder.tasktracker.entities.ActivityCollection
5+
import com.garbereder.tasktracker.entities.Task
6+
import com.garbereder.tasktracker.usecases.UseCase
7+
import kotlinx.datetime.Clock
8+
9+
import kotlinx.datetime.TimeZone
10+
import kotlinx.datetime.toLocalDateTime
11+
12+
class AddActivity(private val collection: ActivityCollection, private val activity: Activity): UseCase<Unit> {
13+
override fun invoke(): Unit = collection.add(activity)
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Activity
4+
import com.garbereder.tasktracker.entities.Task
5+
import com.garbereder.tasktracker.usecases.UseCase
6+
import kotlinx.datetime.Clock
7+
8+
import kotlinx.datetime.TimeZone
9+
import kotlinx.datetime.toLocalDateTime
10+
11+
class StartActivity(private val task: Task): UseCase<Activity> {
12+
override fun invoke(): Activity = Activity("1", Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()), null, task)
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Activity
4+
import com.garbereder.tasktracker.entities.Task
5+
import com.garbereder.tasktracker.usecases.UseCase
6+
import kotlinx.datetime.Clock
7+
8+
import kotlinx.datetime.TimeZone
9+
import kotlinx.datetime.toLocalDateTime
10+
11+
class StopActivity(private val activity: Activity): UseCase<Activity> {
12+
override fun invoke(): Activity = activity.copy(end = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()))
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Activity
4+
import com.garbereder.tasktracker.entities.ActivityCollection
5+
import com.garbereder.tasktracker.entities.Task
6+
import com.garbereder.tasktracker.entities.TaskCollection
7+
import io.mockative.*
8+
import kotlinx.datetime.Clock
9+
import kotlinx.datetime.TimeZone
10+
import kotlinx.datetime.toLocalDateTime
11+
import kotlin.test.Test
12+
import kotlin.test.assertTrue
13+
14+
class AddActivityTest {
15+
16+
@Mock
17+
val collection = mock(classOf<ActivityCollection>())
18+
19+
@Test
20+
fun invoke_activity_callAdd() {
21+
val task = Task("1","TaskName")
22+
val time = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
23+
val activity = Activity("1", time, null, task)
24+
25+
given(collection).invocation { add(activity) }
26+
.thenDoNothing()
27+
28+
AddActivity(collection, activity).invoke()
29+
30+
verify(collection).invocation { add(activity) }
31+
.wasInvoked(exactly = once)
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Task
4+
import kotlinx.datetime.Clock
5+
import kotlinx.datetime.TimeZone
6+
import kotlinx.datetime.toLocalDateTime
7+
import kotlin.test.Test
8+
import kotlin.test.assertTrue
9+
10+
class StartActivityTest {
11+
12+
@Test
13+
fun invoke_noInput_setStart() {
14+
val task = Task("1","TaskName")
15+
val before = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
16+
val activity = StartActivity(task).invoke()
17+
val after = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
18+
19+
assertTrue( activity.id == "1" )
20+
assertTrue( activity.end === null )
21+
assertTrue( activity.start >= before )
22+
assertTrue( activity.start <= after )
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.garbereder.tasktracker.usecases.tasks
2+
3+
import com.garbereder.tasktracker.entities.Activity
4+
import com.garbereder.tasktracker.entities.Task
5+
import kotlinx.datetime.Clock
6+
import kotlinx.datetime.TimeZone
7+
import kotlinx.datetime.toLocalDateTime
8+
import kotlin.test.Test
9+
import kotlin.test.assertTrue
10+
11+
class StopActivityTest {
12+
13+
@Test
14+
fun invoke_noInput_setStart() {
15+
val task = Task("1","TaskName")
16+
val before = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
17+
val activity = Activity("1", before, null, task)
18+
val activity2 = StopActivity(activity).invoke()
19+
val after = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
20+
21+
assertTrue( activity.end === null )
22+
23+
assertTrue( activity2.id == "1" )
24+
assertTrue( activity2.start !== activity2.end )
25+
assertTrue( activity2.end!! >= before )
26+
assertTrue( activity2.end!! <= after )
27+
}
28+
}

0 commit comments

Comments
 (0)