diff --git a/reactive/core/src/main/kotlin/com/caplin/integration/datasourcex/reactive/core/Binder.kt b/reactive/core/src/main/kotlin/com/caplin/integration/datasourcex/reactive/core/Binder.kt index c5891af..47d81fd 100644 --- a/reactive/core/src/main/kotlin/com/caplin/integration/datasourcex/reactive/core/Binder.kt +++ b/reactive/core/src/main/kotlin/com/caplin/integration/datasourcex/reactive/core/Binder.kt @@ -38,6 +38,7 @@ import com.caplin.integration.datasourcex.reactive.api.PathVariablesChannelSuppl import com.caplin.integration.datasourcex.reactive.api.RecordType import com.caplin.integration.datasourcex.reactive.api.ServiceConfig import com.caplin.integration.datasourcex.util.AntPatternNamespace +import com.caplin.integration.datasourcex.util.AntPatternNamespace.Companion.addIncludeNamespace import com.caplin.integration.datasourcex.util.getLogger import java.util.concurrent.ConcurrentHashMap import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -712,7 +713,7 @@ private constructor(val dataSource: ScopedDataSource, private val serviceInfo: S val (fromPattern, toPattern) = antPatternNamespace.getObjectMap(mappings) service.addObjectMap(fromPattern, toPattern) } - service.addIncludePattern(antPatternNamespace.pattern) + service.addIncludeNamespace(antPatternNamespace) } private fun ServiceInfo.finalise(dataSource: DataSource) { diff --git a/reactive/core/src/test/kotlin/com/caplin/integration/datasourcex/reactive/core/BinderTest.kt b/reactive/core/src/test/kotlin/com/caplin/integration/datasourcex/reactive/core/BinderTest.kt new file mode 100644 index 0000000..cf83ded --- /dev/null +++ b/reactive/core/src/test/kotlin/com/caplin/integration/datasourcex/reactive/core/BinderTest.kt @@ -0,0 +1,45 @@ +package com.caplin.integration.datasourcex.reactive.core + +import com.caplin.datasource.Service +import com.caplin.datasource.internal.ServiceImpl +import com.caplin.datasource.publisher.CachingPublisher +import com.caplin.integration.datasourcex.reactive.api.ServiceConfig +import com.caplin.integration.datasourcex.util.AntPatternNamespace +import io.kotest.core.spec.style.FunSpec +import io.mockk.Runs +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.mockkConstructor +import io.mockk.slot +import io.mockk.verify +import kotlinx.coroutines.flow.flowOf + +class BinderTest : + FunSpec({ + test("Ant namespace binding to a service") { + mockkConstructor(ServiceImpl::class) + + val publisher = mockk() + val mockDataSource = + mockk { + every { configuration } returns + mockk { every { getStringValue("datasrc-local-label") } returns "local-label" } + every { createService(any()) } just Runs + every { createCachingPublisher(any(), any()) } returns publisher + } + val binder = Binder(mockDataSource) + + val namespace = AntPatternNamespace("/PRIVATE/{username}/{param}") + binder.withServiceConfig(ServiceConfig("abc")) { + it.bindActiveRecord({}, namespace, { flowOf(mapOf()) }) + } + + val service = slot() + verify { mockDataSource.createService(capture(service)) } + + verify { + (service.captured as ServiceImpl).addIncludePattern("^\\/PRIVATE\\/[^/]*\\/[^/]*$") + } + } + })