Skip to content

Commit 7a1d0a2

Browse files
nbradburyclaude
andauthored
RS Posts: Add unit tests for ViewModel and Tab (#22661)
* RS Posts: Add unit tests for PostRsListViewModel and PostRsListTab Add basic test coverage for the experimental RS post list feature: - PostRsListViewModelTest (31 tests): init state, search, author filter, open/create post, menu actions, pending confirmations, network checks, and isAuthorFilterSupported - PostRsListTabTest (8 tests): tab statuses, sort order, uniqueness Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix empty line after brace warning * RS Posts: Fix flaky ViewModel tests with StandardTestDispatcher Use StandardTestDispatcher instead of UnconfinedTestDispatcher to prevent initTab coroutines from dispatching to Dispatchers.IO and racing against Dispatchers.resetMain() between tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f4255ee commit 7a1d0a2

File tree

2 files changed

+505
-0
lines changed

2 files changed

+505
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.wordpress.android.ui.postsrs
2+
3+
import org.assertj.core.api.Assertions.assertThat
4+
import org.junit.Test
5+
import uniffi.wp_api.PostStatus
6+
import uniffi.wp_api.WpApiParamOrder
7+
8+
class PostRsListTabTest {
9+
@Test
10+
fun `PUBLISHED tab contains Publish and Private statuses`() {
11+
assertThat(PostRsListTab.PUBLISHED.statuses)
12+
.containsExactly(PostStatus.Publish, PostStatus.Private)
13+
}
14+
15+
@Test
16+
fun `DRAFTS tab contains Draft and Pending statuses`() {
17+
assertThat(PostRsListTab.DRAFTS.statuses)
18+
.containsExactly(PostStatus.Draft, PostStatus.Pending)
19+
}
20+
21+
@Test
22+
fun `SCHEDULED tab contains only Future status`() {
23+
assertThat(PostRsListTab.SCHEDULED.statuses)
24+
.containsExactly(PostStatus.Future)
25+
}
26+
27+
@Test
28+
fun `TRASHED tab contains only Trash status`() {
29+
assertThat(PostRsListTab.TRASHED.statuses)
30+
.containsExactly(PostStatus.Trash)
31+
}
32+
33+
@Test
34+
fun `SCHEDULED tab uses ascending order`() {
35+
assertThat(PostRsListTab.SCHEDULED.order)
36+
.isEqualTo(WpApiParamOrder.ASC)
37+
}
38+
39+
@Test
40+
fun `non-SCHEDULED tabs use descending order`() {
41+
assertThat(PostRsListTab.PUBLISHED.order)
42+
.isEqualTo(WpApiParamOrder.DESC)
43+
assertThat(PostRsListTab.DRAFTS.order)
44+
.isEqualTo(WpApiParamOrder.DESC)
45+
assertThat(PostRsListTab.TRASHED.order)
46+
.isEqualTo(WpApiParamOrder.DESC)
47+
}
48+
49+
@Test
50+
fun `all tabs have exactly four entries`() {
51+
assertThat(PostRsListTab.entries).hasSize(4)
52+
}
53+
54+
@Test
55+
fun `all statuses across tabs are unique`() {
56+
val allStatuses = PostRsListTab.entries
57+
.flatMap { it.statuses }
58+
assertThat(allStatuses).doesNotHaveDuplicates()
59+
}
60+
}

0 commit comments

Comments
 (0)