From 156f40595efd710837c1fd760067a198753413da Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 2 May 2022 00:17:24 -0400 Subject: [PATCH 1/8] Set when user will next get hourglass as month using offset --- Habitica/build.gradle | 4 ++++ Habitica/res/layout/subscription_details.xml | 4 ++-- Habitica/res/values/strings.xml | 1 + .../subscriptions/SubscriptionDetailsView.kt | 16 ++++++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/Habitica/build.gradle b/Habitica/build.gradle index a0cd29990..3f9924564 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -136,6 +136,8 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + implementation 'com.willowtreeapps:signinwithapplebutton:0.3' implementation project(':shared') @@ -265,6 +267,8 @@ android { } compileOptions { + coreLibraryDesugaringEnabled true + sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } diff --git a/Habitica/res/layout/subscription_details.xml b/Habitica/res/layout/subscription_details.xml index a75136aa7..ac1753ed6 100644 --- a/Habitica/res/layout/subscription_details.xml +++ b/Habitica/res/layout/subscription_details.xml @@ -183,13 +183,13 @@ android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" - android:text="@string/current_hourclasses" + android:text="@string/next_hourglass" style="@style/subscriptionBoxText.Subtitle" /> diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 683a09184..e8913d925 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -432,6 +432,7 @@ Current Bonuses Months subscribed Current Mystic Hourglasses + Next Hourglass* Monthly gem cap Inactive 1 Month diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index 9564680a1..12444ef47 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -4,6 +4,8 @@ import android.content.Context import android.content.Intent import android.graphics.drawable.BitmapDrawable import android.net.Uri +import android.text.format.DateUtils +import android.text.format.DateUtils.getRelativeTimeSpanString import android.util.AttributeSet import android.view.View import android.widget.LinearLayout @@ -13,7 +15,10 @@ import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.user.SubscriptionPlan import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import java.text.DateFormat -import java.util.Date +import java.time.Instant +import java.time.LocalDate +import java.time.format.DateTimeFormatter +import java.util.* class SubscriptionDetailsView : LinearLayout { @@ -96,8 +101,15 @@ class SubscriptionDetailsView : LinearLayout { } else { binding.monthsSubscribedTextView.text = resources.getString(R.string.x_months, plan.consecutive?.count ?: 0) } + binding.gemCapTextView.text = plan.totalNumberOfGems.toString() - binding.currentHourglassesTextView.text = plan.consecutive?.trinkets.toString() + + if (plan.consecutive != null) { + val monthsTillNextHourglass = 3 - (plan.consecutive!!.offset % 3) + val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) + val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); + binding.nextHourglassTextView.text = nextHourGlassMonthString + } binding.changeSubscriptionButton.visibility = View.VISIBLE if (plan.paymentMethod != null) { From 1c144f992e600c96868989b21a40d5ecf1fd395d Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 9 May 2022 02:08:37 -0400 Subject: [PATCH 2/8] determine next hourglass by subscription reoccurrence & consecutive months subscribed --- .../ui/views/subscriptions/SubscriptionDetailsView.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index 12444ef47..b7861575a 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -50,16 +50,21 @@ class SubscriptionDetailsView : LinearLayout { updateSubscriptionStatusPill(plan) var duration: String? = null + var subscriptionRenewalDuration = 3 if (plan.planId != null && plan.dateTerminated == null) { if (plan.planId == SubscriptionPlan.PLANID_BASIC || plan.planId == SubscriptionPlan.PLANID_BASICEARNED) { duration = resources.getString(R.string.month) + subscriptionRenewalDuration = 3; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC3MONTH) { duration = resources.getString(R.string.three_months) + subscriptionRenewalDuration = 3; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC6MONTH || plan.planId == SubscriptionPlan.PLANID_GOOGLE6MONTH) { duration = resources.getString(R.string.six_months) + subscriptionRenewalDuration = 6; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC12MONTH) { duration = resources.getString(R.string.twelve_months) + subscriptionRenewalDuration = 12; } } @@ -104,8 +109,8 @@ class SubscriptionDetailsView : LinearLayout { binding.gemCapTextView.text = plan.totalNumberOfGems.toString() - if (plan.consecutive != null) { - val monthsTillNextHourglass = 3 - (plan.consecutive!!.offset % 3) + if (plan.consecutive?.count != null) { + var monthsTillNextHourglass = subscriptionRenewalDuration - (plan.consecutive?.count!! % subscriptionRenewalDuration) val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); binding.nextHourglassTextView.text = nextHourGlassMonthString From e756b48c78e12afc2dfcd4a9fd533e2bd223f700 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 9 May 2022 02:09:10 -0400 Subject: [PATCH 3/8] var -> val --- .../habitica/ui/views/subscriptions/SubscriptionDetailsView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index b7861575a..cd400dc45 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -110,7 +110,7 @@ class SubscriptionDetailsView : LinearLayout { binding.gemCapTextView.text = plan.totalNumberOfGems.toString() if (plan.consecutive?.count != null) { - var monthsTillNextHourglass = subscriptionRenewalDuration - (plan.consecutive?.count!! % subscriptionRenewalDuration) + val monthsTillNextHourglass = subscriptionRenewalDuration - (plan.consecutive?.count!! % subscriptionRenewalDuration) val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); binding.nextHourglassTextView.text = nextHourGlassMonthString From b4655d5f73e5e4a4fa575621939b01d19375fb17 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sun, 15 May 2022 14:13:03 -0400 Subject: [PATCH 4/8] Handle basic monthly subscription user receive hourglass on four month --- Habitica/res/values/strings.xml | 2 +- .../subscriptions/SubscriptionDetailsView.kt | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index e8913d925..622d3e6c8 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -432,7 +432,7 @@ Current Bonuses Months subscribed Current Mystic Hourglasses - Next Hourglass* + Next Hourglass Monthly gem cap Inactive 1 Month diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index cd400dc45..edd5ec440 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -4,8 +4,6 @@ import android.content.Context import android.content.Intent import android.graphics.drawable.BitmapDrawable import android.net.Uri -import android.text.format.DateUtils -import android.text.format.DateUtils.getRelativeTimeSpanString import android.util.AttributeSet import android.view.View import android.widget.LinearLayout @@ -15,7 +13,6 @@ import com.habitrpg.android.habitica.extensions.layoutInflater import com.habitrpg.android.habitica.models.user.SubscriptionPlan import com.habitrpg.android.habitica.ui.views.HabiticaIconsHelper import java.text.DateFormat -import java.time.Instant import java.time.LocalDate import java.time.format.DateTimeFormatter import java.util.* @@ -50,21 +47,23 @@ class SubscriptionDetailsView : LinearLayout { updateSubscriptionStatusPill(plan) var duration: String? = null - var subscriptionRenewalDuration = 3 + var renewalUntilNextHourglass = 3 if (plan.planId != null && plan.dateTerminated == null) { if (plan.planId == SubscriptionPlan.PLANID_BASIC || plan.planId == SubscriptionPlan.PLANID_BASICEARNED) { duration = resources.getString(R.string.month) - subscriptionRenewalDuration = 3; + renewalUntilNextHourglass = 3; + //If user has a initial basic monthly subscription, receive hourglasses on fourth month + plan.consecutive?.count.let { if (it!! < 3) { renewalUntilNextHourglass + 1 } } } else if (plan.planId == SubscriptionPlan.PLANID_BASIC3MONTH) { duration = resources.getString(R.string.three_months) - subscriptionRenewalDuration = 3; + renewalUntilNextHourglass = 3; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC6MONTH || plan.planId == SubscriptionPlan.PLANID_GOOGLE6MONTH) { duration = resources.getString(R.string.six_months) - subscriptionRenewalDuration = 6; + renewalUntilNextHourglass = 6; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC12MONTH) { duration = resources.getString(R.string.twelve_months) - subscriptionRenewalDuration = 12; + renewalUntilNextHourglass = 12; } } @@ -110,7 +109,7 @@ class SubscriptionDetailsView : LinearLayout { binding.gemCapTextView.text = plan.totalNumberOfGems.toString() if (plan.consecutive?.count != null) { - val monthsTillNextHourglass = subscriptionRenewalDuration - (plan.consecutive?.count!! % subscriptionRenewalDuration) + val monthsTillNextHourglass = renewalUntilNextHourglass - (plan.consecutive?.count!! % renewalUntilNextHourglass) val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); binding.nextHourglassTextView.text = nextHourGlassMonthString From 2d03446fd9d46a6d5179ed8e13c1d6ab4473c8c3 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 23 May 2022 09:31:50 -0400 Subject: [PATCH 5/8] next hourglass tv camelCase -> snake_case --- Habitica/res/layout/subscription_details.xml | 2 +- .../habitica/ui/views/subscriptions/SubscriptionDetailsView.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Habitica/res/layout/subscription_details.xml b/Habitica/res/layout/subscription_details.xml index ac1753ed6..253fd7434 100644 --- a/Habitica/res/layout/subscription_details.xml +++ b/Habitica/res/layout/subscription_details.xml @@ -189,7 +189,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Pill" - android:id="@+id/nextHourglassTextView" + android:id="@+id/next_hourglass_textview" tools:text="4" /> diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index edd5ec440..27215f5d6 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -112,7 +112,7 @@ class SubscriptionDetailsView : LinearLayout { val monthsTillNextHourglass = renewalUntilNextHourglass - (plan.consecutive?.count!! % renewalUntilNextHourglass) val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); - binding.nextHourglassTextView.text = nextHourGlassMonthString + binding.nextHourglassTextview.text = nextHourGlassMonthString } binding.changeSubscriptionButton.visibility = View.VISIBLE From a69fe94ad083d67572d26550f9e1f912595e2fdc Mon Sep 17 00:00:00 2001 From: Hafiz Date: Mon, 23 May 2022 11:34:16 -0400 Subject: [PATCH 6/8] Moved next hourglass logic into Subscription Plan, added unit tests --- .../habitica/models/user/SubscriptionPlan.kt | 17 ++++++++++ .../subscriptions/SubscriptionDetailsView.kt | 15 ++------ .../models/user/SubscriptionPlanTest.kt | 34 +++++++++++++++++++ 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt index 9fd860ed1..85ee447e2 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt @@ -47,6 +47,23 @@ open class SubscriptionPlan : RealmObject(), BaseObject { return totalNumberOfGems - (gemsBought ?: 0) } + val monthsUntilNextHourglass: Int? + get() { + var renewalUntilNextHourglass = 0 + if (planId != null && dateTerminated == null && consecutive?.count != null) { + when (planId) { + // If user has a initial basic monthly subscription, receive hourglasses on fourth month, else receive on third month. + PLANID_BASIC -> renewalUntilNextHourglass = if (consecutive?.count!! < 3) { 4 } else 3 + PLANID_BASICEARNED -> renewalUntilNextHourglass = if (consecutive?.count!! < 3) { 4 } else 3 + PLANID_BASIC3MONTH -> renewalUntilNextHourglass = 3 + PLANID_BASIC6MONTH -> renewalUntilNextHourglass = 6 + PLANID_BASIC12MONTH -> renewalUntilNextHourglass = 12 + } + return renewalUntilNextHourglass - (consecutive?.count!! % renewalUntilNextHourglass) + } + return null + } + companion object { var PLANID_BASIC = "basic" var PLANID_BASICEARNED = "basic_earned" diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt index 27215f5d6..04ee559f0 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/subscriptions/SubscriptionDetailsView.kt @@ -47,23 +47,16 @@ class SubscriptionDetailsView : LinearLayout { updateSubscriptionStatusPill(plan) var duration: String? = null - var renewalUntilNextHourglass = 3 if (plan.planId != null && plan.dateTerminated == null) { if (plan.planId == SubscriptionPlan.PLANID_BASIC || plan.planId == SubscriptionPlan.PLANID_BASICEARNED) { duration = resources.getString(R.string.month) - renewalUntilNextHourglass = 3; - //If user has a initial basic monthly subscription, receive hourglasses on fourth month - plan.consecutive?.count.let { if (it!! < 3) { renewalUntilNextHourglass + 1 } } } else if (plan.planId == SubscriptionPlan.PLANID_BASIC3MONTH) { duration = resources.getString(R.string.three_months) - renewalUntilNextHourglass = 3; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC6MONTH || plan.planId == SubscriptionPlan.PLANID_GOOGLE6MONTH) { duration = resources.getString(R.string.six_months) - renewalUntilNextHourglass = 6; } else if (plan.planId == SubscriptionPlan.PLANID_BASIC12MONTH) { duration = resources.getString(R.string.twelve_months) - renewalUntilNextHourglass = 12; } } @@ -108,11 +101,9 @@ class SubscriptionDetailsView : LinearLayout { binding.gemCapTextView.text = plan.totalNumberOfGems.toString() - if (plan.consecutive?.count != null) { - val monthsTillNextHourglass = renewalUntilNextHourglass - (plan.consecutive?.count!! % renewalUntilNextHourglass) - val nextHourglassMonth = LocalDate.now().plusMonths(monthsTillNextHourglass.toLong()) - val nextHourGlassMonthString = nextHourglassMonth.format(DateTimeFormatter.ofPattern("MMM")); - binding.nextHourglassTextview.text = nextHourGlassMonthString + if (plan.monthsUntilNextHourglass != null){ + val nextHourglassMonth = LocalDate.now().plusMonths(plan.monthsUntilNextHourglass!!.toLong()).format(DateTimeFormatter.ofPattern("MMM")) + nextHourglassMonth?.let { binding.nextHourglassTextview.text = it } } binding.changeSubscriptionButton.visibility = View.VISIBLE diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt index c16dd757f..87de7f467 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt @@ -67,4 +67,38 @@ class SubscriptionPlanTest : WordSpec({ plan.numberOfGemsLeft shouldBe 25 } } + + "monthsUntilNextHourglass" should { + beforeEach { + plan.consecutive = SubscriptionPlanConsecutive() + plan.consecutive?.count = 1 + plan.dateTerminated = null + } + + "months until next hourglass with initial basic sub" { + plan.planId = SubscriptionPlan.PLANID_BASIC + plan.monthsUntilNextHourglass shouldBe 3 + } + + "months until next hourglass with basic sub after receiving initial hourglass" { + plan.consecutive?.count = 4 + plan.planId = SubscriptionPlan.PLANID_BASIC + plan.monthsUntilNextHourglass shouldBe 2 + } + + "months until next hourglass with three month sub" { + plan.planId = SubscriptionPlan.PLANID_BASIC3MONTH + plan.monthsUntilNextHourglass shouldBe 2 + } + + "months until next hourglass with six month sub" { + plan.planId = SubscriptionPlan.PLANID_BASIC6MONTH + plan.monthsUntilNextHourglass shouldBe 5 + } + + "months until next hourglass with 12 month sub" { + plan.planId = SubscriptionPlan.PLANID_BASIC12MONTH + plan.monthsUntilNextHourglass shouldBe 11 + } + } }) From 15f3b05337a10c37848577e866defbbd1911ec2b Mon Sep 17 00:00:00 2001 From: Hafiz Date: Tue, 24 May 2022 08:07:13 -0400 Subject: [PATCH 7/8] Unit Tests for hourglasses --- .../habitica/models/user/SubscriptionPlan.kt | 22 +++++++++--------- .../models/user/SubscriptionPlanTest.kt | 23 +++++++++++++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt index 85ee447e2..67ade63df 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt @@ -47,21 +47,21 @@ open class SubscriptionPlan : RealmObject(), BaseObject { return totalNumberOfGems - (gemsBought ?: 0) } + /* + If user has a initial basic monthly subscription, receive hourglasses on fourth month, + else receive on third month (subtract 1 from total consecutive count) + */ val monthsUntilNextHourglass: Int? get() { - var renewalUntilNextHourglass = 0 - if (planId != null && dateTerminated == null && consecutive?.count != null) { - when (planId) { - // If user has a initial basic monthly subscription, receive hourglasses on fourth month, else receive on third month. - PLANID_BASIC -> renewalUntilNextHourglass = if (consecutive?.count!! < 3) { 4 } else 3 - PLANID_BASICEARNED -> renewalUntilNextHourglass = if (consecutive?.count!! < 3) { 4 } else 3 - PLANID_BASIC3MONTH -> renewalUntilNextHourglass = 3 - PLANID_BASIC6MONTH -> renewalUntilNextHourglass = 6 - PLANID_BASIC12MONTH -> renewalUntilNextHourglass = 12 + return if (consecutive?.offset == 0) { + if (consecutive?.count == 0) { + 4 + } else { + (3 - (((consecutive?.count ?: 0) - 1) % 3)) } - return renewalUntilNextHourglass - (consecutive?.count!! % renewalUntilNextHourglass) + } else { + consecutive?.offset } - return null } companion object { diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt index 87de7f467..f78dd4833 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt @@ -71,34 +71,43 @@ class SubscriptionPlanTest : WordSpec({ "monthsUntilNextHourglass" should { beforeEach { plan.consecutive = SubscriptionPlanConsecutive() - plan.consecutive?.count = 1 + plan.consecutive?.count = 0 plan.dateTerminated = null } "months until next hourglass with initial basic sub" { plan.planId = SubscriptionPlan.PLANID_BASIC - plan.monthsUntilNextHourglass shouldBe 3 + plan.monthsUntilNextHourglass shouldBe 4 + } + + "months until receiving first hourglass with basic sub" { + plan.consecutive?.count = 2 + plan.planId = SubscriptionPlan.PLANID_BASIC + plan.monthsUntilNextHourglass shouldBe 1 } "months until next hourglass with basic sub after receiving initial hourglass" { - plan.consecutive?.count = 4 + plan.consecutive?.count = 3 plan.planId = SubscriptionPlan.PLANID_BASIC - plan.monthsUntilNextHourglass shouldBe 2 + plan.monthsUntilNextHourglass shouldBe 3 } "months until next hourglass with three month sub" { + plan.consecutive?.offset = 3 plan.planId = SubscriptionPlan.PLANID_BASIC3MONTH - plan.monthsUntilNextHourglass shouldBe 2 + plan.monthsUntilNextHourglass shouldBe 3 } "months until next hourglass with six month sub" { + plan.consecutive?.offset = 6 plan.planId = SubscriptionPlan.PLANID_BASIC6MONTH - plan.monthsUntilNextHourglass shouldBe 5 + plan.monthsUntilNextHourglass shouldBe 6 } "months until next hourglass with 12 month sub" { + plan.consecutive?.offset = 12 plan.planId = SubscriptionPlan.PLANID_BASIC12MONTH - plan.monthsUntilNextHourglass shouldBe 11 + plan.monthsUntilNextHourglass shouldBe 12 } } }) From 2d22c3765238fa01ff4dcc5304b495d0541ff120 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Thu, 26 May 2022 13:34:41 -0400 Subject: [PATCH 8/8] update unit tests & monthsUntilNextHourglass --- .../android/habitica/models/user/SubscriptionPlan.kt | 9 ++++----- .../android/habitica/models/user/SubscriptionPlanTest.kt | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt index 67ade63df..ea478b96e 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/user/SubscriptionPlan.kt @@ -11,9 +11,11 @@ open class SubscriptionPlan : RealmObject(), BaseObject { var customerId: String? = null var dateCreated: Date? = null var dateUpdated: Date? = null + @JvmField var dateTerminated: Date? = null var paymentMethod: String? = null + @JvmField var planId: String? = null var gemsBought: Int? = null @@ -51,14 +53,11 @@ open class SubscriptionPlan : RealmObject(), BaseObject { If user has a initial basic monthly subscription, receive hourglasses on fourth month, else receive on third month (subtract 1 from total consecutive count) */ + val monthsUntilNextHourglass: Int? get() { return if (consecutive?.offset == 0) { - if (consecutive?.count == 0) { - 4 - } else { - (3 - (((consecutive?.count ?: 0) - 1) % 3)) - } + (3 - (((consecutive?.count ?: 0)) % 3)) } else { consecutive?.offset } diff --git a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt index f78dd4833..67ea29465 100644 --- a/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt +++ b/Habitica/src/test/java/com/habitrpg/android/habitica/models/user/SubscriptionPlanTest.kt @@ -77,7 +77,7 @@ class SubscriptionPlanTest : WordSpec({ "months until next hourglass with initial basic sub" { plan.planId = SubscriptionPlan.PLANID_BASIC - plan.monthsUntilNextHourglass shouldBe 4 + plan.monthsUntilNextHourglass shouldBe 3 } "months until receiving first hourglass with basic sub" {