Skip to content

Commit ae3d53a

Browse files
authored
Merge pull request #135 from pravinyo/development
UI fixes and documentation update
2 parents 41ecdfd + e9146d7 commit ae3d53a

File tree

50 files changed

+266
-142
lines changed

Some content is hidden

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

50 files changed

+266
-142
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: AudioBook InstrumentationTest
2+
3+
on:
4+
push:
5+
branches:
6+
- 'ci_instrumentation_test'
7+
8+
jobs:
9+
instrumentationJob:
10+
name: Run Instrumentation Tests
11+
runs-on: ubuntu-18.04
12+
13+
steps:
14+
- uses: actions/checkout@v1
15+
- name: set up JDK 1.8
16+
uses: actions/setup-java@v1
17+
with:
18+
java-version: 1.8
19+
20+
- uses: malinskiy/action-android/install-sdk@release/0.0.6
21+
- run: adb devices
22+
- run: echo $ANDROID_HOME
23+
24+
- uses: malinskiy/action-android/emulator-run-cmd@release/0.0.6
25+
with:
26+
cmd: ./gradlew connectedDebugAndroidTest
27+
api: 25
28+
tag: default
29+
abi: x86
30+
- name: Save logcat output
31+
uses: actions/upload-artifact@master
32+
if: failure()
33+
with:
34+
name: logcat
35+
path: artifacts/logcat.log

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AudioBook App
2-
`Current Major Version : 6` , [`Privacy Policy for Published App`](http://privacy.audiobooks.allsoftdroid.com/)`
2+
`Current Major Version : 6` , [`Privacy Policy for Published App`](http://privacy.audiobooks.allsoftdroid.com/)
33

44
![AudioBook Feature UnitTest](https://github.com/pravinyo/AudioBook/workflows/AudioBook%20Feature%20UnitTest/badge.svg) ![AudioBook Dependency Graph Generator](https://github.com/pravinyo/AudioBook/workflows/AudioBook%20Dependency%20Graph%20Generator/badge.svg) ![Issues](https://img.shields.io/github/issues-closed/pravinyo/AudioBook) ![Closed Pull Request](https://img.shields.io/github/issues-pr-closed/pravinyo/AudioBook) ![top language](https://img.shields.io/github/languages/top/pravinyo/AudioBook) ![license](https://img.shields.io/github/license/pravinyo/AudioBook)
55

@@ -31,6 +31,26 @@ This App is based on Single Activity Navigation. Each Fragment screen is develop
3131
# Dependency Graph of the Project:
3232
![AudioBook](/photos/dependencies_graph.png)
3333

34+
# Screenshots
35+
<p float="left">
36+
<img src="/photos/mainscreen.png" width="200" />
37+
<img src="/photos/bookdetails.png" width="200" />
38+
<img src="/photos/listen_later.png" width="200" />
39+
<img src="/photos/mybooks.png" width="200" />
40+
</p>
41+
42+
43+
# Release: 6.2.2
44+
## :beetle: Bug Fixes
45+
46+
- UI fixes and testing enhancement [#133](https://github.com/pravinyo/AudioBook/pull/133)
47+
48+
## :heart: Contributors
49+
50+
We'd like to thank all the contributors who worked on this release!
51+
52+
- [@pravinyo](https://github.com/pravinyo)
53+
3454
# Release: 6.2.0
3555
## :star: New Features
3656

app/build.gradle

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ android {
5656
returnDefaultValues = true
5757
}
5858

59+
adbOptions {
60+
installOptions '-g', '-r'
61+
}
62+
5963
// dynamicFeatures = [":feature_book", ":feature_book_details"]
6064

6165

@@ -99,4 +103,38 @@ dependencies {
99103
androidTestImplementation(TestLibraryDependency.ANDROID_X_EXT_TESTING)
100104
androidTestImplementation(TestLibraryDependency.ESPRESSO_CORE)
101105
androidTestImplementation(TestLibraryDependency.ESPRESSO_CONTRIB)
102-
}
106+
}
107+
108+
def reportsDirectory = "$buildDir/reports/androidTests/connected"
109+
110+
def clearScreenshotsTask = task('clearScreenshots', type: Exec) {
111+
executable "${android.getAdbExe().toString()}"
112+
args 'shell', 'rm', '-r', '/sdcard/Pictures/audioBook_test_folder'
113+
}
114+
115+
def createScreenshotDirectoryTask = task('createScreenshotDirectory', type: Exec, group: 'reporting') {
116+
executable "${android.getAdbExe().toString()}"
117+
args 'shell', 'mkdir', '-p', '/sdcard/Pictures/audioBook_test_folder'
118+
}
119+
120+
def fetchScreenshotsTask = task('fetchScreenshots', type: Exec, group: 'reporting') {
121+
executable "${android.getAdbExe().toString()}"
122+
args 'pull', '/sdcard/Pictures/audioBook_test_folder/.', reportsDirectory
123+
finalizedBy {
124+
clearScreenshotsTask
125+
}
126+
127+
dependsOn {
128+
createScreenshotDirectoryTask
129+
}
130+
131+
doFirst {
132+
new File(reportsDirectory).mkdirs()
133+
}
134+
}
135+
136+
task copyScreenshotToMachine{ task ->
137+
task.finalizedBy {
138+
fetchScreenshotsTask
139+
}
140+
}

app/src/androidTest/java/com/allsoftdroid/audiobook/presentation/MainActivityTest.kt

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import androidx.test.espresso.Espresso.pressBack
77
import androidx.test.espresso.IdlingRegistry
88
import androidx.test.espresso.action.ViewActions.*
99
import androidx.test.espresso.assertion.ViewAssertions.matches
10+
import androidx.test.espresso.contrib.NavigationViewActions
1011
import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition
1112
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
1213
import androidx.test.espresso.matcher.ViewMatchers.*
1314
import androidx.test.ext.junit.runners.AndroidJUnit4
1415
import androidx.test.filters.LargeTest
1516
import com.allsoftdroid.audiobook.R
17+
import com.allsoftdroid.audiobook.presentation.utils.TakeScreenshotUtils.takeScreenshot
1618
import com.allsoftdroid.common.test.DataBindingIdlingResource
1719
import com.allsoftdroid.common.test.EspressoIdlingResource
1820
import com.allsoftdroid.common.test.monitorActivity
@@ -46,7 +48,10 @@ class MainActivityTest{
4648

4749
onView(withId(R.id.toolbar_title)).check(matches(withText("Latest Audio Books")))
4850

49-
onView(withId(R.id.toolbar_downloads)).perform(click())
51+
onView(withId(R.id.toolbar_nav_hamburger)).perform(click())
52+
53+
onView(withId(R.id.nav_view))
54+
.perform(NavigationViewActions.navigateTo(R.id.nav_item_downloads))
5055

5156
pressBack()
5257

@@ -70,13 +75,16 @@ class MainActivityTest{
7075
onView(withId(R.id.toolbar_book_search)).perform(click())
7176

7277
onView(withId(R.id.et_toolbar_search)).check(matches(isDisplayed()))
73-
onView(withId(R.id.et_toolbar_search)).perform(clearText(), typeText("poem"))
78+
onView(withId(R.id.et_toolbar_search)).perform(clearText(), typeText("penny catechism"))
7479

7580
onView(withId(R.id.iv_search)).check(matches(isDisplayed()))
7681
onView(withId(R.id.iv_search)).perform(click())
7782

7883

79-
Thread.sleep(7000)
84+
Thread.sleep(4000)
85+
86+
takeScreenshot(parentFolderPath = "Search", screenShotName = "search_results")
87+
8088
onView(withId(R.id.recycler_view_books))
8189
.check(matches(hasMinimumChildCount(1)))
8290

@@ -89,14 +97,20 @@ class MainActivityTest{
8997
dataBindingIdlingResource.monitorActivity(activityScenario)
9098

9199
Thread.sleep(10000)
100+
101+
takeScreenshot(parentFolderPath = "MainScreen", screenShotName = "MainScreen")
102+
92103
onView(withId(R.id.recycler_view_books))
93-
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(0,click()))
104+
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(3,click()))
94105

95106
onView(withId(R.id.tv_toolbar_title)).check(matches(isDisplayed()))
96107

97108
onView(withId(R.id.btn_toolbar_back_arrow)).check(matches(isDisplayed()))
98109

99-
onView(withId(R.id.textView_description)).check(matches(isDisplayed()))
110+
onView(withId(R.id.textView_book_intro)).check(matches(isDisplayed()))
111+
112+
Thread.sleep(4000)
113+
takeScreenshot(parentFolderPath = "Book details", screenShotName = "BookDetails")
100114

101115
pressBack()
102116

@@ -126,22 +140,38 @@ class MainActivityTest{
126140

127141
Thread.sleep(10000)
128142
onView(withId(R.id.recycler_view_books))
129-
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(0,click()))
143+
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(3,click()))
130144

131145
onView(withId(R.id.tv_toolbar_title)).check(matches(isDisplayed()))
132146

133147
onView(withId(R.id.btn_toolbar_back_arrow)).check(matches(isDisplayed()))
134148

135-
onView(withId(R.id.textView_description)).check(matches(isDisplayed()))
149+
onView(withId(R.id.textView_book_intro)).check(matches(isDisplayed()))
136150

137151
Thread.sleep(4000)
138152
onView(withId(R.id.recyclerView))
139153
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(0,click()))
140154

141155

142156
Thread.sleep(2000)
143-
onView(withId(R.id.miniPlayerContainer)).check(matches(isDisplayed()))
157+
takeScreenshot(parentFolderPath = "MiniPlayer", screenShotName = "MiniPlayer")
158+
159+
activityScenario.close()
160+
}
161+
162+
@Test
163+
fun listen_later_from_BookDetailsScreen_DisplayInUi(){
164+
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
165+
dataBindingIdlingResource.monitorActivity(activityScenario)
166+
167+
onView(withId(R.id.toolbar_nav_hamburger)).perform(click())
168+
169+
onView(withId(R.id.nav_view))
170+
.perform(NavigationViewActions.navigateTo(R.id.nav_item_listen_later))
171+
172+
Thread.sleep(2000)
144173

174+
takeScreenshot(parentFolderPath = "Listenlater", screenShotName = "listen_later")
145175

146176
activityScenario.close()
147177
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.allsoftdroid.audiobook.presentation.utils
2+
3+
import android.os.Environment.DIRECTORY_PICTURES
4+
import android.os.Environment.getExternalStoragePublicDirectory
5+
import androidx.test.runner.screenshot.BasicScreenCaptureProcessor
6+
import java.io.File
7+
8+
class ScreenCaptureProcessor(parentFolderPath: String) : BasicScreenCaptureProcessor() {
9+
10+
init {
11+
this.mDefaultScreenshotPath = File(
12+
File(
13+
getExternalStoragePublicDirectory(DIRECTORY_PICTURES),
14+
"audioBook_test_folder"
15+
).absolutePath,
16+
"screenshots/$parentFolderPath"
17+
)
18+
}
19+
20+
override fun getFilename(prefix: String): String = prefix
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.allsoftdroid.audiobook.presentation.utils
2+
3+
import androidx.test.runner.screenshot.Screenshot
4+
import timber.log.Timber
5+
import java.io.IOException
6+
7+
object TakeScreenshotUtils {
8+
fun takeScreenshot(parentFolderPath: String = "", screenShotName: String) {
9+
Timber.d("Taking screenshot of '$screenShotName'")
10+
val screenCapture = Screenshot.capture()
11+
val processors = setOf(ScreenCaptureProcessor(parentFolderPath))
12+
try {
13+
screenCapture.apply {
14+
name = screenShotName
15+
process(processors)
16+
}
17+
Timber.d("Screenshot taken")
18+
} catch (ex: IOException) {
19+
Timber.d("Could not take the screenshot: $ex")
20+
}
21+
}
22+
}
-7.97 KB
Loading
-1.97 KB
Loading
-940 Bytes
Loading
-2.55 KB
Loading

0 commit comments

Comments
 (0)