@@ -11,6 +11,7 @@ import com.itv.scalapact.shared.http.{
11
11
import com .itv .scalapact .shared .json .{IPactReader , IPactWriter }
12
12
import org .scalatest .{BeforeAndAfter , FunSpec , Matchers }
13
13
14
+ import java .net .URLEncoder
14
15
import scala .collection .mutable .ArrayBuffer
15
16
import scala .concurrent .duration .Duration
16
17
@@ -42,9 +43,19 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
42
43
metadata = None
43
44
)
44
45
46
+ private val providerUrl = " http://localhost/pacticipants/provider-service"
47
+ def getProviderUrl (providerVersion : String , tag : String ): String =
48
+ providerUrl + " /versions/" + providerVersion + " /tags/" + URLEncoder .encode(tag, " UTF-8" )
49
+
45
50
private val publishUrl = " http://localhost/pacts/provider/provider-service/consumer/consumer-service/latest/{tag}"
46
51
47
52
private val _links = Map (
53
+ " pb:provider" -> LinkValues (
54
+ title = Option (" Provider url" ),
55
+ name = None ,
56
+ href = providerUrl,
57
+ templated = Option (true )
58
+ ),
48
59
" pb:publish-verification-results" -> LinkValues (
49
60
title = Option (" Publish result url" ),
50
61
name = None ,
@@ -85,12 +96,13 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
85
96
val failedResult = PactVerifyResultInContext (Left (" failed" ), " context" )
86
97
val failedResults = List (successfulResult, failedResult)
87
98
val pactVerifyResults = List (PactVerifyResult (simpleWithLinks, successfulResults))
99
+ val providerVersionTags = List (" master" )
88
100
89
101
it(" should publish successful results" ) {
90
102
val results = successfulResults
91
103
val pactVerifyResults = List (PactVerifyResult (simpleWithLinks, results))
92
104
93
- resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, None , None , None )
105
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, Nil , None , None , None )
94
106
95
107
val successfulRequest = SimpleRequest (
96
108
publishUrl,
@@ -103,11 +115,43 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
103
115
requests shouldBe ArrayBuffer (successfulRequest)
104
116
}
105
117
118
+ it(" should publish successful results with provider version tags" ) {
119
+ val results = successfulResults
120
+ val pactVerifyResults = List (PactVerifyResult (simpleWithLinks, results))
121
+
122
+ resultPublisher.publishVerificationResults(
123
+ pactVerifyResults,
124
+ brokerPublishData,
125
+ providerVersionTags,
126
+ pactBrokerAuthorization = None ,
127
+ brokerClientTimeout = None ,
128
+ sslContextName = None
129
+ )
130
+
131
+ val successfulTagRequest = SimpleRequest (
132
+ baseUrl = getProviderUrl(brokerPublishData.providerVersion, providerVersionTags.head),
133
+ endPoint = " " ,
134
+ method = HttpMethod .POST ,
135
+ headers = Map (" Content-Type" -> " application/json; charset=UTF-8" ),
136
+ body = None ,
137
+ sslContextName = None
138
+ )
139
+ val successfulVerificationRequest = SimpleRequest (
140
+ publishUrl,
141
+ " " ,
142
+ HttpMethod .POST ,
143
+ Map (" Content-Type" -> " application/json; charset=UTF-8" ),
144
+ Option (""" { "success": true, "providerApplicationVersion": "1.0.0", "buildUrl": "http://buildUrl.com" }""" ),
145
+ None
146
+ )
147
+ requests shouldBe ArrayBuffer (successfulTagRequest, successfulVerificationRequest)
148
+ }
149
+
106
150
it(" should publish successful results without buildUrl" ) {
107
151
val results = successfulResults
108
152
val pactVerifyResults = List (PactVerifyResult (simpleWithLinks, results))
109
153
110
- resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishDataNoBuildUrl, None , None , None )
154
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishDataNoBuildUrl, Nil , None , None , None )
111
155
112
156
val successfulRequest = SimpleRequest (
113
157
publishUrl,
@@ -123,7 +167,7 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
123
167
it(" should publish failure results" ) {
124
168
val pactVerifyResults = List (PactVerifyResult (simpleWithLinks, failedResults))
125
169
126
- resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, None , None , None )
170
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, Nil , None , None , None )
127
171
128
172
val failedRequest = SimpleRequest (
129
173
publishUrl,
@@ -136,11 +180,30 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
136
180
requests shouldBe ArrayBuffer (failedRequest)
137
181
}
138
182
139
- it(" should not publish if no _links available" ) {
140
- val results = successfulResults
141
- val pactVerifyResults = List (PactVerifyResult (simple, results))
183
+ it(" should not publish if no pb:publish-verification-results available in _links" ) {
184
+ val results = successfulResults
185
+ val pactVerifyResults = List (
186
+ PactVerifyResult (
187
+ simple.copy(_links = Option (_links.filterNot(_._1 == " pb:publish-verification-results" ))),
188
+ results
189
+ )
190
+ )
191
+
192
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, Nil , None , None , None )
193
+
194
+ requests shouldBe ArrayBuffer .empty[SimpleRequest ]
195
+ }
196
+
197
+ it(" should not publish if no pb:provider available in _links" ) {
198
+ val results = successfulResults
199
+ val pactVerifyResults = List (
200
+ PactVerifyResult (
201
+ simple.copy(_links = Option (_links.filterNot(_._1 == " pb:provider" ))),
202
+ results
203
+ )
204
+ )
142
205
143
- resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, None , None , None )
206
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, Nil , None , None , None )
144
207
145
208
requests shouldBe ArrayBuffer .empty[SimpleRequest ]
146
209
}
@@ -153,6 +216,7 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
153
216
resultPublisher.publishVerificationResults(
154
217
pactVerifyResults,
155
218
brokerPublishData,
219
+ Nil ,
156
220
PactBrokerAuthorization ((" username" , " password" ), " " ),
157
221
None ,
158
222
None
@@ -176,6 +240,7 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
176
240
resultPublisher.publishVerificationResults(
177
241
pactVerifyResults,
178
242
brokerPublishData,
243
+ Nil ,
179
244
PactBrokerAuthorization ((" " , " " ), token),
180
245
None ,
181
246
None
@@ -193,7 +258,7 @@ class PactBrokerClientSpec extends FunSpec with Matchers with BeforeAndAfter {
193
258
}
194
259
195
260
it(" should have no Authorization header when no auth config is provided" ) {
196
- resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, None , None , None )
261
+ resultPublisher.publishVerificationResults(pactVerifyResults, brokerPublishData, Nil , None , None , None )
197
262
198
263
val successfulRequest = SimpleRequest (
199
264
publishUrl,
0 commit comments