Skip to content

Commit af99b06

Browse files
authored
Merge pull request #409 from immutable/test/ios-ui-auth-functions
[DX-3537] test: ios ui tests for pkce relogin, reconnect, connect and logout
2 parents 6e8fb09 + 191781e commit af99b06

File tree

2 files changed

+141
-1
lines changed

2 files changed

+141
-1
lines changed

sample/Tests/test/test.py

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class TestConfig:
1111
PASSPORT_ID="email|67480492219c150aceeb1f37"
1212
WALLET_ADDRESS = "0x547044ea95f03651139081241c99ffedbefdc5e8"
1313
ANDROID_PACKAGE = "com.immutable.ImmutableSample"
14+
IOS_BUNDLE_ID = "com.immutable.Immutable-Sample"
1415

1516
class UnityTest(unittest.TestCase):
1617

sample/Tests/test/test_ios.py

+140-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ def login(cls):
4646

4747
# Wait for the ASWebAuthenticationSession context to appear
4848
WebDriverWait(driver, 30).until(lambda d: len(d.contexts) > 2)
49+
time.sleep(5) # Refresh contexts by waiting before fetching again
50+
print("Available contexts:", driver.contexts)
4951
contexts = driver.contexts
52+
driver.switch_to.context(driver.contexts[-1])
53+
print("Current context:", driver.current_context)
5054

5155
target_context = None
5256

@@ -89,6 +93,23 @@ def login(cls):
8993
# If target context was not found, raise an error
9094
if not target_context:
9195
raise Exception("Could not find the email field in any webview context.")
96+
97+
@classmethod
98+
def close_and_open_app(cls):
99+
driver = cls.appium_driver
100+
101+
# Close app
102+
time.sleep(5)
103+
print("Closing app...")
104+
driver.terminate_app(TestConfig.IOS_BUNDLE_ID)
105+
time.sleep(5)
106+
print("Closed app")
107+
108+
# Reopen app
109+
print("Opening app...")
110+
driver.activate_app(TestConfig.IOS_BUNDLE_ID)
111+
time.sleep(10)
112+
print("Opened app")
92113

93114
def test_1_pkce_login(self):
94115
# Select use PKCE auth
@@ -116,4 +137,122 @@ def test_4_imx_functions(self):
116137
self.test_2_imx_functions()
117138

118139
def test_5_zkevm_functions(self):
119-
self.test_3_zkevm_functions()
140+
self.test_3_zkevm_functions()
141+
142+
def test_6_pkce_relogin(self):
143+
driver = self.appium_driver
144+
145+
self.close_and_open_app()
146+
147+
# Restart AltTester
148+
self.altdriver.stop()
149+
self.altdriver = AltDriver()
150+
time.sleep(5)
151+
152+
# # Select use PKCE auth
153+
self.altdriver.find_object(By.NAME, "PKCE").tap()
154+
# Wait for unauthenticated screen
155+
self.altdriver.wait_for_current_scene_to_be("UnauthenticatedScene")
156+
157+
# Relogin
158+
print("Re-logging in...")
159+
self.altdriver.wait_for_object(By.NAME, "ReloginBtn").tap()
160+
161+
# Wait for authenticated screen
162+
self.altdriver.wait_for_current_scene_to_be("AuthenticatedScene")
163+
print("Re-logged in")
164+
165+
# Get access token
166+
self.altdriver.find_object(By.NAME, "GetAccessTokenBtn").tap()
167+
output = self.altdriver.find_object(By.NAME, "Output")
168+
self.assertTrue(len(output.get_text()) > 50)
169+
170+
# Click Connect to IMX button
171+
self.altdriver.find_object(By.NAME, "ConnectBtn").tap()
172+
self.assertEqual("Connected to IMX", output.get_text())
173+
174+
self.altdriver.stop()
175+
176+
def test_7_pkce_reconnect(self):
177+
self.close_and_open_app()
178+
179+
# Restart AltTester
180+
self.altdriver.stop()
181+
self.altdriver = AltDriver()
182+
time.sleep(5)
183+
184+
# Select use PKCE auth
185+
self.altdriver.find_object(By.NAME, "PKCE").tap()
186+
# Wait for unauthenticated screen
187+
self.altdriver.wait_for_current_scene_to_be("UnauthenticatedScene")
188+
189+
# Reconnect
190+
print("Reconnecting...")
191+
self.altdriver.wait_for_object(By.NAME, "ReconnectBtn").tap()
192+
193+
# Wait for authenticated screen
194+
self.altdriver.wait_for_current_scene_to_be("AuthenticatedScene")
195+
print("Reconnected")
196+
197+
# Get access token
198+
self.altdriver.find_object(By.NAME, "GetAccessTokenBtn").tap()
199+
output = self.altdriver.find_object(By.NAME, "Output")
200+
self.assertTrue(len(output.get_text()) > 50)
201+
202+
# Get address without having to click Connect to IMX button
203+
self.altdriver.find_object(By.NAME, "GetAddressBtn").tap()
204+
self.assertEqual(TestConfig.WALLET_ADDRESS, output.get_text())
205+
206+
# Logout
207+
print("Logging out...")
208+
self.altdriver.find_object(By.NAME, "LogoutBtn").tap()
209+
time.sleep(5)
210+
211+
# Wait for authenticated screen
212+
self.altdriver.wait_for_current_scene_to_be("UnauthenticatedScene")
213+
time.sleep(5)
214+
print("Logged out")
215+
216+
self.altdriver.stop()
217+
218+
def test_8_pkce_connect_imx(self):
219+
self.close_and_open_app()
220+
221+
# Restart AltTester
222+
self.altdriver.stop()
223+
self.altdriver = AltDriver()
224+
time.sleep(5)
225+
226+
# Select use PKCE auth
227+
self.altdriver.find_object(By.NAME, "PKCE").tap()
228+
# Wait for unauthenticated screen
229+
self.altdriver.wait_for_current_scene_to_be("UnauthenticatedScene")
230+
231+
# Connect IMX
232+
print("Logging in and connecting to IMX...")
233+
self.altdriver.wait_for_object(By.NAME, "ConnectBtn").tap()
234+
235+
self.login()
236+
237+
# Wait for authenticated screen
238+
self.altdriver.wait_for_current_scene_to_be("AuthenticatedScene")
239+
print("Logged in and connected to IMX")
240+
241+
# Get access token
242+
self.altdriver.find_object(By.NAME, "GetAccessTokenBtn").tap()
243+
output = self.altdriver.find_object(By.NAME, "Output")
244+
self.assertTrue(len(output.get_text()) > 50)
245+
246+
# Get address without having to click Connect to IMX button
247+
self.altdriver.find_object(By.NAME, "GetAddressBtn").tap()
248+
self.assertEqual(TestConfig.WALLET_ADDRESS, output.get_text())
249+
250+
# Logout
251+
print("Logging out...")
252+
self.altdriver.find_object(By.NAME, "LogoutBtn").tap()
253+
time.sleep(5)
254+
255+
# Wait for authenticated screen
256+
self.altdriver.wait_for_current_scene_to_be("UnauthenticatedScene")
257+
time.sleep(5)
258+
print("Logged out")

0 commit comments

Comments
 (0)