Skip to content

Commit e38f011

Browse files
Merge branch 'release/5.244.0'
2 parents 6b33612 + 011502e commit e38f011

File tree

440 files changed

+18522
-2513
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

440 files changed

+18522
-2513
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
name: Input Screen End-to-End tests
2+
3+
on:
4+
schedule:
5+
- cron: '0 5 * * *' # run at 5 AM UTC
6+
workflow_dispatch:
7+
8+
concurrency:
9+
group: ${{ github.workflow }}-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
jobs:
13+
instrumentation_tests:
14+
runs-on: ubuntu-latest
15+
name: End-to-End tests
16+
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v4
20+
with:
21+
submodules: recursive
22+
23+
- name: Set up JDK version
24+
uses: actions/setup-java@v4
25+
with:
26+
java-version-file: .github/.java-version
27+
distribution: 'adopt'
28+
29+
- name: Create folder
30+
if: always()
31+
run: mkdir apk
32+
33+
- name: Decode keys
34+
uses: davidSchuppa/base64Secret-toFile-action@v2
35+
with:
36+
secret: ${{ secrets.FAKE_RELEASE_PROPERTIES }}
37+
fileName: ddg_android_build.properties
38+
destination-path: $HOME/jenkins_static/com.duckduckgo.mobile.android/
39+
40+
- name: Decode key file
41+
uses: davidSchuppa/base64Secret-toFile-action@v2
42+
with:
43+
secret: ${{ secrets.FAKE_RELEASE_KEY }}
44+
fileName: android
45+
destination-path: $HOME/jenkins_static/com.duckduckgo.mobile.android/
46+
47+
- name: Setup Gradle
48+
uses: gradle/actions/setup-gradle@v3
49+
50+
- name: Assemble the project
51+
run: ./gradlew assembleInternalRelease -Pforce-default-variant
52+
53+
- name: Move APK to new folder
54+
if: always()
55+
run: find . -name "*.apk" -exec mv '{}' apk/internalRelease.apk \;
56+
57+
- name: Input Screen Maestro run
58+
uses: mobile-dev-inc/[email protected]
59+
timeout-minutes: 120
60+
with:
61+
api-key: ${{ secrets.ROBIN_API_KEY }}
62+
project-id: ${{ vars.ROBIN_ANDROID_PROJECT_ID }}
63+
name: inputScreen_${{ github.sha }}
64+
timeout: ${{ vars.ROBIN_TIMEOUT_MINUTES }}
65+
app-file: apk/internalRelease.apk
66+
android-api-level: 30
67+
workspace: .maestro
68+
include-tags: inputScreenTest
69+
70+
- name: Create Asana task when workflow failed
71+
if: ${{ failure() }}
72+
uses: honeycombio/gha-create-asana-task@main
73+
with:
74+
asana-secret: ${{ secrets.ASANA_ACCESS_TOKEN }}
75+
asana-workspace-id: ${{ secrets.GH_ASANA_WORKSPACE_ID }}
76+
asana-project-id: ${{ secrets.GH_ASANA_AOR_PROJECT_ID }}
77+
asana-section-id: ${{ secrets.GH_ASANA_INCOMING_ID }}
78+
asana-task-name: GH Workflow Failure - Input Screen E2E tests
79+
asana-task-description: The Input Screen end-to-end workflow has failed. See https://github.com/duckduckgo/Android/actions/runs/${{ github.run_id }}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
appId: com.duckduckgo.mobile.android
2+
name: "Input Screen Chat Mode test"
3+
tags:
4+
- inputScreenTest
5+
---
6+
- retry:
7+
maxRetries: 3
8+
commands:
9+
- launchApp:
10+
clearState: true
11+
stopApp: true
12+
- runFlow: ../shared/skip_all_onboarding.yaml
13+
14+
# enable the Input Screen
15+
- runFlow: ../shared/open_ai_settings_screen.yaml
16+
- tapOn:
17+
id: "trailingSwitch"
18+
childOf:
19+
id: "duckAiInputScreenEnabledToggle"
20+
- action: back
21+
- action: back
22+
23+
# verify that Duck.ai web view is opened when submitting a query in chat mode
24+
- tapOn:
25+
id: "omnibarTextInput"
26+
- assertVisible:
27+
id: "inputModeWidget"
28+
- tapOn:
29+
text: "Duck.ai"
30+
- assertVisible:
31+
text: "Ask Duck.ai"
32+
- inputText: "hey"
33+
- tapOn:
34+
id: "actionSend"
35+
- assertVisible:
36+
text: "Duck.ai"
37+
childOf:
38+
id: "toolbar"
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
appId: com.duckduckgo.mobile.android
2+
name: "Input Screen user preferences test"
3+
tags:
4+
- inputScreenTest
5+
---
6+
- retry:
7+
maxRetries: 3
8+
commands:
9+
- launchApp:
10+
clearState: true
11+
stopApp: true
12+
- runFlow: ../shared/skip_all_onboarding.yaml
13+
- tapOn:
14+
id: "omnibarTextInput"
15+
16+
# verify that the Input Screen is disabled by default
17+
- assertNotVisible:
18+
id: "inputModeWidget"
19+
20+
# enable the Input Screen
21+
- runFlow: ../shared/open_ai_settings_screen.yaml
22+
- tapOn:
23+
id: "trailingSwitch"
24+
childOf:
25+
id: "duckAiInputScreenEnabledToggle"
26+
- action: back
27+
- action: back
28+
29+
# verify that the Input Screen doesn't automatically open when on new tab page
30+
- assertNotVisible:
31+
id: "inputModeWidget"
32+
- assertVisible:
33+
id: "omnibarTextInput"
34+
focused: false
35+
36+
# verify that the Input Screen opens when tapping on the omnibar
37+
- tapOn:
38+
id: "omnibarTextInput"
39+
- assertVisible:
40+
id: "inputModeWidget"
41+
42+
# disable global AI setting and verify the Input Screen is disabled
43+
- action: back
44+
- runFlow: ../shared/open_ai_settings_screen.yaml
45+
- tapOn:
46+
id: "trailingSwitch"
47+
index: 0
48+
- action: back
49+
- action: back
50+
- assertVisible:
51+
id: "omnibarTextInput"
52+
focused: true
53+
- assertNotVisible:
54+
id: "inputModeWidget"
55+
56+
# verify that the Input Screen doesn't open when tapping on the omnibar
57+
- tapOn:
58+
id: "omnibarTextInput"
59+
- assertNotVisible:
60+
id: "inputModeWidget"
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
appId: com.duckduckgo.mobile.android
2+
name: "Input Screen Search Mode test"
3+
tags:
4+
- inputScreenTest
5+
---
6+
- retry:
7+
maxRetries: 3
8+
commands:
9+
- launchApp:
10+
clearState: true
11+
stopApp: true
12+
- runFlow: ../shared/skip_all_onboarding.yaml
13+
14+
# enable the Input Screen
15+
- runFlow: ../shared/open_ai_settings_screen.yaml
16+
- tapOn:
17+
id: "trailingSwitch"
18+
childOf:
19+
id: "duckAiInputScreenEnabledToggle"
20+
- action: back
21+
- action: back
22+
23+
# verify that autocomplete suggestions are shown when typing in the Input Screen
24+
- tapOn:
25+
id: "omnibarTextInput"
26+
- assertVisible:
27+
id: "inputModeWidget"
28+
- inputText: "redd"
29+
- assertVisible:
30+
id: "autoCompleteSuggestionsList"
31+
- assertVisible:
32+
text: "reddit"
33+
34+
# verify that submitting a search query opens SERP
35+
- tapOn:
36+
id: "actionSend"
37+
- assertNotVisible:
38+
id: "inputModeWidget"
39+
- assertVisible:
40+
id: "browserLayout"
41+
- assertVisible:
42+
text: "reddit"
43+
44+
# add the page to favorites (for future assertions)
45+
- runFlow: ../shared/browser_screen/click_on_menu_button.yaml
46+
- tapOn:
47+
text: "add bookmark"
48+
- runFlow: ../shared/browser_screen/click_on_menu_button.yaml
49+
- tapOn:
50+
text: "bookmarks"
51+
- tapOn:
52+
id: "com.duckduckgo.mobile.android:id/trailingIcon"
53+
index: 0
54+
- tapOn:
55+
text: "add to favorites"
56+
- action: back
57+
58+
# verify that re-opening the Input Screen from SERP pre-fills the last search query and runs autocomplete immediately
59+
- tapOn:
60+
id: "omnibarTextInput"
61+
- assertVisible:
62+
id: "inputModeWidget"
63+
- assertVisible:
64+
text: "redd"
65+
- assertVisible:
66+
id: "autoCompleteSuggestionsList"
67+
- assertVisible:
68+
text: "reddit.com"
69+
70+
# verify that clearing the Input Screen text and submitting a URL opens the web page
71+
- tapOn:
72+
id: "inputFieldClearText"
73+
- inputText: "eff.org"
74+
- tapOn:
75+
id: "actionSend"
76+
- assertNotVisible:
77+
id: "inputModeWidget"
78+
- assertVisible:
79+
id: "browserLayout"
80+
- assertVisible:
81+
text: "https://www.eff.org/"
82+
childOf:
83+
id: "singleOmnibar"
84+
85+
# verify that favorites are shown when opening the Input Screen from a web page and autocomplete is suppressed
86+
- tapOn:
87+
id: "omnibarTextInput"
88+
- assertNotVisible:
89+
id: "autoCompleteSuggestionsList"
90+
- assertVisible:
91+
text: "redd at DuckDuckGo"
92+
childOf:
93+
id: "focusedFavourites"
94+
95+
# verify that typing shows autocomplete again
96+
- inputText: "amazo"
97+
- assertVisible:
98+
id: "autoCompleteSuggestionsList"
99+
- assertVisible:
100+
text: "amazon.com"
101+
102+
# verify that tapping on a suggestion opens the web page
103+
- tapOn:
104+
text: "amazon.com"
105+
- assertNotVisible:
106+
id: "inputModeWidget"
107+
- assertVisible:
108+
id: "browserLayout"
109+
- assertVisible:
110+
text: "https://www.amazon.com/"
111+
childOf:
112+
id: "singleOmnibar"
113+
114+
# verify that tapping on a favorite opens the web page (SERP in this case)
115+
- tapOn:
116+
id: "omnibarTextInput"
117+
- tapOn:
118+
id: "quickAccessFavicon"
119+
childOf:
120+
id: "focusedFavourites"
121+
- assertNotVisible:
122+
id: "inputModeWidget"
123+
- assertVisible:
124+
id: "browserLayout"
125+
- assertVisible:
126+
text: "redd"
127+
childOf:
128+
id: "singleOmnibar"
129+
- assertVisible:
130+
text: "reddit"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
appId: com.duckduckgo.mobile.android
2+
---
3+
- runFlow: ../shared/browser_screen/click_on_menu_button.yaml
4+
- tapOn: "Settings"
5+
- scrollUntilVisible:
6+
element: "AI Features"
7+
direction: DOWN
8+
- tapOn: "AI Features"

0 commit comments

Comments
 (0)