Skip to content

Commit

Permalink
fix records duration filter not saving
Browse files Browse the repository at this point in the history
  • Loading branch information
Razeeman committed Jul 14, 2024
1 parent ef99354 commit 46e325a
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -955,7 +955,8 @@ class StatisticsDetailTest : BaseUiTest() {

// Switch range
clickOnViewWithIdOnPager(statisticsDetailR.id.btnStatisticsDetailToday)
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)

// Bar chart
scrollStatDetailRecyclerToTag(StatisticsDetailBlock.ChartData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ import com.example.util.simpletimetracker.utils.NavUtils
import com.example.util.simpletimetracker.utils.checkViewDoesNotExist
import com.example.util.simpletimetracker.utils.checkViewIsDisplayed
import com.example.util.simpletimetracker.utils.checkViewIsNotDisplayed
import com.example.util.simpletimetracker.utils.clickOnView
import com.example.util.simpletimetracker.utils.clickOnViewWithId
import com.example.util.simpletimetracker.utils.clickOnViewWithText
import com.example.util.simpletimetracker.utils.longClickOnViewWithId
import com.example.util.simpletimetracker.utils.tryAction
import com.example.util.simpletimetracker.utils.withPluralText
import dagger.hilt.android.testing.HiltAndroidTest
import java.text.SimpleDateFormat
import java.util.Calendar
Expand Down Expand Up @@ -132,7 +134,8 @@ class StatisticsRangesTest : BaseUiTest() {
checkViewDoesNotExist(withText(coreR.string.range_select_week))
checkViewDoesNotExist(withText(coreR.string.range_select_month))
checkViewDoesNotExist(withText(coreR.string.range_select_year))
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)
checkViewIsDisplayed(allOf(withText(name), isCompletelyDisplayed()))
checkViewIsNotDisplayed(withId(statisticsR.id.btnStatisticsContainerPrevious))
checkViewIsNotDisplayed(withId(statisticsR.id.btnStatisticsContainerNext))
Expand Down Expand Up @@ -785,9 +788,13 @@ class StatisticsRangesTest : BaseUiTest() {
// Select range
NavUtils.openStatisticsScreen()
clickOnViewWithId(statisticsR.id.btnStatisticsContainerToday)
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)
checkViewIsDisplayed(
allOf(withId(statisticsR.id.btnStatisticsContainerToday), withText(coreR.string.range_last)),
allOf(
withId(statisticsR.id.btnStatisticsContainerToday),
withPluralText(coreR.plurals.range_last, 7, 7),
),
)
checkStatisticsItem(name = name1, hours = 2)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.example.util.simpletimetracker.utils.clickOnViewWithId
import com.example.util.simpletimetracker.utils.clickOnViewWithIdOnPager
import com.example.util.simpletimetracker.utils.clickOnViewWithText
import com.example.util.simpletimetracker.utils.withCardColor
import com.example.util.simpletimetracker.utils.withPluralText
import com.example.util.simpletimetracker.utils.withTag
import dagger.hilt.android.testing.HiltAndroidTest
import java.util.concurrent.TimeUnit
Expand Down Expand Up @@ -68,11 +69,12 @@ class StatisticsTest : BaseUiTest() {

// Switch to last days range
clickOnView(allOf(withText(coreR.string.title_this_year), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)
checkRecordsRange(firstColor, lastColor, firstIcon, lastIcon, name, newName, checkPrevious = false)

// Switch to overall range
clickOnView(allOf(withText(coreR.string.range_last), isCompletelyDisplayed()))
clickOnView(allOf(withPluralText(coreR.plurals.range_last, 7, 7), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_overall)
Thread.sleep(1000)

Expand Down Expand Up @@ -185,11 +187,12 @@ class StatisticsTest : BaseUiTest() {

// Switch to last days range
clickOnView(allOf(withText(coreR.string.title_this_year), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)
checkCategoryRange(firstColor, lastColor, categoryName1, categoryName2, categoryName3, checkPrevious = false)

// Switch to overall range
clickOnView(allOf(withText(coreR.string.range_last), isCompletelyDisplayed()))
clickOnView(allOf(withPluralText(coreR.plurals.range_last, 7, 7), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_overall)
Thread.sleep(1000)

Expand Down Expand Up @@ -312,11 +315,12 @@ class StatisticsTest : BaseUiTest() {

// Switch to last days range
clickOnView(allOf(withText(coreR.string.title_this_year), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_last)
clickOnView(withPluralText(coreR.plurals.range_last, 7, 7))
clickOnViewWithText(coreR.string.duration_dialog_save)
checkTagRange(firstColor, lastColor, tagName1, tagName2, tagName3, checkPrevious = false)

// Switch to overall range
clickOnView(allOf(withText(coreR.string.range_last), isCompletelyDisplayed()))
clickOnView(allOf(withPluralText(coreR.plurals.range_last, 7, 7), isCompletelyDisplayed()))
clickOnViewWithText(coreR.string.range_overall)
Thread.sleep(1000)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ fun isToast(): Matcher<Root> {
}
}

fun withPluralText(@PluralsRes expectedId: Int, quantity: Int): Matcher<View> =
fun withPluralText(@PluralsRes expectedId: Int, quantity: Int, vararg: Any? = null): Matcher<View> =
object : BoundedMatcher<View, TextView>(TextView::class.java) {
override fun matchesSafely(view: TextView): Boolean {
val text: String = view.context.resources.getQuantityString(expectedId, quantity)
val text: String = view.context.resources.getQuantityString(expectedId, quantity, vararg)
return view.text == text
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.viewModels
import com.example.util.simpletimetracker.core.base.BaseBottomSheetFragment
import com.example.util.simpletimetracker.core.dialog.DurationDialogListener
import com.example.util.simpletimetracker.core.extension.getAllFragments
import com.example.util.simpletimetracker.core.extension.findListeners
import com.example.util.simpletimetracker.core.extension.observeOnce
import com.example.util.simpletimetracker.core.extension.setFullScreen
import com.example.util.simpletimetracker.core.extension.setSkipCollapsed
Expand All @@ -30,24 +29,14 @@ class DurationDialogFragment : BaseBottomSheetFragment<Binding>() {

private val viewModel: DurationPickerViewModel by viewModels()

private var dialogListener: DurationDialogListener? = null
private val listeners: MutableList<DurationDialogListener> = mutableListOf()
private val params: DurationDialogParams by fragmentArgumentDelegate(
key = ARGS_PARAMS, default = DurationDialogParams(),
)

override fun onAttach(context: Context) {
super.onAttach(context)
when (context) {
is DurationDialogListener -> {
dialogListener = context
return
}
is AppCompatActivity -> {
context.getAllFragments()
.firstOrNull { it is DurationDialogListener && it.isResumed }
?.let { dialogListener = it as? DurationDialogListener }
}
}
listeners += context.findListeners<DurationDialogListener>()
}

override fun initDialog() {
Expand Down Expand Up @@ -89,19 +78,19 @@ class DurationDialogFragment : BaseBottomSheetFragment<Binding>() {
is DurationDialogState.Value.Duration -> {
val data = state.value.data
val duration = data.seconds + data.minutes * 60L + data.hours * 3600L
dialogListener?.onDurationSet(duration, params.tag)
listeners.forEach { it.onDurationSet(duration, params.tag) }
}
is DurationDialogState.Value.Count -> {
val data = state.value.data.toLongOrNull().orZero()
dialogListener?.onCountSet(data, params.tag)
listeners.forEach { it.onCountSet(data, params.tag) }
}
}
dismiss()
}
}

private fun onDisableClick() {
dialogListener?.onDisable(params.tag)
listeners.forEach { it.onDisable(params.tag) }
dismiss()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,12 @@ class RecordsFilterViewModel @Inject constructor(
}

fun onDurationSet(duration: Long, tag: String?) {
val requestedTags = listOf(
DURATION_FROM_TAG,
DURATION_TO_TAG,
)
if (tag !in requestedTags) return

val durationInMillis = duration * 1000
var (rangeStart, rangeEnd) = filters.getDuration() ?: defaultDurationRange

Expand Down

0 comments on commit 46e325a

Please sign in to comment.