feat: define board detail domain and mutation contracts
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package space.hackenslacker.kanbn4droid.app.boarddetail
|
||||
|
||||
data class BoardDetail(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val lists: List<BoardListDetail>,
|
||||
)
|
||||
|
||||
data class BoardListDetail(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val cards: List<BoardCardSummary>,
|
||||
)
|
||||
|
||||
data class BoardCardSummary(
|
||||
val id: String,
|
||||
val title: String,
|
||||
val tags: List<BoardTagSummary>,
|
||||
val dueAtEpochMillis: Long?,
|
||||
)
|
||||
|
||||
data class BoardTagSummary(
|
||||
val id: String,
|
||||
val name: String,
|
||||
val colorHex: String,
|
||||
)
|
||||
|
||||
sealed interface CardBatchMutationResult {
|
||||
data object Success : CardBatchMutationResult
|
||||
data class PartialSuccess(
|
||||
val failedCardIds: Set<String>,
|
||||
val message: String,
|
||||
) : CardBatchMutationResult
|
||||
|
||||
data class Failure(
|
||||
val message: String,
|
||||
) : CardBatchMutationResult
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package space.hackenslacker.kanbn4droid.app.boarddetail
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Test
|
||||
|
||||
class BoardDetailModelsTest {
|
||||
|
||||
@Test
|
||||
fun boardDetailModelsExposeRequiredFields() {
|
||||
val tag = BoardTagSummary(
|
||||
id = "tag-1",
|
||||
name = "Urgent",
|
||||
colorHex = "#FF0000",
|
||||
)
|
||||
val card = BoardCardSummary(
|
||||
id = "card-1",
|
||||
title = "Fix sync bug",
|
||||
tags = listOf(tag),
|
||||
dueAtEpochMillis = null,
|
||||
)
|
||||
val list = BoardListDetail(
|
||||
id = "list-1",
|
||||
title = "To Do",
|
||||
cards = listOf(card),
|
||||
)
|
||||
val detail = BoardDetail(
|
||||
id = "board-1",
|
||||
title = "Sprint",
|
||||
lists = listOf(list),
|
||||
)
|
||||
|
||||
assertEquals("tag-1", tag.id)
|
||||
assertEquals("Urgent", tag.name)
|
||||
assertEquals("#FF0000", tag.colorHex)
|
||||
assertEquals("card-1", card.id)
|
||||
assertEquals("Fix sync bug", card.title)
|
||||
assertEquals(listOf(tag), card.tags)
|
||||
assertNull(card.dueAtEpochMillis)
|
||||
assertEquals("list-1", list.id)
|
||||
assertEquals("To Do", list.title)
|
||||
assertEquals(listOf(card), list.cards)
|
||||
assertEquals("board-1", detail.id)
|
||||
assertEquals("Sprint", detail.title)
|
||||
assertEquals(listOf(list), detail.lists)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun partialSuccessCarriesFailedCardIds() {
|
||||
val result = CardBatchMutationResult.PartialSuccess(
|
||||
failedCardIds = setOf("card-2", "card-9"),
|
||||
message = "Some cards could not be updated.",
|
||||
)
|
||||
|
||||
assertEquals(setOf("card-2", "card-9"), result.failedCardIds)
|
||||
assertEquals("Some cards could not be updated.", result.message)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user