Skip to content

Commit bb6cce2

Browse files
authored
Merge pull request #29 from Trendyol/testing-infra
Testing Infra
2 parents d156b64 + 4f25a84 commit bb6cce2

File tree

15 files changed

+109
-147
lines changed

15 files changed

+109
-147
lines changed

sample/src/test/java/com/trendyol/transmission/features/colorpicker/ColorPickerTransformerTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.trendyol.transmission.features.colorpicker
22

33
import androidx.compose.ui.graphics.Color
4+
import com.trendyol.transmission.components.features.ColorPickerUiState
45
import com.trendyol.transmission.components.features.colorpicker.ColorPickerEffect
56
import com.trendyol.transmission.components.features.colorpicker.ColorPickerSignal
67
import com.trendyol.transmission.components.features.colorpicker.ColorPickerTransformer
78
import com.trendyol.transmission.transformer.util.TestCoroutineRule
8-
import com.trendyol.transmission.components.features.ColorPickerUiState
99
import com.trendyol.transmissiontest.attachToRouter
1010
import com.trendyol.transmissiontest.test
1111
import org.junit.Before
@@ -70,8 +70,9 @@ class ColorPickerTransformerTest {
7070

7171
@Test
7272
fun `GIVEN inputTransformer, WHEN SelectColor signal is sent, THEN SelectedColorUpdate is sent to MultiOutputTransformer`() {
73-
sut.attachToRouter().test(signal = ColorPickerSignal.SelectColor(3, Color.Blue)) {
74-
assertTrue { effectStream.last() is ColorPickerEffect.SelectedColorUpdate }
75-
}
73+
sut.attachToRouter()
74+
.test(signal = ColorPickerSignal.SelectColor(3, Color.Blue)) {
75+
assertTrue { effectStream.last() is ColorPickerEffect.SelectedColorUpdate }
76+
}
7677
}
7778
}

