Skip to content

Commit 70a8eec

Browse files
BUG-998065: fixing redundant components created/destroyed during navigation (#25)
* BUG-998065: let the flow container component handle assignment content changes - removing assignment content cleanup and updateContent after submit/previous - adding registration to redux for region and check if child with view name in property has changed (issue with back) - adding test for that issue - adding support for providing pega version per test case * fix: return explicit boolean for region ref view changes * BUG-998065: fixing tests * BUG-998065: review fixes - refactoring in buttonClick method in assignment.component.js - fixing issues in tests --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent f587c23 commit 70a8eec

28 files changed

Lines changed: 2461 additions & 143 deletions

File tree

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/ComposeTest.kt

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,20 @@ import com.pega.constellation.sdk.kmp.samples.basecmpapp.ui.components.CustomEma
2525
import com.pega.constellation.sdk.kmp.samples.basecmpapp.ui.screens.pega.PegaViewModel
2626
import com.pega.constellation.sdk.kmp.samples.basecmpapp.ui.screens.services.ServicesViewModel
2727
import com.pega.constellation.sdk.kmp.test.mock.MockHttpClient
28+
import com.pega.constellation.sdk.kmp.test.mock.MockInterceptor
2829
import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
2930
import com.pega.constellation.sdk.kmp.ui.components.cmp.controls.form.internal.AppContext
3031
import kotlinx.coroutines.CoroutineScope
3132
import kotlinx.coroutines.Dispatchers
33+
import kotlinx.coroutines.launch
3234
import okhttp3.OkHttpClient
3335
import org.junit.Rule
3436
import org.publicvalue.multiplatform.oidc.ExperimentalOpenIdConnect
37+
import kotlin.test.AfterTest
3538
import kotlin.test.BeforeTest
3639

3740
@OptIn(ExperimentalOpenIdConnect::class)
3841
abstract class ComposeTest(
39-
private val pegaVersion: PegaVersion,
4042
val mode: ComposeTestMode = MockServer,
4143
) {
4244
@get:Rule
@@ -46,18 +48,31 @@ abstract class ComposeTest(
4648
private val instrumentation = InstrumentationRegistry.getInstrumentation()
4749
private val context = instrumentation.targetContext
4850
private val authManager = AuthManager(scope, FakeAuthFlowFactory(), FakeTokenStore(mode.token))
49-
private val httpClient = buildHttpClient(authManager)
50-
private val engine = AndroidWebViewEngine(context, webViewScope, httpClient, httpClient)
51+
private lateinit var mockInterceptor: MockInterceptor
52+
private lateinit var httpClient: OkHttpClient
53+
private var engine: AndroidWebViewEngine? = null
5154

5255
@BeforeTest
5356
fun setUp() {
5457
hideKeyboard()
55-
Injector.init(authManager, engine)
5658
AppContext.init(context)
5759
}
5860

61+
@AfterTest
62+
fun tearDown() {
63+
webViewScope.launch {
64+
engine?.destroy()
65+
}
66+
}
67+
5968
@OptIn(ExperimentalTestApi::class)
60-
protected fun ComposeUiTest.setupApp(caseClassName: String) {
69+
protected fun ComposeUiTest.setupApp(caseClassName: String, pegaVersion: PegaVersion) {
70+
mockInterceptor = MockInterceptor(context, pegaVersion)
71+
httpClient = buildHttpClient(authManager)
72+
val engine = AndroidWebViewEngine(context, webViewScope, httpClient, httpClient)
73+
this@ComposeTest.engine = engine
74+
Injector.init(authManager, engine)
75+
6176
setContent {
6277
MediaCoApp(
6378
appViewModel = viewModel { MediaCoAppViewModel(authManager) },
@@ -67,7 +82,7 @@ abstract class ComposeTest(
6782
}
6883
}
6984

70-
private fun buildSdk() = ConstellationSdk.create(buildSdkConfig(), engine)
85+
private fun buildSdk() = ConstellationSdk.create(buildSdkConfig(), requireNotNull(engine))
7186

7287
private fun buildSdkConfig() = ConstellationSdkConfig(
7388
pegaUrl = PEGA_URL,
@@ -78,7 +93,7 @@ abstract class ComposeTest(
7893
private fun buildComponentManager() = ComponentManager.create(TestComponentDefinitions)
7994

8095
private fun buildHttpClient(authManager: AuthManager) = when (mode) {
81-
is MockServer -> MockHttpClient(context, pegaVersion)
96+
is MockServer -> MockHttpClient(mockInterceptor)
8297
is RealServer -> OkHttpClient().newBuilder()
8398
.addInterceptor(AuthInterceptor(authManager))
8499
.build()

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/AutoCompleteTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1212
import kotlin.test.Test
1313

1414
@OptIn(ExperimentalTestApi::class)
15-
class AutoCompleteTest : ComposeTest(PegaVersion.v25_1) {
15+
class AutoCompleteTest : ComposeTest() {
1616
@Test
1717
fun test_auto_complete() = runAndroidTest {
18-
setupApp("OFV0MW-Marco-Work-AutoCompleteTest")
18+
setupApp("OFV0MW-Marco-Work-AutoCompleteTest", pegaVersion = PegaVersion.v25_1)
1919

2020
onNodeWithText("New Service").performClick()
2121

@@ -53,7 +53,7 @@ class AutoCompleteTest : ComposeTest(PegaVersion.v25_1) {
5353

5454
@Test
5555
fun test_auto_complete_data_ref() = runAndroidTest {
56-
setupApp("OFV0MW-Marco-Work-AutoCompleteTest")
56+
setupApp("OFV0MW-Marco-Work-AutoCompleteTest", pegaVersion = PegaVersion.v25_1)
5757

5858
onNodeWithText("New Service").performClick()
5959

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/CaseProcessingTest.kt

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1616
import kotlin.test.Test
1717

1818
@OptIn(ExperimentalTestApi::class)
19-
class CaseProcessingTest : ComposeTest(PegaVersion.v24_1_0) {
19+
class CaseProcessingTest : ComposeTest() {
2020
@Test
2121
fun test_case_processing_sdk_testing() = runAndroidTest {
22-
setupApp(caseClassName = "DIXL-MediaCo-Work-SDKTesting")
22+
setupApp(caseClassName = "DIXL-MediaCo-Work-SDKTesting", pegaVersion = PegaVersion.v24_1_0)
2323

2424
onNodeWithText("New Service").performClick()
2525
waitForNode("Create (S-", substring = true)
@@ -41,7 +41,7 @@ class CaseProcessingTest : ComposeTest(PegaVersion.v24_1_0) {
4141

4242
@Test
4343
fun test_case_processing_service() = runAndroidTest {
44-
setupApp(caseClassName = "DIXL-MediaCo-Work-NewService")
44+
setupApp(caseClassName = "DIXL-MediaCo-Work-NewService", pegaVersion = PegaVersion.v24_1_0)
4545

4646
onNodeWithText("New Service").performClick()
4747
waitForNode("Customer (N-", substring = true)
@@ -76,4 +76,36 @@ class CaseProcessingTest : ComposeTest(PegaVersion.v24_1_0) {
7676

7777
waitForNode("New Service")
7878
}
79+
80+
@Test
81+
fun test_case_processing_backward() = runAndroidTest {
82+
setupApp(caseClassName = "OI1OYV-Marco2-Work-SimpleTest", pegaVersion = PegaVersion.v25_1)
83+
84+
onNodeWithText("New Service").performClick()
85+
waitForNode("step1 (S-", substring = true)
86+
87+
waitForNode("step1 input")
88+
waitForNode("step1 boolean")
89+
onNodeWithText("Next").performClick()
90+
91+
waitForNode("step2 input")
92+
onNodeWithText("Next").performClick()
93+
94+
waitForNode("step3 boolean")
95+
waitForNode("step3 input")
96+
onNodeWithText("Next").performClick()
97+
98+
waitForNode("step4 input")
99+
onNodeWithText("Previous").performClick()
100+
101+
waitForNode("step3 boolean")
102+
waitForNode("step3 input")
103+
onNodeWithText("Previous").performClick()
104+
105+
waitForNode("step2 input")
106+
onNodeWithText("Previous").performClick()
107+
108+
waitForNode("step1 input")
109+
waitForNode("step1 boolean")
110+
}
79111
}

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/DataRefSemanticLinkTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1111
import kotlin.test.Test
1212

1313
@OptIn(ExperimentalTestApi::class)
14-
class DataRefSemanticLinkTest : ComposeTest(PegaVersion.v25_1) {
14+
class DataRefSemanticLinkTest : ComposeTest() {
1515

1616
@Test
1717
fun test_data_reference_form_and_semantic_link() = runAndroidTest {
18-
setupApp("OI1OYV-Marco2-Work-DataReferenceTest-FieldOnly")
18+
setupApp("OI1OYV-Marco2-Work-DataReferenceTest-FieldOnly", pegaVersion = PegaVersion.v25_1)
1919

2020
// create case
2121
onNodeWithText("New Service").performClick()

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/DataReferenceListOfRecordsTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1616
import kotlin.test.Test
1717

1818
@OptIn(ExperimentalTestApi::class)
19-
class DataReferenceListOfRecordsTest : ComposeTest(PegaVersion.v25_1) {
19+
class DataReferenceListOfRecordsTest : ComposeTest() {
2020
val columns = listOf("BRAND", "MODEL")
2121

2222
@Test
@@ -32,7 +32,7 @@ class DataReferenceListOfRecordsTest : ComposeTest(PegaVersion.v25_1) {
3232
listOf("Fiat", "Panda", "$ 10000")
3333
)
3434

35-
setupApp("O40M3A-MarekCo-Work-DataReferenceListOfRecordsTest")
35+
setupApp("O40M3A-MarekCo-Work-DataReferenceListOfRecordsTest", pegaVersion = PegaVersion.v25_1)
3636

3737
// create case
3838
onNodeWithText("New Service").performClick()
@@ -70,7 +70,7 @@ class DataReferenceListOfRecordsTest : ComposeTest(PegaVersion.v25_1) {
7070

7171
@Test
7272
fun test_field_value_display() = runAndroidTest {
73-
setupApp("O40M3A-MarekCo-Work-DataReferenceListOfRecordsTest")
73+
setupApp("O40M3A-MarekCo-Work-DataReferenceListOfRecordsTest", pegaVersion = PegaVersion.v25_1)
7474

7575
// create case
7676
onNodeWithText("New Service").performClick()
@@ -103,7 +103,7 @@ class DataReferenceListOfRecordsTest : ComposeTest(PegaVersion.v25_1) {
103103

104104
@Test
105105
fun test_combo_box() = runAndroidTest {
106-
setupApp("O40M3A-MarekCo-Work-DataReferenceMultiSelectTest")
106+
setupApp("O40M3A-MarekCo-Work-DataReferenceMultiSelectTest", pegaVersion = PegaVersion.v25_1)
107107

108108
// Create case
109109
onNodeWithText("New Service").performClick()

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/DataReferenceSingleRecordTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1414
import kotlin.test.Test
1515

1616
@OptIn(ExperimentalTestApi::class)
17-
class DataReferenceSingleRecordTest : ComposeTest(PegaVersion.v24_1_0) {
17+
class DataReferenceSingleRecordTest : ComposeTest() {
1818
private val columns = listOf("ID", "BRAND", "MODEL", "COLOR")
1919
private val cars = listOf(
2020
listOf("1", "Ford", "Focus", "Silver"),
@@ -26,7 +26,7 @@ class DataReferenceSingleRecordTest : ComposeTest(PegaVersion.v24_1_0) {
2626

2727
@Test
2828
fun test_simple_table() = runAndroidTest {
29-
setupApp("O40M3A-MarekCo-Work-DataReferenceTest2")
29+
setupApp("O40M3A-MarekCo-Work-DataReferenceTest2", pegaVersion = PegaVersion.v24_1_0)
3030

3131
// create case
3232
onNodeWithText("New Service").performClick()
@@ -44,7 +44,7 @@ class DataReferenceSingleRecordTest : ComposeTest(PegaVersion.v24_1_0) {
4444

4545
@Test
4646
fun test_dropdown() = runAndroidTest {
47-
setupApp("O40M3A-MarekCo-Work-DataReferenceTest2")
47+
setupApp("O40M3A-MarekCo-Work-DataReferenceTest2", pegaVersion = PegaVersion.v24_1_0)
4848

4949
// create case
5050
onNodeWithText("New Service").performClick()

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/DetailsTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1515
import kotlin.test.Test
1616

1717
@OptIn(ExperimentalTestApi::class)
18-
class DetailsTest : ComposeTest(PegaVersion.v25_1) {
18+
class DetailsTest : ComposeTest() {
1919

2020
private val expectedFields = mapOf(
2121
"name" to "John",
@@ -31,7 +31,7 @@ class DetailsTest : ComposeTest(PegaVersion.v25_1) {
3131

3232
@Test
3333
fun test_details_template() = runAndroidTest {
34-
setupApp(caseClassName = "OI1OYV-Marco2-Work-DetailsTemplateTest")
34+
setupApp(caseClassName = "OI1OYV-Marco2-Work-DetailsTemplateTest", pegaVersion = PegaVersion.v25_1)
3535

3636
onNodeWithText("New Service").performClick()
3737
waitForNode("Details template", substring = true)

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/EmbeddedDataComboboxTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ import com.pega.constellation.sdk.kmp.test.mock.PegaVersion
1313
import kotlin.test.Test
1414

1515
@OptIn(ExperimentalTestApi::class)
16-
class EmbeddedDataComboboxTest : ComposeTest(PegaVersion.v25_1) {
16+
class EmbeddedDataComboboxTest : ComposeTest() {
1717

1818
@Test
1919
fun test_embedded_data_combobox() = runComposeUiTest {
20-
setupApp("OFV0MW-Marco-Work-EmbeddedDataTest-Combobox")
20+
setupApp("OFV0MW-Marco-Work-EmbeddedDataTest-Combobox", pegaVersion = PegaVersion.v25_1)
2121

2222
// create case
2323
onNodeWithText("New Service").performClick()

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/EmbeddedDataListOfRecordsTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ import java.util.TimeZone
3636
import kotlin.test.Test
3737

3838
@OptIn(ExperimentalTestApi::class)
39-
class EmbeddedDataListOfRecordsTest : ComposeTest(PegaVersion.v24_2_2) {
39+
class EmbeddedDataListOfRecordsTest : ComposeTest() {
4040

4141
@Test
4242
fun test_embedded_data_repeating_view() = runAndroidTest {
43-
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-RepeatingViewEditable")
43+
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-RepeatingViewEditable", pegaVersion = PegaVersion.v24_2_2)
4444

4545
// create case
4646
onNodeWithText("New Service").performClick()
@@ -137,7 +137,7 @@ class EmbeddedDataListOfRecordsTest : ComposeTest(PegaVersion.v24_2_2) {
137137

138138
@Test
139139
fun test_embedded_data_table_simple_table() = runAndroidTest {
140-
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-EditableTable")
140+
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-EditableTable", pegaVersion = PegaVersion.v24_2_2)
141141

142142
val columnValues = mutableMapOf(
143143
"brand" to "Ford",
@@ -264,7 +264,7 @@ class EmbeddedDataListOfRecordsTest : ComposeTest(PegaVersion.v24_2_2) {
264264
@Test
265265
fun test_embedded_data_add_edit_remove_conditions() = runAndroidTest {
266266
// Step 1 - Editable table
267-
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-Conditions")
267+
setupApp("O40M3A-MarekCo-Work-EmbeddedDataTest-Conditions", pegaVersion = PegaVersion.v24_2_2)
268268
// create case
269269
onNodeWithText("New Service").performClick()
270270
// verify form title

samples/android-cmp-app/src/androidInstrumentedTest/kotlin/com/pega/constellation/sdk/kmp/samples/androidcmpapp/test/cases/EmbeddedDataSingleRecordTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import java.time.LocalDateTime
1717
import kotlin.test.Test
1818

1919
@OptIn(ExperimentalTestApi::class)
20-
class EmbeddedDataSingleRecordTest : ComposeTest(PegaVersion.v25_1) {
20+
class EmbeddedDataSingleRecordTest : ComposeTest() {
2121

2222
@Test
2323
fun test_embedded_data_single_record() = runAndroidTest {
24-
setupApp("OFV0MW-Marco-Work-EmbeddedDataTest-SingleRecord")
24+
setupApp("OFV0MW-Marco-Work-EmbeddedDataTest-SingleRecord", pegaVersion = PegaVersion.v25_1)
2525

2626
onNodeWithText("New Service").performClick()
2727

0 commit comments

Comments
 (0)