A fork of Simple Time Tracker with WearOS support. (Now integrated upstream)
0

Configure Feed

Select the types of activity you want to include in your feed.

improve tests, disable data cache

razeeman (Apr 3, 2021, 11:25 AM +0300) fedb1eb7 03d7f827

+26 -8
+1 -5
app/src/androidTest/java/com/example/util/simpletimetracker/StatisticsRangesTest.kt
··· 18 18 import com.example.util.simpletimetracker.utils.clickOnViewWithId 19 19 import com.example.util.simpletimetracker.utils.clickOnViewWithText 20 20 import com.example.util.simpletimetracker.utils.longClickOnViewWithId 21 - import com.example.util.simpletimetracker.utils.typeTextIntoView 22 21 import org.hamcrest.CoreMatchers.allOf 23 22 import org.hamcrest.CoreMatchers.equalTo 24 23 import org.junit.Test ··· 35 34 val name = "Test" 36 35 37 36 // Add activity 38 - NavUtils.openRunningRecordsScreen() 39 - clickOnView(withText(R.string.running_records_add_type)) 40 - typeTextIntoView(R.id.etChangeRecordTypeName, name) 41 - clickOnView(withText(R.string.change_record_type_save)) 37 + NavUtils.addActivity(name) 42 38 43 39 // Start timer 44 40 clickOnViewWithText(name)
+2 -1
app/src/androidTest/java/com/example/util/simpletimetracker/utils/NavUtils.kt
··· 3 3 import android.widget.TimePicker 4 4 import androidx.test.espresso.Espresso.closeSoftKeyboard 5 5 import androidx.test.espresso.Espresso.onView 6 + import androidx.test.espresso.action.ViewActions.click 6 7 import androidx.test.espresso.contrib.PickerActions 7 8 import androidx.test.espresso.matcher.ViewMatchers 8 9 import androidx.test.espresso.matcher.ViewMatchers.hasDescendant ··· 35 36 36 37 fun openCategoriesScreen() { 37 38 openSettingsScreen() 38 - clickOnViewWithText(R.string.settings_edit_categories) 39 + onView(withText(R.string.settings_edit_categories)).perform(nestedScrollTo(), click()) 39 40 } 40 41 41 42 fun addActivity(
+19 -2
core/src/main/java/com/example/util/simpletimetracker/core/utils/TestUtils.kt
··· 6 6 import com.example.util.simpletimetracker.domain.interactor.CategoryInteractor 7 7 import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor 8 8 import com.example.util.simpletimetracker.domain.interactor.RecordInteractor 9 + import com.example.util.simpletimetracker.domain.interactor.RecordTypeCategoryInteractor 9 10 import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor 10 11 import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor 11 12 import com.example.util.simpletimetracker.domain.model.Record ··· 19 20 private val recordInteractor: RecordInteractor, 20 21 private val runningRecordInteractor: RunningRecordInteractor, 21 22 private val categoryInteractor: CategoryInteractor, 23 + private val recordTypeCategoryInteractor: RecordTypeCategoryInteractor, 22 24 private val prefsInteractor: PrefsInteractor, 23 25 private val iconMapper: IconMapper 24 26 ) { ··· 28 30 recordInteractor.clear() 29 31 runningRecordInteractor.clear() 30 32 categoryInteractor.clear() 33 + recordTypeCategoryInteractor.clear() 31 34 } 32 35 33 36 fun clearPrefs() = runBlocking { ··· 38 41 name: String, 39 42 color: Int? = null, 40 43 icon: Int? = null, 41 - goalTime: Long? = null 44 + goalTime: Long? = null, 45 + categories: List<String> = emptyList() 42 46 ) = runBlocking { 43 47 val icons = iconMapper.availableIconsNames 44 48 val iconId = icons.filterValues { it == icon }.keys.firstOrNull() ··· 47 51 val colors = ColorMapper.getAvailableColors(false) 48 52 val colorId = colors.indexOf(color).takeUnless { it == -1 }.orZero() 49 53 54 + val availableCategories = categoryInteractor.getAll() 55 + 50 56 val data = RecordType( 51 57 name = name, 52 58 color = colorId, ··· 54 60 goalTime = goalTime.orZero() 55 61 ) 56 62 57 - recordTypeInteractor.add(data) 63 + val typeId = recordTypeInteractor.add(data) 64 + 65 + categories 66 + .mapNotNull { categoryName -> 67 + availableCategories.firstOrNull { it.name == categoryName }?.id 68 + } 69 + .takeUnless { 70 + it.isEmpty() 71 + } 72 + ?.let { categoryIds -> 73 + recordTypeCategoryInteractor.addCategories(typeId, categoryIds) 74 + } 58 75 } 59 76 60 77 fun addRecord(
+2
data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordCacheRepoImpl.kt
··· 14 14 15 15 override fun getFromRange(start: Long, end: Long): List<Record>? { 16 16 Timber.d("getFromRange") 17 + // TODO cache is disabled to avoid synchronization issues, especially in tests 18 + return null 17 19 return recordsByRange[start to end] 18 20 } 19 21
+2
data_local/src/main/java/com/example/util/simpletimetracker/data_local/repo/RecordTypeCacheRepoImpl.kt
··· 13 13 14 14 override fun getAll(): List<RecordType> { 15 15 Timber.d("getAll") 16 + // TODO cache is disabled to avoid synchronization issues, especially in tests 17 + return emptyList() 16 18 return recordTypes 17 19 } 18 20