sample/src/test/java/com/trendyol/transmission/features/output/OutputTransformerTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.trendyol.transmission.components.features.output.OutputTransformer
66
import com.trendyol.transmission.transformer.util.TestCoroutineRule
77
import com.trendyol.transmission.components.features.ColorPickerUiState
88
import com.trendyol.transmission.components.features.OutputUiState
9+
import com.trendyol.transmission.components.features.colorpicker.ColorPickerTransformer
910
import com.trendyol.transmissiontest.attachToRouter
1011
import com.trendyol.transmissiontest.test
1112
import org.junit.Before
@@ -45,8 +46,8 @@ class OutputTransformerTest {
4546
@Test
4647
fun `GIVEN sut, WHEN inputUpdate effect comes and ColorPickerUIState exists, THEN RouterPayloadEffect should be published`() {
4748
sut.attachToRouter()
48-
.register {
49-
addQueryData(ColorPickerUiState(), key = "ColorPickerUiState")
49+
.registerData(ColorPickerTransformer.holderContract) {
50+
ColorPickerUiState()
5051
}
5152
.test(effect = InputEffect.InputUpdate("test")) {
5253
assertEquals(OutputUiState(outputText = "test"), dataStream[1])

transmission-test/src/main/java/com/trendyol/transmissiontest/TestSuite.kt

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ package com.trendyol.transmissiontest
22

33
import com.trendyol.transmission.Transmission
44
import com.trendyol.transmission.router.TransmissionRouter
5-
import com.trendyol.transmission.router.RegistryScope
6-
import com.trendyol.transmission.router.builder.TransmissionTestingRouterBuilder
5+
import com.trendyol.transmission.router.builder.TransmissionRouterBuilder
76
import com.trendyol.transmission.transformer.Transformer
7+
import com.trendyol.transmission.transformer.request.Contract
8+
import com.trendyol.transmissiontest.computation.ComputationTransformer
9+
import com.trendyol.transmissiontest.computation.ComputationWithArgsTransformer
10+
import com.trendyol.transmissiontest.data.DataTransformer
811
import kotlinx.coroutines.ExperimentalCoroutinesApi
912
import kotlinx.coroutines.flow.toList
1013
import kotlinx.coroutines.launch
@@ -15,23 +18,39 @@ import kotlinx.coroutines.test.runTest
1518

1619
@OptIn(ExperimentalCoroutinesApi::class)
1720
class TestSuite {
18-
private var orderedInitialProcessing: List<Transmission> = emptyList()
21+
private var orderedInitialProcessing: MutableList<Transmission> = mutableListOf()
1922
private var transformer: Transformer? = null
20-
private var registryScope: RegistryScope.() -> Unit = {}
2123
private lateinit var router: TransmissionRouter
24+
private val supplementaryTransformerSet: MutableList<Transformer> = mutableListOf()
2225

2326
fun initialize(transformer: Transformer): TestSuite {
2427
this.transformer = transformer
2528
return this
2629
}
2730

28-
fun register(registry: RegistryScope.() -> Unit = {}): TestSuite {
29-
this.registryScope = registry
31+
fun <D : Transmission.Data?> registerData(
32+
contract: Contract.DataHolder<D>, data: () -> D
33+
): TestSuite {
34+
supplementaryTransformerSet += DataTransformer(contract, data)
35+
return this
36+
}
37+
38+
fun <C : Contract.Computation<D?>, D : Any> registerComputation(
39+
contract: C, data: () -> D?
40+
): TestSuite {
41+
supplementaryTransformerSet += ComputationTransformer(contract, data)
42+
return this
43+
}
44+
45+
fun <C : Contract.ComputationWithArgs<A,D?>, D : Any, A: Any> registerComputation(
46+
contract: C, data: () -> D?
47+
): TestSuite {
48+
supplementaryTransformerSet += ComputationWithArgsTransformer(contract, data)
3049
return this
3150
}
3251

3352
fun processBeforeTesting(vararg transmissions: Transmission): TestSuite {
34-
orderedInitialProcessing = transmissions.toList()
53+
orderedInitialProcessing += transmissions.toList()
3554
return this
3655
}
3756

@@ -41,10 +60,11 @@ class TestSuite {
4160
transmission: Transmission,
4261
scope: suspend TransformerTestScope.(scope: TestScope) -> Unit
4362
) {
44-
router = TransmissionTestingRouterBuilder.build {
63+
router = TransmissionRouterBuilder.build {
4564
addDispatcher(UnconfinedTestDispatcher())
46-
this@TestSuite.transformer?.let { addTransformerSet(setOf(it)) }
47-
testing(this@TestSuite.registryScope)
65+
this@TestSuite.transformer?.let {
66+
addTransformerSet((listOf(it) + supplementaryTransformerSet).toSet())
67+
}
4868
}
4969

5070
runTest {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.trendyol.transmissiontest.computation
2+
3+
import com.trendyol.transmission.transformer.Transformer
4+
import com.trendyol.transmission.transformer.request.Contract
5+
import com.trendyol.transmission.transformer.request.computation.Computations
6+
import com.trendyol.transmission.transformer.request.computation.createComputations
7+
import com.trendyol.transmission.transformer.request.computation.register
8+
import kotlinx.coroutines.ExperimentalCoroutinesApi
9+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
10+
11+
@OptIn(ExperimentalCoroutinesApi::class)
12+
internal class ComputationTransformer<C: Contract.Computation<D?>, D: Any?>(
13+
contract: C, data: () -> D?
14+
): Transformer(dispatcher = UnconfinedTestDispatcher()) {
15+
override val computations: Computations = createComputations {
16+
register(contract) {
17+
data()
18+
}
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.trendyol.transmissiontest.computation
2+
3+
import com.trendyol.transmission.transformer.Transformer
4+
import com.trendyol.transmission.transformer.request.Contract
5+
import com.trendyol.transmission.transformer.request.computation.Computations
6+
import com.trendyol.transmission.transformer.request.computation.createComputations
7+
import com.trendyol.transmission.transformer.request.computation.register
8+
import kotlinx.coroutines.ExperimentalCoroutinesApi
9+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
10+
11+
@OptIn(ExperimentalCoroutinesApi::class)
12+
internal class ComputationWithArgsTransformer<C: Contract.ComputationWithArgs<A, D?>, D: Any?, A: Any>(
13+
contract: C, data: () -> D?
14+
): Transformer(dispatcher = UnconfinedTestDispatcher()) {
15+
override val computations: Computations = createComputations {
16+
register(contract) {
17+
data()
18+
}
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.trendyol.transmissiontest.data
2+
3+
import com.trendyol.transmission.Transmission
4+
import com.trendyol.transmission.transformer.Transformer
5+
import com.trendyol.transmission.transformer.dataholder.dataHolder
6+
import com.trendyol.transmission.transformer.request.Contract
7+
import kotlinx.coroutines.ExperimentalCoroutinesApi
8+
import kotlinx.coroutines.test.UnconfinedTestDispatcher
9+
10+
@OptIn(ExperimentalCoroutinesApi::class)
11+
class DataTransformer<D : Transmission.Data?>(
12+
contract: Contract.DataHolder<D>, data: () -> D
13+
) : Transformer(dispatcher = UnconfinedTestDispatcher()) {
14+
15+
private val dataHolder = dataHolder(
16+
initialValue = data(),
17+
contract = contract,
18+
publishUpdates = false
19+
)
20+
}

transmission/src/main/java/com/trendyol/transmission/router/RegistryScope.kt

Lines changed: 0 additions & 30 deletions
This file was deleted.

transmission/src/main/java/com/trendyol/transmission/router/RequestDelegate.kt

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import kotlinx.coroutines.launch
2222
internal class RequestDelegate(
2323
private val queryScope: CoroutineScope,
2424
private val routerRef: TransmissionRouter,
25-
private val registry: RegistryScopeImpl? = null,
2625
) : RequestHandler {
2726

2827
private val routerQueryResultChannel: MutableSharedFlow<QueryResult> = MutableSharedFlow()
@@ -36,11 +35,7 @@ internal class RequestDelegate(
3635

3736
init {
3837
queryScope.launch {
39-
if (registry != null) {
40-
outGoingQuery.consumeAsFlow().collect { testQuery(it) }
41-
} else {
42-
outGoingQuery.consumeAsFlow().collect { processQuery(it) }
43-
}
38+
outGoingQuery.consumeAsFlow().collect { processQuery(it) }
4439
}
4540
}
4641

@@ -164,56 +159,6 @@ internal class RequestDelegate(
164159

165160
// endregion
166161

167-
// region test queries
168-
169-
private fun testQuery(query: Query) = queryScope.launch {
170-
when (query) {
171-
is Query.Computation -> testComputationQuery(query)
172-
is Query.Data -> testDataQuery(query)
173-
is Query.ComputationWithArgs<*> -> testComputationQueryWithArgs(query)
174-
is Query.Execution -> {}
175-
is Query.ExecutionWithArgs<*> -> {}
176-
}
177-
}
178-
179-
private fun testDataQuery(
180-
query: Query.Data,
181-
) = queryScope.launch {
182-
val dataToSend = QueryResult.Data(
183-
owner = query.sender,
184-
data = registry?.dataMap?.get(query.key),
185-
key = query.key,
186-
resultIdentifier = query.queryIdentifier
187-
)
188-
queryScope.launch {
189-
queryResultChannel.trySend(dataToSend)
190-
}
191-
}
192-
193-
private fun testComputationQuery(
194-
query: Query.Computation,
195-
) = queryScope.launch {
196-
val computationToSend = QueryResult.Computation(
197-
owner = query.sender,
198-
data = registry?.computationMap?.get(query.key),
199-
key = query.key,
200-
resultIdentifier = query.queryIdentifier
201-
)
202-
queryResultChannel.trySend(computationToSend)
203-
}
204-
205-
private fun <A : Any> testComputationQueryWithArgs(
206-
query: Query.ComputationWithArgs<A>,
207-
) = queryScope.launch {
208-
val computationToSend = QueryResult.Computation(
209-
owner = query.sender,
210-
data = registry?.computationMap?.get(query.key),
211-
key = query.key,
212-
resultIdentifier = query.queryIdentifier
213-
)
214-
queryResultChannel.trySend(computationToSend)
215-
}
216-
217162
// region Request Handler
218163

219164
override suspend fun <C : Contract.DataHolder<D>, D : Transmission.Data> getData(contract: C): D? {

transmission/src/main/java/com/trendyol/transmission/router/TransmissionRouter.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ class TransmissionRouter internal constructor(
2828
internal val transformerSetLoader: TransformerSetLoader? = null,
2929
internal val autoInitialization: Boolean = true,
3030
dispatcher: CoroutineDispatcher = Dispatchers.Default,
31-
registryScope: RegistryScopeImpl? = null
3231
) {
3332

3433
private val exceptionHandler = CoroutineExceptionHandler { _, _ -> }
@@ -52,7 +51,6 @@ class TransmissionRouter internal constructor(
5251
private val _requestDelegate = RequestDelegate(
5352
queryScope = routerScope,
5453
routerRef = this@TransmissionRouter,
55-
registry = registryScope
5654
)
5755

5856
val requestHelper: RequestHandler = _requestDelegate

transmission/src/main/java/com/trendyol/transmission/router/builder/TransmissionRouterBuilderInternal.kt

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
package com.trendyol.transmission.router.builder
22

3-
import com.trendyol.transmission.router.RegistryScope
4-
import com.trendyol.transmission.router.RegistryScopeImpl
53
import com.trendyol.transmission.router.loader.TransformerSetLoader
64
import com.trendyol.transmission.transformer.Transformer
75
import kotlinx.coroutines.CoroutineDispatcher
86
import kotlinx.coroutines.Dispatchers
97

108
internal class TransmissionRouterBuilderInternal internal constructor(
11-
scope: TransmissionTestingRouterBuilderScope.() -> Unit
9+
scope: TransmissionRouterBuilderScope.() -> Unit
1210
) {
1311

1412
internal var dispatcher: CoroutineDispatcher = Dispatchers.Default
15-
internal var registryScope: RegistryScopeImpl? = null
1613
internal lateinit var transformerSetLoader: TransformerSetLoader
1714
internal var autoInitialization: Boolean = true
1815

19-
private val scopeImpl = object : TransmissionTestingRouterBuilderScope {
20-
21-
override fun testing(scope: RegistryScope.() -> Unit) {
22-
this@TransmissionRouterBuilderInternal.registryScope = RegistryScopeImpl().apply(scope)
23-
}
16+
private val scopeImpl = object : TransmissionRouterBuilderScope {
2417

2518
override fun addDispatcher(dispatcher: CoroutineDispatcher) {
2619
this@TransmissionRouterBuilderInternal.dispatcher = dispatcher
27-
2820
}
2921

3022
override fun addTransformerSet(transformerSet: Set<Transformer>) {

transmission/src/main/java/com/trendyol/transmission/router/builder/TransmissionTestingRouterBuilder.kt

Lines changed: 0 additions & 18 deletions
This file was deleted.

transmission/src/main/java/com/trendyol/transmission/router/builder/TransmissionTestingRouterBuilderScope.kt

Lines changed: 0 additions & 7 deletions
This file was deleted.

transmission/src/main/java/com/trendyol/transmission/transformer/request/Contract.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ sealed interface Contract {
1010
internal val key: String,
1111
) : Contract
1212

13-
class Computation<T : Any> internal constructor(
13+
class Computation<T : Any?> internal constructor(
1414
internal val key: String,
1515
internal val useCache: Boolean = false
1616
) : Contract
1717

18-
class ComputationWithArgs<A : Any, T : Any> internal constructor(
18+
class ComputationWithArgs<A : Any, T : Any?> internal constructor(
1919
internal val key: String,
2020
internal val useCache: Boolean = false
2121
) : Contract

0 commit comments

Comments
 (0)