11package com.android.contacts.data.settings.repository
22
3+ import app.cash.turbine.test
34import com.android.contacts.data.settings.model.DisplayOrder
45import com.android.contacts.data.settings.model.DisplaySettings
56import com.android.contacts.data.settings.model.PhoneticNameDisplay
@@ -26,80 +27,122 @@ class DisplaySettingsRepositoryImplTest {
2627 )
2728
2829 @Test
29- fun getDisplaySettings_whenPrimaryValuesAreStored_mapsToGivenNameFirst () = runTest {
30+ fun observeDisplaySettings_whenPrimaryValuesAreStored_mapsToGivenNameFirst () = runTest {
3031 givenStoredValues(
3132 sortOrder = ContactsPreferences .SORT_ORDER_PRIMARY ,
3233 displayOrder = ContactsPreferences .DISPLAY_ORDER_PRIMARY ,
3334 phoneticNameDisplay = ContactsPreferences .PHONETIC_NAME_DISPLAY_SHOW_ALWAYS ,
3435 )
3536
36- val settings = repository.getDisplaySettings()
37+ repository.observeDisplaySettings().test {
38+ val settings = awaitItem()
3739
38- assertEquals(SortOrder .GIVEN_NAME_FIRST , settings.sortOrder)
39- assertEquals(DisplayOrder .GIVEN_NAME_FIRST , settings.displayOrder)
40- assertEquals(PhoneticNameDisplay .SHOW_ALWAYS , settings.phoneticNameDisplay)
40+ assertEquals(SortOrder .GIVEN_NAME_FIRST , settings.sortOrder)
41+ assertEquals(DisplayOrder .GIVEN_NAME_FIRST , settings.displayOrder)
42+ assertEquals(PhoneticNameDisplay .SHOW_ALWAYS , settings.phoneticNameDisplay)
43+ cancelAndIgnoreRemainingEvents()
44+ }
4145 }
4246
4347 @Test
44- fun getDisplaySettings_whenAlternativeValuesAreStored_mapsToFamilyNameFirst () = runTest {
48+ fun observeDisplaySettings_whenAlternativeValuesAreStored_mapsToFamilyNameFirst () = runTest {
4549 givenStoredValues(
4650 sortOrder = ContactsPreferences .SORT_ORDER_ALTERNATIVE ,
4751 displayOrder = ContactsPreferences .DISPLAY_ORDER_ALTERNATIVE ,
4852 phoneticNameDisplay = ContactsPreferences .PHONETIC_NAME_DISPLAY_HIDE_IF_EMPTY ,
4953 )
5054
51- val settings = repository.getDisplaySettings()
55+ repository.observeDisplaySettings().test {
56+ val settings = awaitItem()
5257
53- assertEquals(SortOrder .FAMILY_NAME_FIRST , settings.sortOrder)
54- assertEquals(DisplayOrder .FAMILY_NAME_FIRST , settings.displayOrder)
55- assertEquals(PhoneticNameDisplay .HIDE_IF_EMPTY , settings.phoneticNameDisplay)
58+ assertEquals(SortOrder .FAMILY_NAME_FIRST , settings.sortOrder)
59+ assertEquals(DisplayOrder .FAMILY_NAME_FIRST , settings.displayOrder)
60+ assertEquals(PhoneticNameDisplay .HIDE_IF_EMPTY , settings.phoneticNameDisplay)
61+ cancelAndIgnoreRemainingEvents()
62+ }
5663 }
5764
5865 @Test
59- fun getDisplaySettings_whenStoredValuesAreUnknown_fallsBackToPrimaryOptions () = runTest {
66+ fun observeDisplaySettings_whenStoredValuesAreUnknown_fallsBackToPrimaryOptions () = runTest {
6067 givenStoredValues(
6168 sortOrder = UNKNOWN_PREFERENCE_VALUE ,
6269 displayOrder = UNKNOWN_PREFERENCE_VALUE ,
6370 phoneticNameDisplay = UNKNOWN_PREFERENCE_VALUE ,
6471 )
6572
66- val settings = repository.getDisplaySettings()
73+ repository.observeDisplaySettings().test {
74+ val settings = awaitItem()
6775
68- assertEquals(SortOrder .GIVEN_NAME_FIRST , settings.sortOrder)
69- assertEquals(DisplayOrder .GIVEN_NAME_FIRST , settings.displayOrder)
70- assertEquals(PhoneticNameDisplay .SHOW_ALWAYS , settings.phoneticNameDisplay)
76+ assertEquals(SortOrder .GIVEN_NAME_FIRST , settings.sortOrder)
77+ assertEquals(DisplayOrder .GIVEN_NAME_FIRST , settings.displayOrder)
78+ assertEquals(PhoneticNameDisplay .SHOW_ALWAYS , settings.phoneticNameDisplay)
79+ cancelAndIgnoreRemainingEvents()
80+ }
7181 }
7282
7383 @Test
74- fun getDisplaySettings_whenOptionsAreChangeable_reportsThemAsChangeable () = runTest {
84+ fun observeDisplaySettings_whenOptionsAreChangeable_reportsThemAsChangeable () = runTest {
7585 givenStoredValues()
7686 givenOptionsChangeable(true )
7787
78- val settings = repository.getDisplaySettings()
79-
80- assertEquals(
81- DisplaySettings (
82- sortOrder = SortOrder .GIVEN_NAME_FIRST ,
83- isSortOrderChangeable = true ,
84- displayOrder = DisplayOrder .GIVEN_NAME_FIRST ,
85- isDisplayOrderChangeable = true ,
86- phoneticNameDisplay = PhoneticNameDisplay .SHOW_ALWAYS ,
87- isPhoneticNameDisplayChangeable = true ,
88- ),
89- settings,
90- )
88+ repository.observeDisplaySettings().test {
89+ assertEquals(
90+ DisplaySettings (
91+ sortOrder = SortOrder .GIVEN_NAME_FIRST ,
92+ isSortOrderChangeable = true ,
93+ displayOrder = DisplayOrder .GIVEN_NAME_FIRST ,
94+ isDisplayOrderChangeable = true ,
95+ phoneticNameDisplay = PhoneticNameDisplay .SHOW_ALWAYS ,
96+ isPhoneticNameDisplayChangeable = true ,
97+ ),
98+ awaitItem(),
99+ )
100+ cancelAndIgnoreRemainingEvents()
101+ }
91102 }
92103
93104 @Test
94- fun getDisplaySettings_whenOptionsAreLocked_reportsThemAsNotChangeable () = runTest {
105+ fun observeDisplaySettings_whenOptionsAreLocked_reportsThemAsNotChangeable () = runTest {
95106 givenStoredValues()
96107 givenOptionsChangeable(false )
97108
98- val settings = repository.getDisplaySettings()
109+ repository.observeDisplaySettings().test {
110+ val settings = awaitItem()
99111
100- assertFalse(settings.isSortOrderChangeable)
101- assertFalse(settings.isDisplayOrderChangeable)
102- assertFalse(settings.isPhoneticNameDisplayChangeable)
112+ assertFalse(settings.isSortOrderChangeable)
113+ assertFalse(settings.isDisplayOrderChangeable)
114+ assertFalse(settings.isPhoneticNameDisplayChangeable)
115+ cancelAndIgnoreRemainingEvents()
116+ }
117+ }
118+
119+ @Test
120+ fun observeDisplaySettings_whenASettingIsChanged_emitsTheStoredValueAgain () = runTest {
121+ givenStoredValues()
122+ givenSortOrderWritesAreStored()
123+
124+ repository.observeDisplaySettings().test {
125+ assertEquals(SortOrder .GIVEN_NAME_FIRST , awaitItem().sortOrder)
126+
127+ repository.setSortOrder(SortOrder .FAMILY_NAME_FIRST )
128+
129+ assertEquals(SortOrder .FAMILY_NAME_FIRST , awaitItem().sortOrder)
130+ cancelAndIgnoreRemainingEvents()
131+ }
132+ }
133+
134+ @Test
135+ fun observeDisplaySettings_whenNothingIsWritten_doesNotEmitAgain () = runTest {
136+ givenStoredValues(sortOrder = ContactsPreferences .SORT_ORDER_PRIMARY )
137+
138+ repository.observeDisplaySettings().test {
139+ assertEquals(SortOrder .GIVEN_NAME_FIRST , awaitItem().sortOrder)
140+
141+ repository.setSortOrder(SortOrder .GIVEN_NAME_FIRST )
142+
143+ expectNoEvents()
144+ cancelAndIgnoreRemainingEvents()
145+ }
103146 }
104147
105148 @Test
@@ -205,6 +248,13 @@ class DisplaySettingsRepositoryImplTest {
205248 every { contactsPreferences.phoneticNameDisplayPreference } returns phoneticNameDisplay
206249 }
207250
251+ private fun givenSortOrderWritesAreStored () {
252+ var storedSortOrder = ContactsPreferences .SORT_ORDER_PRIMARY
253+
254+ every { contactsPreferences.sortOrder } answers { storedSortOrder }
255+ every { contactsPreferences.sortOrder = any() } answers { storedSortOrder = firstArg() }
256+ }
257+
208258 private fun givenOptionsChangeable (isChangeable : Boolean ) {
209259 every { contactsPreferences.isSortOrderUserChangeable } returns isChangeable
210260 every { contactsPreferences.isDisplayOrderUserChangeable } returns isChangeable
0 commit comments