Add more tests for Quiz (#4411)

This commit is contained in:
Madhur Gupta 2021-05-14 12:50:46 +05:30 committed by GitHub
parent c7f7b39151
commit 48f2bb8863
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 300 additions and 19 deletions

View file

@ -4,6 +4,8 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
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.TestCommonsApplication
import org.junit.Assert
@ -17,49 +19,40 @@ import org.powermock.api.mockito.PowerMockito.mock
import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class)
@LooperMode(LooperMode.Mode.PAUSED)
class QuizActivityUnitTest {
private val SAMPLE_ALERT_TITLE_VALUE = "Title"
private val SAMPLE_ALERT_MESSAGE_VALUE = "Message"
private lateinit var activity: QuizActivity
private lateinit var positiveAnswer: RadioButton
private lateinit var negativeAnswer: RadioButton
private lateinit var view: View
private val SAMPLE_ALERT_TITLE_VALUE = "Title"
private val SAMPLE_ALERT_MESSAGE_VALUE = "Message"
private lateinit var context: Context
@Mock
private lateinit var quizController: QuizController
@Mock
private lateinit var context: Context
@Before
fun setUp() {
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)
view = LayoutInflater.from(activity)
.inflate(R.layout.answer_layout, null) as View
Mockito.`when`(context.getString(Mockito.any(Int::class.java)))
.thenReturn("")
quizController = QuizController()
quizController.initialize(context)
positiveAnswer = view.findViewById(R.id.quiz_positive_answer)
negativeAnswer = view.findViewById(R.id.quiz_negative_answer)
activity.positiveAnswer = positiveAnswer
activity.negativeAnswer = negativeAnswer
}
@ -72,9 +65,16 @@ class QuizActivityUnitTest {
Assert.assertNotNull(negativeAnswer)
}
@Test
@Throws(Exception::class)
fun testSetNextQuestionCaseDefault() {
activity.setNextQuestion()
}
@Test
@Throws(Exception::class)
fun testSetNextQuestion() {
activity.negativeAnswer.isChecked = true
activity.setNextQuestion()
}
@ -87,10 +87,8 @@ class QuizActivityUnitTest {
@Test
@Throws(Exception::class)
fun testEvaluateScore() {
Whitebox.setInternalState(activity, "quiz", quizController.getQuiz())
Whitebox.setInternalState(activity, "questionIndex", 0)
activity.evaluateScore()
}

View file

@ -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)
}
}

View file

@ -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)
}
}

View file

@ -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)
}
}