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.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()
} }

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