diff --git a/Habitica/build.gradle b/Habitica/build.gradle index 0d096f274..cbec1dffb 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -47,7 +47,6 @@ dependencies { //Dependency Injection implementation 'com.google.dagger:dagger:2.38' - testImplementation 'junit:junit:4.12' kapt 'com.google.dagger:dagger-compiler:2.38' compileOnly 'javax.annotation:javax.annotation-api:1.3.2' compileOnly 'com.github.pengrad:jdk9-deps:1.0' @@ -84,9 +83,9 @@ dependencies { // Image Management Library implementation("io.coil-kt:coil:1.2.2") implementation("io.coil-kt:coil-gif:1.2.2") + //Tests - testImplementation(platform('org.junit:junit-bom:5.8.0')) - testImplementation('org.junit.jupiter:junit-jupiter') + testImplementation 'io.kotest:kotest-runner-junit5:4.6.2' testImplementation 'androidx.test:core:1.4.0' testImplementation "io.mockk:mockk:1.12.0" testImplementation "io.mockk:mockk-android:1.12.0" @@ -260,6 +259,12 @@ android { } } +android.testOptions { + unitTests.all { + useJUnitPlatform() + } +} + Properties props = new Properties() def propFile = new File('signingrelease.properties') if (propFile.canRead()) { diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt index 5c6728052..06b9d51eb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/interactors/BuyRewardUseCase.kt @@ -10,7 +10,7 @@ import io.reactivex.rxjava3.core.Flowable import javax.inject.Inject class BuyRewardUseCase @Inject -constructor(private val taskRepository: TaskRepository, private val soundManager: SoundManager, postExecutionThread: PostExecutionThread) : UseCase(postExecutionThread) { +constructor(private val taskRepository: TaskRepository, private val soundManager: SoundManager, postExecutionThread: PostExecutionThread) : UseCase(postExecutionThread) { override fun buildUseCaseObservable(requestValues: RequestValues): Flowable { return taskRepository diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestBoss.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestBoss.kt index 55672d674..8ba0d279f 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestBoss.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/inventory/QuestBoss.kt @@ -18,7 +18,8 @@ open class QuestBoss : RealmObject(), BaseObject { var rage: QuestBossRage? = null - fun hasRage(): Boolean { + val hasRage: Boolean + get() { return rage?.value ?: 0.0 > 0.0 } } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/BaseAnnotationTestCase.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/BaseAnnotationTestCase.kt new file mode 100644 index 000000000..0feebd69c --- /dev/null +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/BaseAnnotationTestCase.kt @@ -0,0 +1,16 @@ +package com.habitrpg.android.habitica + +import android.content.Context +import io.kotest.core.spec.style.AnnotationSpec +import io.mockk.MockKAnnotations +import io.mockk.impl.annotations.MockK + +open class BaseAnnotationTestCase: AnnotationSpec() { + @MockK + lateinit var mockContext: Context + + @BeforeAll + fun initMocks() { + MockKAnnotations.init(this, relaxed = true) + } +} diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/BaseTestCase.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/BaseTestCase.kt deleted file mode 100644 index 532f5f28e..000000000 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/BaseTestCase.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.habitrpg.android.habitica - -import io.mockk.MockKAnnotations -import org.junit.Before - -class BaseTestCase { - @Before - fun initMocks() { - MockKAnnotations.init(this, relaxed = true) - } -} diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/extensions/DateExtensionsTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/extensions/DateExtensionsTest.kt index 0586987d0..5ac79ad04 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/extensions/DateExtensionsTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/extensions/DateExtensionsTest.kt @@ -1,19 +1,23 @@ package com.habitrpg.android.habitica.extensions -import junit.framework.TestCase -import java.util.* +import com.habitrpg.android.habitica.BaseAnnotationTestCase +import io.kotest.matchers.shouldBe +import java.util.Date -class DateExtensionsTest : TestCase() { +class DateExtensionsTest : BaseAnnotationTestCase() { + @Test fun testGetShortRemainingStringWithDay() { - assertEquals("24d 1h 3m", (Date().time + 2077400000L).getShortRemainingString()) + "24d 1h 3m" shouldBe (Date().time + 2077400000L).getShortRemainingString() } + @Test fun testGetShortRemainingStringWithHour() { - assertEquals("5h 46m", (Date().time + 20774000L).getShortRemainingString()) + "5h 46m" shouldBe (Date().time + 20774000L).getShortRemainingString() } + @Test fun testGetShortRemainingStringWithMinute() { - assertEquals("34m 37s", (Date().time + 2077400L).getShortRemainingString()) + "34m 37s" shouldBe (Date().time + 2077400L).getShortRemainingString() } } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt index 89353d483..de2ecc977 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/HealthFormatterTest.kt @@ -1,5 +1,6 @@ package com.habitrpg.android.habitica.helpers +import io.kotest.matchers.shouldBe import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import java.util.Locale @@ -7,49 +8,45 @@ import java.util.Locale class HealthFormatterTest { @Test fun shouldRoundValuesGreaterThanOneDown() { - assertEquals(49.0, HealthFormatter.format(49.9), DELTA) - assertEquals(9.0, HealthFormatter.format(9.9999), DELTA) - assertEquals(1.0, HealthFormatter.format(1.9), DELTA) - assertEquals(1.0, HealthFormatter.format(1.0001), DELTA) + 49.0 shouldBe HealthFormatter.format(49.9) + 9.0 shouldBe HealthFormatter.format(9.9999) + 1.0 shouldBe HealthFormatter.format(1.9) + 1.0 shouldBe HealthFormatter.format(1.0001) - assertEquals("49", HealthFormatter.formatToString(49.9, Locale.US)) - assertEquals("9", HealthFormatter.formatToString(9.9999, Locale.US)) - assertEquals("1", HealthFormatter.formatToString(1.9, Locale.US)) - assertEquals("1", HealthFormatter.formatToString(1.0001, Locale.US)) + "49" shouldBe HealthFormatter.formatToString(49.9, Locale.US) + "9" shouldBe HealthFormatter.formatToString(9.9999, Locale.US) + "1" shouldBe HealthFormatter.formatToString(1.9, Locale.US) + "1" shouldBe HealthFormatter.formatToString(1.0001, Locale.US) } @Test fun shouldRoundValuesBetweenZeroAndOneUpToOneDecimalPlace() { - assertEquals(1.0, HealthFormatter.format(0.99), DELTA) - assertEquals(0.2, HealthFormatter.format(0.11), DELTA) - assertEquals(0.1, HealthFormatter.format(0.0001), DELTA) + 1.0 shouldBe HealthFormatter.format(0.99) + 0.2 shouldBe HealthFormatter.format(0.11) + 0.1 shouldBe HealthFormatter.format(0.0001) - assertEquals("1", HealthFormatter.formatToString(0.99, Locale.US)) - assertEquals("0.2", HealthFormatter.formatToString(0.11, Locale.US)) - assertEquals("0.1", HealthFormatter.formatToString(0.0001, Locale.US)) + "1" shouldBe HealthFormatter.formatToString(0.99, Locale.US) + "0.2" shouldBe HealthFormatter.formatToString(0.11, Locale.US) + "0.1" shouldBe HealthFormatter.formatToString(0.0001, Locale.US) } @Test fun shouldRoundNegativeValuesDown() { - assertEquals(-1.0, HealthFormatter.format(-0.1), DELTA) - assertEquals(-2.0, HealthFormatter.format(-2.0), DELTA) + -1.0 shouldBe HealthFormatter.format(-0.1) + -2.0 shouldBe HealthFormatter.format(-2.0) - assertEquals("-1", HealthFormatter.formatToString(-0.1, Locale.US)) - assertEquals("-2", HealthFormatter.formatToString(-2.0, Locale.US)) + "-1" shouldBe HealthFormatter.formatToString(-0.1, Locale.US) + "-2" shouldBe HealthFormatter.formatToString(-2.0, Locale.US) } @Test fun shouldLeaveAcceptableValuesAsTheyAre() { - assertEquals(20.0, HealthFormatter.format(20), DELTA) - assertEquals(0.0, HealthFormatter.format(0), DELTA) - assertEquals(0.9, HealthFormatter.format(0.9), DELTA) + 20.0 shouldBe HealthFormatter.format(20) + 0.0 shouldBe HealthFormatter.format(0) + 0.9 shouldBe HealthFormatter.format(0.9) - assertEquals("20", HealthFormatter.formatToString(20, Locale.US)) - assertEquals("0", HealthFormatter.formatToString(0, Locale.US)) - assertEquals("0.9", HealthFormatter.formatToString(0.9, Locale.US)) - } - - companion object { - private const val DELTA = 0.0 + "20" shouldBe HealthFormatter.formatToString(20, Locale.US) + "0" shouldBe HealthFormatter.formatToString(0, Locale.US) + "0.9" shouldBe HealthFormatter.formatToString(0.9, Locale.US) } } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt index 24c1cc351..76a233d3c 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/NumberAbbreviatorTest.kt @@ -3,51 +3,46 @@ package com.habitrpg.android.habitica.helpers import android.content.Context import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.helpers.NumberAbbreviator.abbreviate +import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe +import io.mockk.clearMocks import io.mockk.every -import io.mockk.impl.annotations.MockK -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test +import io.mockk.mockk -class NumberAbbreviatorTest { - @MockK private lateinit var context: Context - @BeforeEach - fun setUp() { - every { context.getString(R.string.thousand_abbrev) } returns "k" - every { context.getString(R.string.million_abbrev) } returns "m" - every { context.getString(R.string.billion_abbrev) } returns "b" - every { context.getString(R.string.trillion_abbrev) } returns "t" +class NumberAbbreviatorTest: StringSpec({ + val mockContext = mockk() + beforeEach { + every { mockContext.getString(R.string.thousand_abbrev) } returns "k" + every { mockContext.getString(R.string.million_abbrev) } returns "m" + every { mockContext.getString(R.string.billion_abbrev) } returns "b" + every { mockContext.getString(R.string.trillion_abbrev) } returns "t" } - @Test - fun testThatItDoesntAbbreviatesSmallNumbers() { - abbreviate(context, 215.0, 2) shouldBe "215" - abbreviate(context, 2.05, 2) shouldBe "2.05" + "doesn't abbreviate small numbers" { + abbreviate(mockContext, 215.0, 2) shouldBe "215" + abbreviate(mockContext, 2.05, 2) shouldBe "2.05" } - @Test - fun testThatItAbbreviatesThousand() { - abbreviate(context, 1550.0, 2) shouldBe "1.55k" + "it abbreviates thousands" { + abbreviate(mockContext, 1550.0, 2) shouldBe "1.55k" } - @Test - fun testThatItAbbreviatesMillion() { - abbreviate(context, 9990000.0, 2) shouldBe "9.99m" + "it abbreviates millions" { + abbreviate(mockContext, 9990000.0, 2) shouldBe "9.99m" } - @Test - fun testThatItAbbreviatesBillion() { - abbreviate(context, 1990000000.0, 2) shouldBe "1.99b" + "it abbreviates billions" { + abbreviate(mockContext, 1990000000.0, 2) shouldBe "1.99b" } - @Test - fun testThatItAbbreviatesThousandWithoutAdditionalDecimals() { - abbreviate(context, 1000.0, 2) shouldBe "1k" - abbreviate(context, 1500.0, 2) shouldBe "1.5k" + "it abbreviates thousands without additional decimals" { + abbreviate(mockContext, 1000.0, 2) shouldBe "1k" + abbreviate(mockContext, 1500.0, 2) shouldBe "1.5k" } - @Test - fun voidtestThatitRoundsCorrectly() { - abbreviate(context, 9999.0, 2) shouldBe "9.99k" + "it rounds correctly" { + abbreviate(mockContext, 9999.0, 2) shouldBe "9.99k" } -} + + afterEach { clearMocks(mockContext) } +}) diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/UserStatComputerTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/UserStatComputerTest.kt index 83e1923c1..ef28c6760 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/UserStatComputerTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/helpers/UserStatComputerTest.kt @@ -1,17 +1,17 @@ package com.habitrpg.android.habitica.helpers +import com.habitrpg.android.habitica.BaseAnnotationTestCase import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.helpers.UserStatComputer.AttributeRow import com.habitrpg.android.habitica.helpers.UserStatComputer.EquipmentRow import com.habitrpg.android.habitica.models.inventory.Equipment import com.habitrpg.android.habitica.models.members.Member import com.habitrpg.android.habitica.models.user.Stats -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Test +import io.kotest.matchers.shouldBe + import java.util.ArrayList -class UserStatComputerTest { +class UserStatComputerTest: BaseAnnotationTestCase() { private val userStatComputer: UserStatComputer = UserStatComputer() private val user: Member = Member() private val equipment: Equipment @@ -26,9 +26,9 @@ class UserStatComputerTest { fun shouldReturnCorrectEquipmentRow() { val statsRows = userStatComputer.computeClassBonus(equipmentList, user) val equipmentRow = statsRows[0] as EquipmentRow - assertEquals(key, equipmentRow.gearKey) - assertEquals(text, equipmentRow.text) - assertEquals("STR 1, INT 2, CON 4, PER 3", equipmentRow.stats) + key shouldBe equipmentRow.gearKey + text shouldBe equipmentRow.text + "STR 1, INT 2, CON 4, PER 3" shouldBe equipmentRow.stats } @Test @@ -37,13 +37,13 @@ class UserStatComputerTest { equipment.klass = Stats.ROGUE val statsRows = userStatComputer.computeClassBonus(equipmentList, user) val attributeRow = statsRows[2] as AttributeRow - assertEquals(R.string.profile_class_bonus.toLong(), attributeRow.labelId.toLong()) - assertEquals((str * 0.5f).toDouble(), attributeRow.strVal.toDouble(), 0.01) - assertEquals((intStat * 0.0f).toDouble(), attributeRow.intVal.toDouble(), 0.01) - assertEquals((con * 0.0f).toDouble(), attributeRow.conVal.toDouble(), 0.01) - assertEquals((per * 0.5f).toDouble(), attributeRow.perVal.toDouble(), 0.01) - assertFalse(attributeRow.roundDown) - assertFalse(attributeRow.summary) + R.string.profile_class_bonus.toLong() shouldBe attributeRow.labelId.toLong() + (str * 0.5f).toDouble() shouldBe attributeRow.strVal.toDouble() + (intStat * 0.0f).toDouble() shouldBe attributeRow.intVal.toDouble() + (con * 0.0f).toDouble() shouldBe attributeRow.conVal.toDouble() + (per * 0.5f).toDouble() shouldBe attributeRow.perVal.toDouble() + attributeRow.roundDown shouldBe false + attributeRow.summary shouldBe false } @Test @@ -53,13 +53,13 @@ class UserStatComputerTest { equipment.specialClass = Stats.ROGUE val statsRows = userStatComputer.computeClassBonus(equipmentList, user) val attributeRow = statsRows[2] as AttributeRow - assertEquals(R.string.profile_class_bonus.toLong(), attributeRow.labelId.toLong()) - assertEquals((str * 0.5f).toDouble(), attributeRow.strVal.toDouble(), 0.01) - assertEquals((intStat * 0.0f).toDouble(), attributeRow.intVal.toDouble(), 0.01) - assertEquals((con * 0.0f).toDouble(), attributeRow.conVal.toDouble(), 0.01) - assertEquals((per * 0.5f).toDouble(), attributeRow.perVal.toDouble(), 0.01) - assertFalse(attributeRow.roundDown) - assertFalse(attributeRow.summary) + R.string.profile_class_bonus.toLong() shouldBe attributeRow.labelId.toLong() + (str * 0.5f).toDouble() shouldBe attributeRow.strVal.toDouble() + (intStat * 0.0f).toDouble() shouldBe attributeRow.intVal.toDouble() + (con * 0.0f).toDouble() shouldBe attributeRow.conVal.toDouble() + (per * 0.5f).toDouble() shouldBe attributeRow.perVal.toDouble() + attributeRow.roundDown shouldBe false + attributeRow.summary shouldBe false } @Test @@ -69,13 +69,13 @@ class UserStatComputerTest { equipment.specialClass = "" val statsRows = userStatComputer.computeClassBonus(equipmentList, user) val attributeRow = statsRows[2] as AttributeRow - assertEquals(R.string.profile_class_bonus.toLong(), attributeRow.labelId.toLong()) - assertEquals((str * 0.0f).toDouble(), attributeRow.strVal.toDouble(), 0.01) - assertEquals((intStat * 0.0f).toDouble(), attributeRow.intVal.toDouble(), 0.01) - assertEquals((con * 0.0f).toDouble(), attributeRow.conVal.toDouble(), 0.01) - assertEquals((per * 0.0f).toDouble(), attributeRow.perVal.toDouble()) - assertFalse(attributeRow.roundDown) - assertFalse(attributeRow.summary) + R.string.profile_class_bonus.toLong() shouldBe attributeRow.labelId.toLong() + (str * 0.0f).toDouble() shouldBe attributeRow.strVal.toDouble() + (intStat * 0.0f).toDouble() shouldBe attributeRow.intVal.toDouble() + (con * 0.0f).toDouble() shouldBe attributeRow.conVal.toDouble() + (per * 0.0f).toDouble() shouldBe attributeRow.perVal.toDouble() + attributeRow.roundDown shouldBe false + attributeRow.summary shouldBe false } init { diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/SubscriptionPlanTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/SubscriptionPlanTest.kt index 2fce4b0fc..ce865ca71 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/SubscriptionPlanTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/SubscriptionPlanTest.kt @@ -1,15 +1,15 @@ package com.habitrpg.android.habitica.models +import com.habitrpg.android.habitica.BaseAnnotationTestCase import com.habitrpg.android.habitica.models.user.SubscriptionPlan -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test +import io.kotest.core.spec.style.AnnotationSpec +import io.kotest.matchers.shouldBe import java.util.Calendar import java.util.Date -class SubscriptionPlanTest { +class SubscriptionPlanTest: BaseAnnotationTestCase() { private var plan: SubscriptionPlan? = null - @BeforeEach + @AnnotationSpec.BeforeEach fun setUp() { plan = SubscriptionPlan() plan!!.customerId = "fake_customer_id" @@ -19,7 +19,7 @@ class SubscriptionPlanTest { @get:Test val isActiveForNoTerminationDate: Unit get() { - Assertions.assertTrue(plan!!.isActive) + plan?.isActive shouldBe true } @get:Test @@ -29,7 +29,7 @@ class SubscriptionPlanTest { calendar.time = Date() calendar.add(Calendar.DATE, 1) plan!!.dateTerminated = calendar.time - Assertions.assertTrue(plan!!.isActive) + plan?.isActive shouldBe true } @get:Test @@ -39,6 +39,6 @@ class SubscriptionPlanTest { calendar.time = Date() calendar.add(Calendar.DATE, -1) plan!!.dateTerminated = calendar.time - Assertions.assertFalse(plan!!.isActive) + plan?.isActive shouldBe false } } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/UserTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/UserTest.kt index 369b0b9bd..26a6dbd17 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/UserTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/UserTest.kt @@ -1,15 +1,14 @@ package com.habitrpg.android.habitica.models +import com.habitrpg.android.habitica.BaseAnnotationTestCase import com.habitrpg.android.habitica.models.user.Items import com.habitrpg.android.habitica.models.user.OwnedMount import com.habitrpg.android.habitica.models.user.OwnedPet import com.habitrpg.android.habitica.models.user.User +import io.kotest.matchers.shouldBe import io.realm.RealmList -import org.junit.jupiter.api.Assertions -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -class UserTest { +class UserTest: BaseAnnotationTestCase() { private var user: User? = null @BeforeEach fun setup() { @@ -28,13 +27,13 @@ class UserTest { pets.add(OwnedPet()) pets.add(OwnedPet()) user!!.items!!.pets = pets - Assertions.assertEquals(5, user!!.petsFoundCount) + user?.petsFoundCount shouldBe 5 } @get:Test val petsFoundCount_onNoPetCollectionAvailable_shouldReturnZero: Unit get() { - Assertions.assertEquals(0, user!!.petsFoundCount) + user?.petsFoundCount shouldBe 0 } @get:Test @@ -47,12 +46,12 @@ class UserTest { mounts.add(OwnedMount()) mounts.add(OwnedMount()) user!!.items!!.mounts = mounts - Assertions.assertEquals(5, user!!.mountsTamedCount) + user?.mountsTamedCount shouldBe 5 } @get:Test val mountsTamedCount_onNoMountCollectionAvailable_shouldReturnZero: Unit get() { - Assertions.assertEquals(0, user!!.mountsTamedCount) + user?.mountsTamedCount shouldBe 0 } } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/MountTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/MountTest.kt index c57074153..eee8afee1 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/MountTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/MountTest.kt @@ -1,18 +1,16 @@ package com.habitrpg.android.habitica.models.inventory import android.content.Context +import com.habitrpg.android.habitica.BaseAnnotationTestCase import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.getTranslatedType import io.kotest.matchers.shouldBe import io.mockk.every -import io.mockk.impl.annotations.MockK -import org.junit.jupiter.api.Test private const val FAKE_STANDARD = "Standard" private const val FAKE_PREMIUM = "premium" -class MountTest { - @MockK private lateinit var mockContext: Context +class MountTest: BaseAnnotationTestCase() { private var mount: Mount = Mount() @Test diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/PetTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/PetTest.kt index 8a8e5cd20..ced6f50db 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/PetTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/PetTest.kt @@ -1,18 +1,16 @@ package com.habitrpg.android.habitica.models.inventory import android.content.Context +import com.habitrpg.android.habitica.BaseAnnotationTestCase import com.habitrpg.android.habitica.R import com.habitrpg.android.habitica.extensions.getTranslatedType import io.kotest.matchers.shouldBe import io.mockk.every -import io.mockk.impl.annotations.MockK -import org.junit.jupiter.api.Test private const val FAKE_STANDARD = "Standard" private const val FAKE_PREMIUM = "premium" -class PetTest { - @MockK private lateinit var mockContext: Context +class PetTest: BaseAnnotationTestCase() { private var pet: Pet = Pet() @Test diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/QuestBossTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/QuestBossTest.kt new file mode 100644 index 000000000..64341f52b --- /dev/null +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/inventory/QuestBossTest.kt @@ -0,0 +1,23 @@ +package com.habitrpg.android.habitica.models.inventory + +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe + +class QuestBossTest : StringSpec({ + val boss = QuestBoss() + beforeEach { + boss.rage = QuestBossRage() + } + "returns false for 0" { + boss.rage?.value = 0.0 + boss.hasRage shouldBe false + } + "returns true for more than 0" { + boss.rage?.value = 1000.0 + boss.hasRage shouldBe true + } + "returns false for no value" { + boss.rage = null + boss.hasRage shouldBe false + } +}) diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/members/MemberTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/members/MemberTest.kt new file mode 100644 index 000000000..249fc4dec --- /dev/null +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/members/MemberTest.kt @@ -0,0 +1,8 @@ +package com.habitrpg.android.habitica.models.members + +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe + +class MemberTest : StringSpec({ + "hasClass" { } +}) diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.java b/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.java deleted file mode 100644 index bb60cd864..000000000 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.habitrpg.android.habitica.utils; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; - -import org.junit.Before; -import org.junit.Test; - -import java.lang.reflect.Type; -import java.util.Date; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; - -public class DateDeserializerTest { - DateDeserializer deserializer; - JsonDeserializationContext deserializationContext; - JsonSerializationContext serializationContext; - - Long referenceTimestamp; - - @Before - public void setup() { - this.deserializer = new DateDeserializer(); - this.deserializationContext = new JsonDeserializationContext() { - @Override - public T deserialize(JsonElement json, Type typeOfT) throws JsonParseException { - return null; - } - }; - this.serializationContext = new JsonSerializationContext() { - @Override - public JsonElement serialize(Object src) { - return null; - } - - @Override - public JsonElement serialize(Object src, Type typeOfSrc) { - return null; - } - }; - - this.referenceTimestamp = Long.valueOf("1443445200000"); - } - - @Test - public void validateNormalDateDeserialize() { - Date date = this.deserializer.deserialize(new JsonPrimitive("2015-09-28T13:00:00.000Z"), Date.class, this.deserializationContext); - - assertThat(date, is(new Date(referenceTimestamp))); - } - - @Test - public void validateTimestampDeserialize() { - Date date = this.deserializer.deserialize(new JsonPrimitive(referenceTimestamp), Date.class, this.deserializationContext); - assertThat(date, is(new Date(referenceTimestamp))); - } - - @Test - public void validateEmptyDeserialize() { - Date date = this.deserializer.deserialize(new JsonPrimitive(""), Date.class, this.deserializationContext); - assertNull(date); - } - - @Test - public void validateNormalDateSerialize() { - JsonElement dateElement = this.deserializer.serialize(new Date(referenceTimestamp), Date.class, this.serializationContext); - assertThat(dateElement.getAsString(), is("2015-09-28T13:00:00.000Z")); - } - - @Test - public void validateEmptySerialize() { - JsonElement dateElement = this.deserializer.serialize(null, Date.class, this.serializationContext); - assertThat(dateElement.getAsString(), is("")); - } -} diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt new file mode 100644 index 000000000..78355f15f --- /dev/null +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/utils/DateDeserializerTest.kt @@ -0,0 +1,80 @@ +package com.habitrpg.android.habitica.utils + +import com.google.gson.JsonDeserializationContext +import com.google.gson.JsonElement +import com.google.gson.JsonParseException +import com.google.gson.JsonPrimitive +import com.google.gson.JsonSerializationContext +import com.habitrpg.android.habitica.BaseAnnotationTestCase +import io.kotest.matchers.shouldBe +import java.lang.reflect.Type +import java.util.Date + +class DateDeserializerTest: BaseAnnotationTestCase() { + var deserializer = DateDeserializer() + lateinit var deserializationContext: JsonDeserializationContext + lateinit var serializationContext: JsonSerializationContext + var referenceTimestamp: Long = 1443445200000 + + @Before + fun setup() { + deserializationContext = object : JsonDeserializationContext { + override fun deserialize(json: JsonElement, typeOfT: Type): T? { + return null + } + } + serializationContext = object : JsonSerializationContext { + override fun serialize(src: Any): JsonElement? { + return null + } + + override fun serialize(src: Any, typeOfSrc: Type): JsonElement? { + return null + } + } + } + + @Test + fun validateNormalDateDeserialize() { + val date = deserializer.deserialize( + JsonPrimitive("2015-09-28T13:00:00.000Z"), + Date::class.java, + deserializationContext + ) + date shouldBe Date(referenceTimestamp) + } + + @Test + fun validateTimestampDeserialize() { + val date = deserializer.deserialize( + JsonPrimitive(referenceTimestamp), + Date::class.java, + deserializationContext + ) + date shouldBe Date(referenceTimestamp) + } + + @Test + fun validateEmptyDeserialize() { + val date = + deserializer.deserialize(JsonPrimitive(""), Date::class.java, deserializationContext) + date shouldBe null + } + + @Test + fun validateNormalDateSerialize() { + val dateElement: JsonElement = deserializer!!.serialize( + Date( + referenceTimestamp!! + ), Date::class.java, serializationContext + ) + dateElement.asString shouldBe "2015-09-28T13:00:00.000Z" + } + + @Test + fun validateEmptySerialize() { + val dateElement: JsonElement = + deserializer!!.serialize(null, Date::class.java, serializationContext) + dateElement.asString shouldBe "" + } +} \ No newline at end of file