diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt index 7b8350f0..83e40818 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsDetailTest.kt @@ -32,6 +32,7 @@ import org.junit.runner.RunWith import java.util.Calendar import java.util.concurrent.TimeUnit +@Suppress("SameParameterValue") @HiltAndroidTest @RunWith(AndroidJUnit4::class) class StatisticsDetailTest : BaseUiTest() { @@ -1056,6 +1057,62 @@ class StatisticsDetailTest : BaseUiTest() { checkViewIsDisplayed(allOf(withText(R.string.title_this_week), isCompletelyDisplayed())) } + @Test + fun streaks() { + val name = "name" + + // Add activity + testUtils.addActivity(name) + + // Add records + val difference = TimeUnit.HOURS.toMillis(1) + val calendar = Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, 15) } + + fun addRecord(daysBefore: Int) { + calendar.apply { add(Calendar.DATE, daysBefore) } + testUtils.addRecord( + typeName = name, + timeStarted = calendar.timeInMillis, + timeEnded = calendar.timeInMillis + difference, + ) + } + + addRecord(0) + addRecord(-1) + addRecord(-1) + + addRecord(-2) + addRecord(-1) + addRecord(-1) + addRecord(-1) + addRecord(-1) + + // Check detailed statistics + NavUtils.openStatisticsScreen() + tryAction { clickOnView(allOf(withText(name), isCompletelyDisplayed())) } + clickOnViewWithIdOnPager(R.id.btnStatisticsDetailToday) + clickOnViewWithText(R.string.range_overall) + + onView(withId(R.id.cardStatisticsDetailStreaks)).perform(nestedScrollTo()) + checkCard(R.string.statistics_detail_streaks_longest, "5") + checkCard(R.string.statistics_detail_streaks_current, "3") + + // Streak type + onView(withId(R.id.buttonsStatisticsDetailStreaksType)).perform(nestedScrollTo()) + clickOnView( + allOf( + withText(R.string.statistics_detail_streaks_longest), + isDescendantOfA(withId(R.id.buttonsStatisticsDetailStreaksType)) + ) + ) + clickOnView( + allOf( + withText(R.string.statistics_detail_streaks_latest), + isDescendantOfA(withId(R.id.buttonsStatisticsDetailStreaksType)) + ) + ) + } + private fun checkPreview(color: Int, icon: Int, name: String) { checkViewIsDisplayed( allOf( diff --git a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt index ada467d5..2b391a8a 100644 --- a/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt +++ b/features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt @@ -217,11 +217,12 @@ class StatisticsDetailStreaksInteractor @Inject constructor( var streakEnd: Long = 0 durations.forEachIndexed { index, duration -> val isLast = index == durations.size - 1 - if (duration.second > 0 && !isLast) { + if (duration.second > 0) { counter++ if (streakStart == 0L) streakStart = duration.first streakEnd = duration.first - } else { + } + if (duration.second <= 0 || isLast) { // Series of one day makes no sense. if (counter > 1) { Triple( @@ -231,6 +232,8 @@ class StatisticsDetailStreaksInteractor @Inject constructor( ).let(data::add) } if (counter > maxStreak) maxStreak = counter + } + if (duration.second <= 0) { counter = 0 streakStart = 0 streakEnd = 0