1
1
package au.com.dius.pact.provider.junit.loader
2
2
3
+ import au.com.dius.pact.core.model.Consumer
3
4
import au.com.dius.pact.core.model.DefaultPactReader
4
5
import au.com.dius.pact.core.model.Interaction
5
6
import au.com.dius.pact.core.model.Pact
6
7
import au.com.dius.pact.core.model.PactBrokerSource
7
8
import au.com.dius.pact.core.model.PactReader
8
9
import au.com.dius.pact.core.model.UrlSource
10
+ import au.com.dius.pact.core.model.PactSource
9
11
import au.com.dius.pact.core.pactbroker.PactBrokerClient
10
12
import au.com.dius.pact.core.support.expressions.ExpressionParser.parseExpression
11
13
import au.com.dius.pact.core.support.expressions.ExpressionParser.parseListExpression
@@ -35,8 +37,7 @@ open class PactBrokerLoader(
35
37
valueResolver : ValueResolver ? = null
36
38
) : OverrideablePactLoader {
37
39
38
- private var _pactSource : PactBrokerSource <Interaction > = PactBrokerSource (
39
- pactBrokerHost, pactBrokerPort, pactBrokerScheme)
40
+ private var pacts: MutableMap <Consumer , MutableList <Pact <Interaction >>> = mutableMapOf ()
40
41
private var resolver: ValueResolver ? = valueResolver
41
42
private var overriddenPactUrl: String? = null
42
43
private var overriddenConsumer: String? = null
@@ -100,7 +101,10 @@ open class PactBrokerLoader(
100
101
return valueResolver
101
102
}
102
103
103
- override fun getPactSource () = _pactSource
104
+ override fun getPactSource (): PactSource ? {
105
+ val resolver = setupValueResolver()
106
+ return getPactBrokerSource(resolver)
107
+ }
104
108
105
109
override fun setValueResolver (valueResolver : ValueResolver ) {
106
110
this .resolver = valueResolver
@@ -140,6 +144,16 @@ open class PactBrokerLoader(
140
144
}
141
145
142
146
private fun brokerUrl (resolver : ValueResolver ): URIBuilder {
147
+ val (host, port, scheme) = getPactBrokerSource(resolver)
148
+
149
+ val uriBuilder = URIBuilder ().setScheme(scheme).setHost(host)
150
+ if (port.isNotEmpty()) {
151
+ uriBuilder.port = Integer .parseInt(port)
152
+ }
153
+ return uriBuilder
154
+ }
155
+
156
+ private fun getPactBrokerSource (resolver : ValueResolver ): PactBrokerSource <Interaction > {
143
157
val scheme = parseExpression(pactBrokerScheme, resolver)
144
158
val host = parseExpression(pactBrokerHost, resolver)
145
159
val port = parseExpression(pactBrokerPort, resolver)
@@ -154,11 +168,11 @@ open class PactBrokerLoader(
154
168
" Please provide a valid port number or specify the system property 'pactbroker.port'." , pactBrokerPort))
155
169
}
156
170
157
- val uriBuilder = URIBuilder ().setScheme(scheme).setHost(host)
158
- if (port.isNotEmpty()) {
159
- uriBuilder.port = Integer .parseInt(port)
171
+ return if (scheme == null ) {
172
+ PactBrokerSource (host, port, pacts = pacts)
173
+ } else {
174
+ PactBrokerSource (host, port, scheme, pacts)
160
175
}
161
- return uriBuilder
162
176
}
163
177
164
178
private fun getUrlForProvider (providerName : String , tag : String , pactBrokerClient : PactBrokerClient ): String {
@@ -172,7 +186,6 @@ open class PactBrokerLoader(
172
186
173
187
open fun loadPact (consumer : ConsumerInfo , options : Map <String , Any >): Pact <Interaction > {
174
188
val pact = pactReader.loadPact(consumer.pactSource!! , options) as Pact <Interaction >
175
- val pacts = this .pactSource.pacts
176
189
val pactConsumer = consumer.toPactConsumer()
177
190
val pactList = pacts.getOrDefault(pactConsumer, mutableListOf ())
178
191
pactList.add(pact)
0 commit comments