mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 12:53:55 +01:00
Add more tests for Quiz (#4411)
This commit is contained in:
parent
c7f7b39151
commit
48f2bb8863
4 changed files with 300 additions and 19 deletions
|
|
@ -4,6 +4,8 @@ import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.RadioButton
|
import android.widget.RadioButton
|
||||||
|
import com.facebook.drawee.backends.pipeline.Fresco
|
||||||
|
import com.facebook.soloader.SoLoader
|
||||||
import fr.free.nrw.commons.R
|
import fr.free.nrw.commons.R
|
||||||
import fr.free.nrw.commons.TestCommonsApplication
|
import fr.free.nrw.commons.TestCommonsApplication
|
||||||
import org.junit.Assert
|
import org.junit.Assert
|
||||||
|
|
@ -17,49 +19,40 @@ import org.powermock.api.mockito.PowerMockito.mock
|
||||||
import org.powermock.reflect.Whitebox
|
import org.powermock.reflect.Whitebox
|
||||||
import org.robolectric.Robolectric
|
import org.robolectric.Robolectric
|
||||||
import org.robolectric.RobolectricTestRunner
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.RuntimeEnvironment
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
import org.robolectric.annotation.LooperMode
|
|
||||||
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner::class)
|
@RunWith(RobolectricTestRunner::class)
|
||||||
@Config(sdk = [21], application = TestCommonsApplication::class)
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
@LooperMode(LooperMode.Mode.PAUSED)
|
|
||||||
class QuizActivityUnitTest {
|
class QuizActivityUnitTest {
|
||||||
|
|
||||||
|
private val SAMPLE_ALERT_TITLE_VALUE = "Title"
|
||||||
|
private val SAMPLE_ALERT_MESSAGE_VALUE = "Message"
|
||||||
|
|
||||||
private lateinit var activity: QuizActivity
|
private lateinit var activity: QuizActivity
|
||||||
private lateinit var positiveAnswer: RadioButton
|
private lateinit var positiveAnswer: RadioButton
|
||||||
private lateinit var negativeAnswer: RadioButton
|
private lateinit var negativeAnswer: RadioButton
|
||||||
private lateinit var view: View
|
private lateinit var view: View
|
||||||
|
private lateinit var context: Context
|
||||||
private val SAMPLE_ALERT_TITLE_VALUE = "Title"
|
|
||||||
private val SAMPLE_ALERT_MESSAGE_VALUE = "Message"
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var quizController: QuizController
|
private lateinit var quizController: QuizController
|
||||||
|
|
||||||
@Mock
|
|
||||||
private lateinit var context: Context
|
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
activity = Robolectric.buildActivity(QuizActivity::class.java).get()
|
SoLoader.setInTestMode()
|
||||||
|
Fresco.initialize(RuntimeEnvironment.application.applicationContext)
|
||||||
|
activity = Robolectric.buildActivity(QuizActivity::class.java).create().get()
|
||||||
context = mock(Context::class.java)
|
context = mock(Context::class.java)
|
||||||
|
|
||||||
view = LayoutInflater.from(activity)
|
view = LayoutInflater.from(activity)
|
||||||
.inflate(R.layout.answer_layout, null) as View
|
.inflate(R.layout.answer_layout, null) as View
|
||||||
|
|
||||||
Mockito.`when`(context.getString(Mockito.any(Int::class.java)))
|
Mockito.`when`(context.getString(Mockito.any(Int::class.java)))
|
||||||
.thenReturn("")
|
.thenReturn("")
|
||||||
quizController = QuizController()
|
quizController = QuizController()
|
||||||
|
|
||||||
quizController.initialize(context)
|
quizController.initialize(context)
|
||||||
|
|
||||||
positiveAnswer = view.findViewById(R.id.quiz_positive_answer)
|
positiveAnswer = view.findViewById(R.id.quiz_positive_answer)
|
||||||
negativeAnswer = view.findViewById(R.id.quiz_negative_answer)
|
negativeAnswer = view.findViewById(R.id.quiz_negative_answer)
|
||||||
|
|
||||||
activity.positiveAnswer = positiveAnswer
|
activity.positiveAnswer = positiveAnswer
|
||||||
activity.negativeAnswer = negativeAnswer
|
activity.negativeAnswer = negativeAnswer
|
||||||
}
|
}
|
||||||
|
|
@ -72,9 +65,16 @@ class QuizActivityUnitTest {
|
||||||
Assert.assertNotNull(negativeAnswer)
|
Assert.assertNotNull(negativeAnswer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testSetNextQuestionCaseDefault() {
|
||||||
|
activity.setNextQuestion()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Throws(Exception::class)
|
@Throws(Exception::class)
|
||||||
fun testSetNextQuestion() {
|
fun testSetNextQuestion() {
|
||||||
|
activity.negativeAnswer.isChecked = true
|
||||||
activity.setNextQuestion()
|
activity.setNextQuestion()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,10 +87,8 @@ class QuizActivityUnitTest {
|
||||||
@Test
|
@Test
|
||||||
@Throws(Exception::class)
|
@Throws(Exception::class)
|
||||||
fun testEvaluateScore() {
|
fun testEvaluateScore() {
|
||||||
|
|
||||||
Whitebox.setInternalState(activity, "quiz", quizController.getQuiz())
|
Whitebox.setInternalState(activity, "quiz", quizController.getQuiz())
|
||||||
Whitebox.setInternalState(activity, "questionIndex", 0)
|
Whitebox.setInternalState(activity, "questionIndex", 0)
|
||||||
|
|
||||||
activity.evaluateScore()
|
activity.evaluateScore()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
package fr.free.nrw.commons.quiz
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import com.facebook.drawee.backends.pipeline.Fresco
|
||||||
|
import com.facebook.soloader.SoLoader
|
||||||
|
import com.nhaarman.mockitokotlin2.any
|
||||||
|
import fr.free.nrw.commons.TestCommonsApplication
|
||||||
|
import fr.free.nrw.commons.auth.SessionManager
|
||||||
|
import fr.free.nrw.commons.kvstore.JsonKvStore
|
||||||
|
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient
|
||||||
|
import fr.free.nrw.commons.profile.achievements.FeedbackResponse
|
||||||
|
import io.reactivex.Single
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
import org.powermock.reflect.Whitebox
|
||||||
|
import org.robolectric.Robolectric
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.RuntimeEnvironment
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner::class)
|
||||||
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
|
class QuizCheckerUnitTest {
|
||||||
|
|
||||||
|
private lateinit var quizChecker: QuizChecker
|
||||||
|
private lateinit var activity: Activity
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var sessionManager: SessionManager
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var okHttpJsonApiClient: OkHttpJsonApiClient
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var jsonKvStore: JsonKvStore
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var feedbackResponse: FeedbackResponse
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
SoLoader.setInTestMode()
|
||||||
|
Fresco.initialize(RuntimeEnvironment.application.applicationContext)
|
||||||
|
activity = Robolectric.buildActivity(QuizActivity::class.java).create().get()
|
||||||
|
quizChecker = QuizChecker(sessionManager, okHttpJsonApiClient, jsonKvStore)
|
||||||
|
Mockito.`when`(sessionManager.userName).thenReturn("")
|
||||||
|
Mockito.`when`(okHttpJsonApiClient.getUploadCount(any())).thenReturn(Single.just(0))
|
||||||
|
Mockito.`when`(okHttpJsonApiClient.getAchievements(any()))
|
||||||
|
.thenReturn(Single.just(feedbackResponse))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun checkNotNull() {
|
||||||
|
Assert.assertNotNull(quizChecker)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testInitQuizCheck() {
|
||||||
|
quizChecker.initQuizCheck(activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testCleanUp() {
|
||||||
|
quizChecker.cleanup()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testSetTotalUploadCount() {
|
||||||
|
val method: Method = QuizChecker::class.java.getDeclaredMethod(
|
||||||
|
"setTotalUploadCount",
|
||||||
|
Int::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(quizChecker, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testSetRevertParameter() {
|
||||||
|
val method: Method = QuizChecker::class.java.getDeclaredMethod(
|
||||||
|
"setRevertParameter",
|
||||||
|
Int::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(quizChecker, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testCalculateRevertParameterAndShowQuiz() {
|
||||||
|
Whitebox.setInternalState(quizChecker, "revertCount", -1)
|
||||||
|
val method: Method = QuizChecker::class.java.getDeclaredMethod(
|
||||||
|
"calculateRevertParameterAndShowQuiz",
|
||||||
|
Activity::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(quizChecker, activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testCalculateRevertParameterAndShowQuizCaseDefault() {
|
||||||
|
Whitebox.setInternalState(quizChecker, "isRevertCountFetched", true)
|
||||||
|
Whitebox.setInternalState(quizChecker, "isUploadCountFetched", true)
|
||||||
|
Whitebox.setInternalState(quizChecker, "totalUploadCount", 5)
|
||||||
|
Whitebox.setInternalState(quizChecker, "revertCount", 5)
|
||||||
|
val method: Method = QuizChecker::class.java.getDeclaredMethod(
|
||||||
|
"calculateRevertParameterAndShowQuiz",
|
||||||
|
Activity::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(quizChecker, activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testStartQuizActivity() {
|
||||||
|
val method: Method = QuizChecker::class.java.getDeclaredMethod(
|
||||||
|
"startQuizActivity",
|
||||||
|
Activity::class.java
|
||||||
|
)
|
||||||
|
method.isAccessible = true
|
||||||
|
method.invoke(quizChecker, activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
package fr.free.nrw.commons.quiz
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import fr.free.nrw.commons.TestCommonsApplication
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
import org.powermock.api.mockito.PowerMockito
|
||||||
|
import org.robolectric.Robolectric
|
||||||
|
import org.robolectric.RobolectricTestRunner
|
||||||
|
import org.robolectric.annotation.Config
|
||||||
|
import org.robolectric.fakes.RoboMenu
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner::class)
|
||||||
|
@Config(sdk = [21], application = TestCommonsApplication::class)
|
||||||
|
class QuizResultActivityUnitTest {
|
||||||
|
|
||||||
|
private lateinit var activity: QuizResultActivity
|
||||||
|
private lateinit var quizResultActivity: QuizResultActivity
|
||||||
|
private lateinit var menu: RoboMenu
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var bitmap: Bitmap
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
val intent = Intent().putExtra("QuizResult", 0)
|
||||||
|
activity = Robolectric.buildActivity(QuizResultActivity::class.java, intent).get()
|
||||||
|
quizResultActivity = PowerMockito.mock(QuizResultActivity::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun checkActivityNotNull() {
|
||||||
|
Assert.assertNotNull(activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnCreateCaseDefault() {
|
||||||
|
activity.onCreate(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testOnCreate() {
|
||||||
|
Mockito.`when`(quizResultActivity.intent).thenReturn(null)
|
||||||
|
activity.onCreate(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun testLaunchContributionActivity() {
|
||||||
|
activity.launchContributionActivity()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun tesOnBackPressed() {
|
||||||
|
activity.onBackPressed()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun tesOnCreateOptionsMenu() {
|
||||||
|
menu = RoboMenu()
|
||||||
|
activity.onCreateOptionsMenu(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun tesShowAlert() {
|
||||||
|
activity.showAlert(bitmap)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun tesShareScreen() {
|
||||||
|
activity.shareScreen(bitmap)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package fr.free.nrw.commons.quiz
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.CompoundButton
|
||||||
|
import android.widget.RadioButton
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.mockito.Mockito.anyInt
|
||||||
|
import org.mockito.MockitoAnnotations
|
||||||
|
|
||||||
|
class RadioGroupHelperUnitTest {
|
||||||
|
|
||||||
|
private lateinit var radioGroupHelper: RadioGroupHelper
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var radioButton: RadioButton
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var radioButton1: RadioButton
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var activity: Activity
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var view: View
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private lateinit var compoundButton: CompoundButton
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
MockitoAnnotations.initMocks(this)
|
||||||
|
radioGroupHelper = RadioGroupHelper()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun checkNotNull() {
|
||||||
|
Assert.assertNotNull(radioGroupHelper)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun constructor1() {
|
||||||
|
radioGroupHelper = RadioGroupHelper(radioButton, radioButton1)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws(Exception::class)
|
||||||
|
fun constructor2() {
|
||||||
|
radioGroupHelper = RadioGroupHelper(activity)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue