Skip to content

Commit 8263c62

Browse files
author
Gerrit Garbereder
committed
Add entities impl
1 parent c94ea8b commit 8263c62

File tree

8 files changed

+215
-0
lines changed

8 files changed

+215
-0
lines changed

.github/workflows/build.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,9 @@ jobs:
4545
ln -s ../gradlew &&
4646
./gradlew check &&
4747
./gradlew publishToMavenLocal
48+
49+
cd ../Task-Tracker-Entities-Impl &&
50+
ln -s ../gradle &&
51+
ln -s ../gradlew &&
52+
./gradlew check &&
53+
./gradlew publishToMavenLocal
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
plugins {
2+
kotlin("multiplatform") version "1.8.21"
3+
id("maven-publish")
4+
}
5+
6+
group = "com.garbereder.tasktracker.entities-impl"
7+
version = "1.0-SNAPSHOT"
8+
9+
repositories {
10+
mavenLocal()
11+
mavenCentral()
12+
}
13+
14+
kotlin {
15+
sourceSets {
16+
val commonMain by getting {
17+
dependencies {
18+
implementation("com.garbereder.tasktracker.entities:Task-Tracker-Entities:1.0-SNAPSHOT")
19+
implementation("com.garbereder.tasktracker.usecases:Task-Tracker-Usecases:1.0-SNAPSHOT")
20+
}
21+
}
22+
}
23+
jvm {
24+
jvmToolchain(17)
25+
withJava()
26+
testRuns["test"].executionTask.configure {
27+
useJUnitPlatform()
28+
}
29+
}
30+
js(IR) {
31+
nodejs()
32+
compilations.all {
33+
compileTaskProvider.configure {
34+
compilerOptions.freeCompilerArgs.add("-Xir-minimized-member-names=false")
35+
}
36+
}
37+
}
38+
val hostOs = System.getProperty("os.name")
39+
val isMingwX64 = hostOs.startsWith("Windows")
40+
val nativeTarget = when {
41+
hostOs == "Mac OS X" -> macosX64("native")
42+
hostOs == "Linux" -> linuxX64("native")
43+
isMingwX64 -> mingwX64("native")
44+
else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
45+
}
46+
47+
sourceSets {
48+
val commonMain by getting
49+
val commonTest by getting {
50+
dependencies {
51+
implementation(kotlin("test"))
52+
}
53+
}
54+
val jvmMain by getting
55+
val jvmTest by getting
56+
val jsMain by getting
57+
val jsTest by getting
58+
val nativeMain by getting
59+
val nativeTest by getting
60+
}
61+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
kotlin.code.style=official
2+
kotlin.js.compiler=ir
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
2+
rootProject.name = "Task-Tracker-Entities-Impl"
3+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.garbereder.tasktracker.entities
2+
3+
import com.garbereder.tasktracker.usecases.tasks.TaskCollectionFactory
4+
5+
class TaskCollectionFactoryImpl : TaskCollectionFactory {
6+
override fun create(): TaskCollection = TaskCollectionImpl()
7+
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.garbereder.tasktracker.entities
2+
3+
class TaskCollectionImpl : TaskCollection {
4+
5+
private val list = mutableListOf<Task>()
6+
override fun add(task: Task) {
7+
if (list.contains(task))
8+
throw DuplicateTaskException(task)
9+
list.add(task)
10+
}
11+
12+
override fun iterator(): Iterator<Task> = list.iterator()
13+
14+
override fun remove(task: Task) {
15+
if (!list.contains(task))
16+
throw TaskNotFoundException(task)
17+
list.remove(task)
18+
}
19+
20+
override fun size(): Int = list.size
21+
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.garbereder.tasktracker.entities
2+
3+
import kotlin.test.Test
4+
import kotlin.test.assertTrue
5+
6+
class TaskCollectionFactoryImplTests {
7+
8+
@Test
9+
fun create_inInput_isTaskCollection() {
10+
assertTrue {
11+
TaskCollectionFactoryImpl().create() is TaskCollection
12+
}
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.garbereder.tasktracker.entities
2+
3+
import kotlin.test.Test
4+
import kotlin.test.assertEquals
5+
import kotlin.test.assertFailsWith
6+
7+
class ListTaskCollectionImpl {
8+
9+
@Test
10+
fun add_once_oneEntry() {
11+
val col = TaskCollectionImpl()
12+
assertEquals(0, col.size())
13+
14+
val task = Task("TaskId", "TaskName")
15+
col.add(task)
16+
17+
assertEquals(1, col.size())
18+
assertEquals(task, col.iterator().next())
19+
}
20+
21+
@Test
22+
fun add_twice_twoEntries() {
23+
val col = TaskCollectionImpl()
24+
assertEquals(0, col.size())
25+
26+
val task = Task("TaskId", "TaskName")
27+
val task2 = Task("TaskId2", "TaskName2")
28+
col.add(task)
29+
col.add(task2)
30+
31+
assertEquals(2, col.size())
32+
val it = col.iterator()
33+
assertEquals(task, it.next())
34+
assertEquals(task2, it.next())
35+
}
36+
37+
@Test
38+
fun add_twice_exception() {
39+
val col = TaskCollectionImpl()
40+
assertEquals(0, col.size())
41+
42+
val task = Task("TaskId", "TaskName")
43+
col.add(task)
44+
45+
assertFailsWith<DuplicateTaskException> {
46+
col.add(task)
47+
}
48+
49+
assertEquals(1, col.size())
50+
assertEquals(task, col.iterator().next())
51+
}
52+
53+
@Test
54+
fun remove_existingEntry_emptyList() {
55+
val col = TaskCollectionImpl()
56+
val task = Task("TaskId", "TaskName")
57+
58+
col.add(task)
59+
assertEquals(1, col.size())
60+
col.remove(task)
61+
assertEquals(0, col.size())
62+
}
63+
64+
@Test
65+
fun remove_existingEntry_removedEntry() {
66+
val col = TaskCollectionImpl()
67+
val task = Task("TaskId", "TaskName")
68+
val task2 = Task("TaskId2", "TaskName")
69+
70+
col.add(task)
71+
col.add(task2)
72+
assertEquals(2, col.size())
73+
col.remove(task)
74+
assertEquals(1, col.size())
75+
assertEquals(task2, col.iterator().next())
76+
}
77+
78+
@Test
79+
fun remove_empty_exception() {
80+
val col = TaskCollectionImpl()
81+
val task = Task("TaskId", "TaskName")
82+
83+
assertFailsWith<TaskNotFoundException> {
84+
col.remove(task)
85+
}
86+
}
87+
88+
@Test
89+
fun remove_nonEmptyNotExistingEntry_exception() {
90+
val col = TaskCollectionImpl()
91+
val task = Task("TaskId", "TaskName")
92+
val task2 = Task("TaskId2", "TaskName2")
93+
94+
col.add(task)
95+
assertFailsWith<TaskNotFoundException> {
96+
col.remove(task2)
97+
}
98+
}
99+
}

0 commit comments

Comments
 (0)