@@ -49,12 +49,19 @@ import androidx.compose.ui.test.onNodeWithText
4949import androidx.compose.ui.test.performClick
5050import androidx.compose.ui.test.performTextClearance
5151import androidx.compose.ui.test.performTextInput
52+ import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
5253import androidx.test.rule.GrantPermissionRule
54+ import com.salesforce.androidsdk.R.string.sf__account_selector_text
55+ import com.salesforce.androidsdk.R.string.sf__custom_url_button
56+ import com.salesforce.androidsdk.R.string.sf__pick_server
57+ import com.salesforce.androidsdk.accounts.UserAccountManager
5358import com.salesforce.androidsdk.config.LoginServerManager.LoginServer
5459import com.salesforce.androidsdk.ui.components.AddConnection
5560import com.salesforce.androidsdk.ui.components.PickerBottomSheet
5661import com.salesforce.androidsdk.ui.components.PickerStyle
62+ import com.salesforce.androidsdk.ui.components.TestablePickerBottomSheet
5763import com.salesforce.androidsdk.ui.components.UserAccountMock
64+ import io.mockk.mockk
5865import org.junit.Assert
5966import org.junit.Rule
6067import org.junit.Test
@@ -108,6 +115,44 @@ class PickerBottomSheetTest {
108115
109116 // Google's recommended naming scheme for test is "thingUnderTest_TriggerOfTest_ResultOfTest"
110117
118+ // region Public API Tests
119+
120+ @OptIn(ExperimentalMaterial3Api ::class )
121+ @Test
122+ fun pickerBottomSheet_publicApiUserAccountPicker_displaysUserAccountPicker () {
123+ val userAccountManager = mockk<UserAccountManager >(relaxed = true )
124+ composeTestRule.setContent {
125+ TestablePickerBottomSheet (
126+ pickerStyle = PickerStyle .UserAccountPicker ,
127+ userAccountManager = userAccountManager
128+ )
129+ }
130+
131+ val context = getInstrumentation().targetContext
132+ val button = composeTestRule.onNode(hasText(context.getString(sf__account_selector_text)))
133+
134+ button.assertIsDisplayed()
135+ }
136+
137+ @OptIn(ExperimentalMaterial3Api ::class )
138+ @Test
139+ fun pickerBottomSheet_publicApiLoginServerPicker_displaysLoginServerPicker () {
140+ val userAccountManager = mockk<UserAccountManager >(relaxed = true )
141+ composeTestRule.setContent {
142+ TestablePickerBottomSheet (
143+ pickerStyle = PickerStyle .LoginServerPicker ,
144+ userAccountManager = userAccountManager
145+ )
146+ }
147+
148+ val context = getInstrumentation().targetContext
149+ val button = composeTestRule.onNode(hasText(context.getString(sf__pick_server)))
150+
151+ button.assertIsDisplayed()
152+ }
153+
154+ // endregion
155+
111156 // region Add Connection Tests
112157 @Test
113158 fun saveButton_RespondsTo_InputValidation () {
@@ -249,6 +294,38 @@ class PickerBottomSheetTest {
249294 customListItem.onChildAt(0 ).assertIsSelected()
250295 }
251296
297+ @OptIn(ExperimentalMaterial3Api ::class )
298+ @Test
299+ fun serverList_AddButtonVisibleTrue_DisplaysAddNewConnectionButton () {
300+ composeTestRule.setContent {
301+ PickerBottomSheetTestWrapper (
302+ pickerStyle = PickerStyle .LoginServerPicker ,
303+ addButtonVisible = true ,
304+ )
305+ }
306+
307+ val context = getInstrumentation().targetContext
308+ val button = composeTestRule.onNode(hasText(context.getString(sf__custom_url_button)))
309+
310+ button.assertIsDisplayed()
311+ }
312+
313+ @OptIn(ExperimentalMaterial3Api ::class )
314+ @Test
315+ fun serverList_AddButtonVisibleFalse_HidesAddNewConnectionButton () {
316+ composeTestRule.setContent {
317+ PickerBottomSheetTestWrapper (
318+ pickerStyle = PickerStyle .LoginServerPicker ,
319+ addButtonVisible = false ,
320+ )
321+ }
322+
323+ val context = getInstrumentation().targetContext
324+ val button = composeTestRule.onNode(hasText(context.getString(sf__custom_url_button)))
325+
326+ button.assertDoesNotExist()
327+ }
328+
252329 @OptIn(ExperimentalMaterial3Api ::class )
253330 @Test
254331 fun selectedServer_UpdatesOn_UIServerSelection () {
@@ -380,17 +457,28 @@ internal fun PickerBottomSheetTestWrapper(
380457 initialValue = SheetValue .Expanded ,
381458 skipHiddenState = false,
382459 ),
383- list : List <Any > = when (pickerStyle) {
460+ list : List <Any > = when (pickerStyle) {
384461 PickerStyle .LoginServerPicker -> serverList
385462 PickerStyle .UserAccountPicker -> userList
386463 },
387464 selectedListItem : Any = list.first(),
388- onItemSelected : (Any? , Boolean ) -> Unit = { _,_ -> },
465+ addButtonVisible : Boolean = true,
466+ onItemSelected : (Any? , Boolean ) -> Unit = { _, _ -> },
389467 getValidServer : ((String ) -> String? )? = { _ -> "" },
390- addNewLoginServer : ((String , String ) -> Unit )? = { _,_ -> },
468+ addNewLoginServer : ((String , String ) -> Unit )? = { _, _ -> },
391469 removeLoginServer : ((LoginServer ) -> Unit )? = { },
392470 addNewAccount : (() -> Unit )? = { },
393471) {
394- PickerBottomSheet (pickerStyle, sheetState, list, selectedListItem, onItemSelected, getValidServer,
395- addNewLoginServer, removeLoginServer, addNewAccount)
396- }
472+ PickerBottomSheet (
473+ pickerStyle = pickerStyle,
474+ sheetState = sheetState,
475+ list = list,
476+ selectedListItem = selectedListItem,
477+ addButtonVisible = addButtonVisible,
478+ onItemSelected = onItemSelected,
479+ getValidServer = getValidServer,
480+ addNewLoginServer = addNewLoginServer,
481+ removeLoginServer = removeLoginServer,
482+ addNewAccount = addNewAccount,
483+ )
484+ }
0 commit comments