1+ package com.nmc.android.ui
2+
3+ import androidx.test.core.app.ActivityScenario
4+ import androidx.test.espresso.Espresso.onView
5+ import androidx.test.espresso.assertion.ViewAssertions.matches
6+ import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
7+ import androidx.test.espresso.matcher.ViewMatchers.withId
8+ import androidx.test.espresso.matcher.ViewMatchers.withText
9+ import androidx.test.ext.junit.rules.ActivityScenarioRule
10+ import com.nextcloud.test.TestActivity
11+ import com.owncloud.android.AbstractIT
12+ import com.owncloud.android.R
13+ import com.owncloud.android.lib.resources.notifications.models.Notification
14+ import com.owncloud.android.ui.activity.FolderPickerActivity
15+ import com.owncloud.android.ui.activity.NotificationsActivity
16+ import com.owncloud.android.ui.activity.ReceiveExternalFilesActivity
17+ import com.owncloud.android.ui.activity.UploadListActivity
18+ import com.owncloud.android.ui.fragment.GalleryFragment
19+ import com.owncloud.android.ui.fragment.OCFileListFragment
20+ import com.owncloud.android.ui.fragment.SearchType
21+ import com.owncloud.android.ui.trashbin.TrashbinActivity
22+ import org.junit.Rule
23+ import org.junit.Test
24+
25+ /* *
26+ * test to validate empty state on different screens
27+ */
28+ class EmptyStateViewIT : AbstractIT () {
29+
30+ @get:Rule
31+ val testActivityRule = ActivityScenarioRule (TestActivity ::class .java)
32+
33+ @Test
34+ fun validate_emptyState_NoSearch () {
35+ loadOCFileListFragmentWithSearchType(SearchType .NO_SEARCH )
36+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
37+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
38+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No files here" )))
39+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
40+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Upload some content or sync with your devices." )))
41+ }
42+
43+ @Test
44+ fun validate_emptyState_FileSearch () {
45+ loadOCFileListFragmentWithSearchType(SearchType .FILE_SEARCH )
46+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
47+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
48+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No results" )))
49+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
50+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Search for a file (at least 2 characters)" )))
51+ }
52+
53+ @Test
54+ fun validate_emptyState_FavoriteSearch () {
55+ loadOCFileListFragmentWithSearchType(SearchType .FAVORITE_SEARCH )
56+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
57+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
58+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" Nothing favorited yet" )))
59+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
60+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Files and folders you mark as favorites will show up here." )))
61+ }
62+
63+ @Test
64+ fun validate_emptyState_RecentSearch () {
65+ loadOCFileListFragmentWithSearchType(SearchType .RECENTLY_MODIFIED_SEARCH )
66+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
67+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
68+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No results" )))
69+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
70+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Found no files modified within the last 7 days" )))
71+ }
72+
73+ @Test
74+ fun validate_emptyState_SharedSearch () {
75+ loadOCFileListFragmentWithSearchType(SearchType .SHARED_FILTER )
76+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
77+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
78+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" Nothing shared yet" )))
79+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
80+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Files and folders you share will show up here." )))
81+ }
82+
83+ @Test
84+ fun validate_emptyState_GallerySearch () {
85+ loadGalleryFragment()
86+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
87+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
88+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No files here" )))
89+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
90+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" No photos or videos uploaded yet" )))
91+ }
92+
93+ @Test
94+ fun validate_emptyState_Notification () {
95+ val activityScenario = ActivityScenario .launch(NotificationsActivity ::class .java)
96+ waitForIdleSync()
97+ activityScenario.onActivity {
98+ it.runOnUiThread { it.populateList(ArrayList <Notification >()) }
99+ }
100+
101+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
102+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
103+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No notifications" )))
104+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
105+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Please check back later." )))
106+ }
107+
108+ @Test
109+ fun validate_errorState_Trashbin () {
110+ ActivityScenario .launch(TrashbinActivity ::class .java)
111+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
112+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
113+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" Error" )))
114+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
115+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Loading trash bin failed!" )))
116+ }
117+
118+ @Test
119+ fun validate_emptyState_Trashbin () {
120+ val activityScenario = ActivityScenario .launch(TrashbinActivity ::class .java)
121+ activityScenario.onActivity {
122+ it.showTrashbinFolder(emptyList())
123+ }
124+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
125+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
126+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No deleted files" )))
127+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
128+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" You will be able to recover deleted files from here." )))
129+ }
130+
131+ @Test
132+ fun validate_emptyState_FolderPicker () {
133+ ActivityScenario .launch(FolderPickerActivity ::class .java)
134+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
135+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
136+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No files here" )))
137+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
138+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Upload some content or sync with your devices." )))
139+ }
140+
141+ @Test
142+ fun validate_emptyState_ReceivedExternalFiles () {
143+ ActivityScenario .launch(ReceiveExternalFilesActivity ::class .java)
144+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
145+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
146+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No files here" )))
147+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
148+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" " )))
149+ }
150+
151+ @Test
152+ fun validate_emptyState_UploadList () {
153+ ActivityScenario .launch(UploadListActivity ::class .java)
154+ onView(withId(R .id.empty_list_icon)).check(matches(isCompletelyDisplayed()))
155+ onView(withId(R .id.empty_list_view_headline)).check(matches(isCompletelyDisplayed()))
156+ onView(withId(R .id.empty_list_view_headline)).check(matches(withText(" No uploads available" )))
157+ onView(withId(R .id.empty_list_view_text)).check(matches(isCompletelyDisplayed()))
158+ onView(withId(R .id.empty_list_view_text)).check(matches(withText(" Upload some content or activate auto upload." )))
159+ }
160+
161+ private fun loadOCFileListFragmentWithSearchType (searchType : SearchType ) {
162+ testActivityRule.scenario.onActivity {
163+ it.addFragment(OCFileListFragment ())
164+ }
165+
166+ waitForIdleSync()
167+
168+ testActivityRule.scenario.onActivity {
169+ val fragment = (it.fragment as OCFileListFragment )
170+ fragment.setEmptyListMessage(searchType)
171+ }
172+ }
173+
174+ private fun loadGalleryFragment () {
175+ testActivityRule.scenario.onActivity {
176+ it.addFragment(GalleryFragment ())
177+ }
178+
179+ waitForIdleSync()
180+
181+ testActivityRule.scenario.onActivity {
182+ val fragment = (it.fragment as GalleryFragment )
183+ fragment.setEmptyListMessage(SearchType .GALLERY_SEARCH )
184+ }
185+ }
186+ }
0 commit comments