diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt index 321bbfba..a7025b95 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTest.kt @@ -91,6 +91,9 @@ class AddRecordTest : BaseUiTest() { checkPreviewUpdated(withText(timeEndedPreview)) checkPreviewUpdated(withText("2h 3m")) + // Activity not selected + clickOnViewWithText(R.string.change_record_save) + // Open activity chooser clickOnViewWithText(R.string.change_record_type_field) checkViewIsDisplayed(withId(R.id.rvChangeRecordType)) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt index 470c13d4..d0d63666 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/AddRecordTypeTest.kt @@ -41,6 +41,9 @@ class AddRecordTypeTest : BaseUiTest() { checkViewIsNotDisplayed(withId(R.id.rvChangeRecordTypeColor)) checkViewIsNotDisplayed(withId(R.id.rvChangeRecordTypeIcon)) + // Name is not selected + clickOnViewWithText(R.string.change_record_type_save) + // Typing name typeTextIntoView(R.id.etChangeRecordTypeName, name) checkPreviewUpdated(withText(name)) diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt new file mode 100644 index 00000000..6c016da0 --- /dev/null +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/MessagesTest.kt @@ -0,0 +1,35 @@ +package com.example.util.simpletimetracker + +import androidx.test.espresso.Espresso.pressBack +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.example.util.simpletimetracker.utils.BaseUiTest +import com.example.util.simpletimetracker.utils.NavUtils +import com.example.util.simpletimetracker.utils.clickOnViewWithId +import com.example.util.simpletimetracker.utils.clickOnViewWithText +import com.example.util.simpletimetracker.utils.toastTextShowing +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class MessagesTest : BaseUiTest() { + + @Test + fun test() { + // Activity with no name + clickOnViewWithText(R.string.running_records_add_type) + clickOnViewWithText(R.string.change_record_type_save) + toastTextShowing(R.string.change_record_message_choose_name) + pressBack() + pressBack() + + // Add record + NavUtils.openRecordsScreen() + clickOnViewWithId(R.id.btnRecordAdd) + + // Record with no activity + // Wait for previous message to disappear + Thread.sleep(5000) + clickOnViewWithText(R.string.change_record_save) + toastTextShowing(R.string.message_choose_type) + } +} diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/Matchers.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/Matchers.kt index 7cfe6327..bb0df271 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/Matchers.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/Matchers.kt @@ -1,13 +1,16 @@ package com.example.util.simpletimetracker.utils import android.view.View +import android.view.WindowManager import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat +import androidx.test.espresso.Root import androidx.test.espresso.matcher.BoundedMatcher import androidx.test.espresso.matcher.ViewMatchers.withTagValue import org.hamcrest.CoreMatchers.equalTo import org.hamcrest.Description import org.hamcrest.Matcher +import org.hamcrest.TypeSafeMatcher fun withCardColor(expectedId: Int): Matcher = object : BoundedMatcher(CardView::class.java) { @@ -23,4 +26,17 @@ fun withCardColor(expectedId: Int): Matcher = } fun withTag(tagValueMatcher: Int): Matcher = - withTagValue(equalTo(tagValueMatcher)) \ No newline at end of file + withTagValue(equalTo(tagValueMatcher)) + +fun isToast(): Matcher { + return object : TypeSafeMatcher() { + override fun matchesSafely(item: Root): Boolean { + val type: Int = item.windowLayoutParams.get().type + return type == WindowManager.LayoutParams.TYPE_TOAST + } + + override fun describeTo(description: Description) { + description.appendText("is toast") + } + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/ViewInteractions.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/ViewInteractions.kt index 6c587f4d..a7fdf761 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/utils/ViewInteractions.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/utils/ViewInteractions.kt @@ -60,4 +60,7 @@ fun scrollRecyclerToPosition(id: Int, position: Int): ViewInteraction = onView(withId(id)).perform(scrollToPosition(position)) fun scrollRecyclerToView(id: Int, matcher: Matcher): ViewInteraction = - onView(withId(id)).perform(scrollTo(matcher)) \ No newline at end of file + onView(withId(id)).perform(scrollTo(matcher)) + +fun toastTextShowing(textId: Int): ViewInteraction = + onView(withText(textId)).inRoot(isToast()).check(matches(isDisplayed())) \ No newline at end of file diff --git a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt index c2925c8d..a9e95a24 100644 --- a/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt +++ b/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt @@ -138,6 +138,11 @@ class ChangeRecordTypeViewModel @Inject constructor( } fun onSaveClick() { + if (newName.isEmpty()) { + resourceRepo.getString(R.string.change_record_message_choose_name) + .let(router::showSystemMessage) + return + } (saveButtonEnabled as MutableLiveData).value = false viewModelScope.launch { RecordType( diff --git a/feature_change_record_type/src/main/res/values/strings.xml b/feature_change_record_type/src/main/res/values/strings.xml index 926fb69d..4753ef1e 100644 --- a/feature_change_record_type/src/main/res/values/strings.xml +++ b/feature_change_record_type/src/main/res/values/strings.xml @@ -5,4 +5,5 @@ Color Icon Save + Choose a name \ No newline at end of file