feat: define board detail domain and mutation contracts
This commit is contained in:
@@ -76,6 +76,8 @@ Kanbn4Droid is an unofficial app to connect to and manipulate data stored in sel
|
|||||||
|
|
||||||
**Board detail view**
|
**Board detail view**
|
||||||
|
|
||||||
|
- Current status: domain model and mutation contracts are defined in `app/src/main/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailModels.kt`, with unit coverage in `app/src/test/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailModelsTest.kt`.
|
||||||
|
|
||||||
- The board detail view shows the lists in the board as vertical lists.
|
- The board detail view shows the lists in the board as vertical lists.
|
||||||
- Each list has it's title at the top.
|
- Each list has it's title at the top.
|
||||||
- Clicking on the title of a list allows editing the title.
|
- Clicking on the title of a list allows editing the title.
|
||||||
|
|||||||
@@ -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