diff --git a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepository.kt b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepository.kt index 61c20e2..480ff37 100644 --- a/app/src/main/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepository.kt +++ b/app/src/main/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepository.kt @@ -86,12 +86,23 @@ class BoardDetailRepository( is BoardsApiResult.Failure -> return sessionResult } + val appendIndex = when ( + val boardDetailResult = apiClient.getBoardDetail( + baseUrl = session.baseUrl, + apiKey = session.apiKey, + boardId = normalizedBoardPublicId, + ) + ) { + is BoardsApiResult.Success -> boardDetailResult.value.lists.size + is BoardsApiResult.Failure -> return BoardsApiResult.Failure(boardDetailResult.message) + } + return apiClient.createList( baseUrl = session.baseUrl, apiKey = session.apiKey, boardPublicId = normalizedBoardPublicId, title = normalizedTitle, - appendIndex = 0, + appendIndex = appendIndex, ) } diff --git a/app/src/test/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepositoryTest.kt b/app/src/test/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepositoryTest.kt index f80d720..55b913e 100644 --- a/app/src/test/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepositoryTest.kt +++ b/app/src/test/java/space/hackenslacker/kanbn4droid/app/boarddetail/BoardDetailRepositoryTest.kt @@ -287,15 +287,43 @@ class BoardDetailRepositoryTest { @Test fun createListDelegatesToApiWithTrimmedIds() = runTest { - val apiClient = FakeBoardDetailApiClient() + val apiClient = FakeBoardDetailApiClient().apply { + boardDetailResult = BoardsApiResult.Success( + BoardDetail( + id = "board-1", + title = "Board", + lists = listOf( + BoardListDetail(id = "list-1", title = "One", cards = emptyList()), + BoardListDetail(id = "list-2", title = "Two", cards = emptyList()), + BoardListDetail(id = "list-3", title = "Three", cards = emptyList()), + ), + ), + ) + } val repository = createRepository(apiClient = apiClient) val result = repository.createList(boardPublicId = " board-1 ", title = " New List ") assertTrue(result is BoardsApiResult.Success<*>) + assertEquals("board-1", apiClient.lastBoardId) assertEquals("board-1", apiClient.lastCreateListBoardPublicId) assertEquals("New List", apiClient.lastCreateListTitle) - assertEquals(0, apiClient.lastCreateListAppendIndex) + assertEquals(3, apiClient.lastCreateListAppendIndex) + } + + @Test + fun createListPropagatesFailureWhenBoardDetailPrefetchFails() = runTest { + val apiClient = FakeBoardDetailApiClient().apply { + boardDetailResult = BoardsApiResult.Failure("Cannot load board") + } + val repository = createRepository(apiClient = apiClient) + + val result = repository.createList(boardPublicId = "board-1", title = "New List") + + assertTrue(result is BoardsApiResult.Failure) + assertEquals("Cannot load board", (result as BoardsApiResult.Failure).message) + assertEquals("board-1", apiClient.lastBoardId) + assertEquals(null, apiClient.lastCreateListBoardPublicId) } @Test