Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,8 @@ dependencies {
androidTestUtil(shared.androidx.test.orchestrator)
androidTestImplementation(shared.androidx.compose.ui.test.android)

androidTestImplementation(project(":shared:feature:events")) // FIXME: use textFixtures ScreenObjects for tests
androidTestImplementation(project(":shared:feature:expenses"))
androidTestImplementation(project(":shared:feature:menu"))
androidTestImplementation(shared.compose.components.resources.multiplatform)
androidTestImplementation(testFixtures(project(":shared:feature:events")))
androidTestImplementation(testFixtures(project(":shared:feature:expenses")))

baselineProfile(project(":baselineprofile"))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@ package ru.commonex

import androidx.activity.ComponentActivity
import androidx.compose.ui.test.ExperimentalTestApi
import com.inwords.expenses.feature.events.screenobjects.EmptyEventsScreen
import com.inwords.expenses.feature.expenses.screenobjects.ExpensesScreen
import de.mannodermaus.junit5.compose.AndroidComposeExtension
import de.mannodermaus.junit5.compose.ComposeContext
import de.mannodermaus.junit5.compose.createAndroidComposeExtension
import expenses.shared.feature.expenses.generated.resources.Res
import expenses.shared.feature.expenses.generated.resources.expenses_revert_description
import kotlinx.coroutines.runBlocking
import org.jetbrains.compose.resources.getString
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
import ru.commonex.screens.EmptyEventsScreen
import ru.commonex.ui.MainActivity
import kotlin.io.encoding.Base64
import kotlin.io.encoding.ExperimentalEncodingApi
Expand All @@ -27,7 +25,7 @@ class BasicInstrumentedTest {
fun testBasicNewEventAndExpensesFlow() {
extension.runTest {
// Create event and add participants
val expensesScreen = EmptyEventsScreen()
val expensesScreen: ExpensesScreen = EmptyEventsScreen()
.clickCreateEvent()
.enterEventName("UI Test Event")
.selectCurrency("Euro")
Expand Down Expand Up @@ -58,7 +56,7 @@ class BasicInstrumentedTest {
expensesScreen
.clickOnExpense("Булка")
.clickCancelExpense()
.verifyExpenseExists(getString(Res.string.expenses_revert_description, "Булка"))
.verifyExpenseReverted("Булка")

// Verify debts details
expensesScreen
Expand Down

This file was deleted.

10 changes: 7 additions & 3 deletions android/shared/feature/events/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ android {
buildFeatures {
compose = true
}

testFixtures {
enable = true
}
}

kotlin {
Expand Down Expand Up @@ -70,7 +74,7 @@ kotlin {
}
}

compose.resources {
// FIXME: use textFixtures ScreenObjects for tests
publicResClass = true
dependencies {
testFixturesImplementation(shared.androidx.compose.ui.test.android)
testFixturesImplementation(testFixtures(project(":shared:feature:expenses")))
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package ru.commonex.screens
package com.inwords.expenses.feature.events.screenobjects

import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onLast
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import com.inwords.expenses.feature.expenses.screenobjects.BaseScreen
import com.inwords.expenses.feature.expenses.screenobjects.ExpensesScreen
import de.mannodermaus.junit5.compose.ComposeContext
import expenses.shared.feature.events.generated.resources.Res
import expenses.shared.feature.events.generated.resources.events_add_participant
import expenses.shared.feature.events.generated.resources.events_continue_button
import expenses.shared.feature.events.generated.resources.events_person_name_placeholder
import org.jetbrains.compose.resources.getString

internal class AddPersonsScreen : BaseScreen() {
class AddPersonsScreen : BaseScreen() {

context(extension: ComposeContext)
suspend fun enterOwnerName(name: String): AddPersonsScreen {
val nameLabel = getString(Res.string.events_person_name_placeholder)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package ru.commonex.screens
package com.inwords.expenses.feature.events.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import com.inwords.expenses.feature.expenses.screenobjects.BaseScreen
import com.inwords.expenses.feature.expenses.screenobjects.ExpensesScreen
import de.mannodermaus.junit5.compose.ComposeContext

internal class ChoosePersonScreen : BaseScreen() {
class ChoosePersonScreen : BaseScreen() {

context(extension: ComposeContext)
fun waitUntilLoaded(name: String): ChoosePersonScreen {
Expand All @@ -17,5 +19,4 @@ internal class ChoosePersonScreen : BaseScreen() {
extension.onNodeWithText(name).performClick()
return ExpensesScreen()
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.commonex.screens
package com.inwords.expenses.feature.events.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
Expand All @@ -8,8 +8,10 @@ import expenses.shared.feature.events.generated.resources.Res
import expenses.shared.feature.events.generated.resources.events_name_placeholder
import expenses.shared.feature.events.generated.resources.events_participants_title
import org.jetbrains.compose.resources.getString
import com.inwords.expenses.feature.expenses.screenobjects.BaseScreen

class CreateEventScreen : BaseScreen() {

internal class CreateEventScreen : BaseScreen() {
context(extension: ComposeContext)
suspend fun enterEventName(name: String): CreateEventScreen {
val nameLabel = getString(Res.string.events_name_placeholder)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.inwords.expenses.feature.events.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import com.inwords.expenses.feature.expenses.screenobjects.BaseScreen
import de.mannodermaus.junit5.compose.ComposeContext

class EmptyEventsScreen : BaseScreen() {

private companion object {
const val CREATE_BUTTON_LABEL = "Create"
const val JOIN_BUTTON_LABEL = "Join"
}

context(extension: ComposeContext)
suspend fun clickCreateEvent(): CreateEventScreen {
extension.onNodeWithText(CREATE_BUTTON_LABEL).performClick()
return CreateEventScreen()
}

context(extension: ComposeContext)
suspend fun clickJoinEvent(): JoinEventScreen {
extension.onNodeWithText(JOIN_BUTTON_LABEL).performClick()
return JoinEventScreen()
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package ru.commonex.screens
package com.inwords.expenses.feature.events.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import com.inwords.expenses.feature.expenses.screenobjects.BaseScreen
import de.mannodermaus.junit5.compose.ComposeContext
import expenses.shared.feature.events.generated.resources.Res
import expenses.shared.feature.events.generated.resources.events_access_code_placeholder
import expenses.shared.feature.events.generated.resources.events_id_placeholder
import expenses.shared.feature.events.generated.resources.events_participants_title
import org.jetbrains.compose.resources.getString

internal class JoinEventScreen : BaseScreen() {
class JoinEventScreen : BaseScreen() {

context(extension: ComposeContext)
suspend fun enterEventId(eventId: String): JoinEventScreen {
Expand Down
9 changes: 6 additions & 3 deletions android/shared/feature/expenses/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ android {
buildFeatures {
compose = true
}

testFixtures {
enable = true
}
}

kotlin {
Expand Down Expand Up @@ -87,7 +91,6 @@ kotlin {
}
}

compose.resources {
// FIXME: use textFixtures ScreenObjects for tests
publicResClass = true
dependencies {
testFixturesImplementation(shared.androidx.compose.ui.test.android)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.commonex.screens
package com.inwords.expenses.feature.expenses.screenobjects

import androidx.compose.ui.semantics.SemanticsProperties
import androidx.compose.ui.state.ToggleableState
Expand All @@ -14,7 +14,7 @@ import expenses.shared.feature.expenses.generated.resources.expenses_save
import expenses.shared.feature.expenses.generated.resources.expenses_total_amount
import org.jetbrains.compose.resources.getString

internal class AddExpenseScreen : BaseScreen() {
class AddExpenseScreen : BaseScreen() {

context(extension: ComposeContext)
suspend fun enterDescription(description: String): AddExpenseScreen {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.commonex.screens
package com.inwords.expenses.feature.expenses.screenobjects

import androidx.compose.ui.test.assertCountEquals
import androidx.compose.ui.test.assertIsDisplayed
Expand All @@ -7,12 +7,12 @@ import androidx.compose.ui.test.onAllNodesWithText
import androidx.compose.ui.test.onNodeWithText
import de.mannodermaus.junit5.compose.ComposeContext

internal abstract class BaseScreen {
open class BaseScreen {

context(extension: ComposeContext)
fun waitForElementWithText(
text: String,
timeout: Long = 5000
timeout: Long = 5_000
) {
extension.waitUntilAtLeastOneExists(hasText(text), timeout)
}
Expand All @@ -28,4 +28,4 @@ internal abstract class BaseScreen {
.onAllNodesWithText(text, substring = true)
.assertCountEquals(count)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package ru.commonex.screens
package com.inwords.expenses.feature.expenses.screenobjects

import de.mannodermaus.junit5.compose.ComposeContext

internal class DebtsListScreen : BaseScreen() {
class DebtsListScreen : BaseScreen() {

context(extension: ComposeContext)
fun verifyDebtAmount(amount: String, personName: String, count: Int = 1): DebtsListScreen {
Expand All @@ -11,5 +11,4 @@ internal class DebtsListScreen : BaseScreen() {
assertElementsWithTextCount(debtText, count)
return this
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.commonex.screens
package com.inwords.expenses.feature.expenses.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
Expand All @@ -7,7 +7,7 @@ import expenses.shared.feature.expenses.generated.resources.Res
import expenses.shared.feature.expenses.generated.resources.expenses_revert_operation
import org.jetbrains.compose.resources.getString

internal class ExpenseDetailsDialog : BaseScreen() {
class ExpenseDetailsDialog : BaseScreen() {

context(extension: ComposeContext)
suspend fun clickCancelExpense(): ExpensesScreen {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.commonex.screens
package com.inwords.expenses.feature.expenses.screenobjects

import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
Expand All @@ -7,9 +7,11 @@ import expenses.shared.feature.expenses.generated.resources.Res
import expenses.shared.feature.expenses.generated.resources.expenses_details
import expenses.shared.feature.expenses.generated.resources.expenses_none
import expenses.shared.feature.expenses.generated.resources.expenses_operation
import expenses.shared.feature.expenses.generated.resources.expenses_revert_description
import org.jetbrains.compose.resources.getString

internal class ExpensesScreen : BaseScreen() {
class ExpensesScreen : BaseScreen() {

context(extension: ComposeContext)
suspend fun waitUntilLoaded(): ExpensesScreen {
val noneLabel = getString(Res.string.expenses_none)
Expand Down Expand Up @@ -58,4 +60,10 @@ internal class ExpensesScreen : BaseScreen() {
assertElementWithTextExists(description)
return this
}

context(extension: ComposeContext)
suspend fun verifyExpenseReverted(description: String): ExpensesScreen {
val revertedText = getString(Res.string.expenses_revert_description, description)
return verifyExpenseExists(revertedText)
}
}
4 changes: 0 additions & 4 deletions android/shared/feature/menu/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,3 @@ kotlin {
}
}

compose.resources {
// FIXME: use textFixtures ScreenObjects for tests
publicResClass = true
}
4 changes: 0 additions & 4 deletions android/shared/feature/share/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,3 @@ kotlin {
}
}

compose.resources {
// FIXME: use textFixtures ScreenObjects for tests
publicResClass = true
}
Loading