@@ -5,7 +5,9 @@ import arrow.core.right
5
5
import io.github.typesafegithub.workflows.shared.internal.fetchAvailableVersions
6
6
import io.kotest.core.spec.style.FunSpec
7
7
import io.kotest.matchers.shouldBe
8
+ import io.ktor.client.engine.HttpClientEngineFactory
8
9
import io.ktor.client.engine.mock.MockEngine
10
+ import io.ktor.client.engine.mock.MockEngineConfig
9
11
import io.ktor.client.engine.mock.respond
10
12
import io.ktor.http.HttpHeaders
11
13
import io.ktor.http.HttpStatusCode
@@ -17,80 +19,81 @@ class GithubApiTest :
17
19
FunSpec ({
18
20
test(" branches with major versions and tags with other versions" ) {
19
21
// Given
20
- val mockEngine =
21
- MockEngine { request ->
22
- if (" matching-refs/tags" in request.url.fullPath) {
23
- respond(
24
- // language=json
25
- content =
26
- ByteReadChannel (
27
- """
28
- [
29
- {
30
- "ref":"refs/tags/v1.0.0",
31
- "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvdGFncy92MQ==",
32
- "url":"https://api.github.com/repos/some-owner/some-name/git/refs/tags/v1",
33
- "object": {
34
- "sha":"544eadc6bf3d226fd7a7a9f0dc5b5bf7ca0675b9",
35
- "type":"tag",
36
- "url":"https://api.github.com/repos/actions/some-name/git/tags/544eadc6bf3d226fd7a7a9f0dc5b5bf7ca0675b9"
37
- }
38
- },
39
- {
40
- "ref":"refs/tags/v1.0.1",
41
- "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvdGFncy92MQ==",
42
- "url":"https://api.github.com/repos/some-owner/some-name/git/refs/tags/v1.0.1",
43
- "object": {
44
- "sha":"af513c7a016048ae468971c52ed77d9562c7c819",
45
- "type":"tag",
46
- "url":"https://api.github.com/repos/actions/some-name/git/tags/af513c7a016048ae468971c52ed77d9562c7c819"
47
- }
48
- }
49
- ]
50
- """ .trimIndent(),
51
- ),
52
- status = HttpStatusCode .OK ,
53
- headers = headersOf(HttpHeaders .ContentType , " application/json" ),
54
- )
55
- } else if (" matching-refs/heads" in request.url.fullPath) {
56
- respond(
57
- // language=json
58
- content =
59
- ByteReadChannel (
60
- """
61
- [
62
- {
63
- "ref":"refs/heads/v1",
64
- "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvaGVhZHMvdm1qb3NlcGgvc2lsZW50LXJldi1wYXJzZQ==",
65
- "url":"https://api.github.com/repos/some-owner/some-name/git/refs/heads/v1",
66
- "object": {
67
- "sha":"af5130cb8882054eda385840657dcbd1e19ab8f4",
68
- "type":"commit",
69
- "url":"https://api.github.com/repos/some-owner/some-name/git/commits/af5130cb8882054eda385840657dcbd1e19ab8f4"
70
- }
71
- },
72
- {
73
- "ref":"refs/heads/v2",
74
- "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvaGVhZHMvdm1qb3NlcGgvdG9vbGtpdC13aW5kb3dzLWV4ZWM=",
75
- "url":"https://api.github.com/repos/some-owner/some-name/git/refs/heads/v2",
76
- "object": {
77
- "sha":"c22ccee38a13e34cb01a103c324adb1db665821e",
78
- "type":"commit",
79
- "url":"https://api.github.com/repos/some-owner/some-name/git/commits/c22ccee38a13e34cb01a103c324adb1db665821e"
80
- }
81
- }
82
- ]
83
- """ .trimIndent(),
84
- ),
85
- status = HttpStatusCode .OK ,
86
- headers = headersOf(HttpHeaders .ContentType , " application/json" ),
87
- )
88
- } else {
89
- respond(
90
- content = ByteReadChannel (" The mock client wasn't prepared for this request" ),
91
- status = HttpStatusCode .NotFound ,
92
- )
22
+ val tagsResponse =
23
+ """
24
+ [
25
+ {
26
+ "ref":"refs/tags/v1.0.0",
27
+ "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvdGFncy92MQ==",
28
+ "url":"https://api.github.com/repos/some-owner/some-name/git/refs/tags/v1",
29
+ "object": {
30
+ "sha":"544eadc6bf3d226fd7a7a9f0dc5b5bf7ca0675b9",
31
+ "type":"tag",
32
+ "url":"https://api.github.com/repos/actions/some-name/git/tags/544eadc6bf3d226fd7a7a9f0dc5b5bf7ca0675b9"
33
+ }
34
+ },
35
+ {
36
+ "ref":"refs/tags/v1.0.1",
37
+ "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvdGFncy92MQ==",
38
+ "url":"https://api.github.com/repos/some-owner/some-name/git/refs/tags/v1.0.1",
39
+ "object": {
40
+ "sha":"af513c7a016048ae468971c52ed77d9562c7c819",
41
+ "type":"tag",
42
+ "url":"https://api.github.com/repos/actions/some-name/git/tags/af513c7a016048ae468971c52ed77d9562c7c819"
43
+ }
93
44
}
45
+ ]
46
+ """ .trimIndent()
47
+ val headsResponse =
48
+ """
49
+ [
50
+ {
51
+ "ref":"refs/heads/v1",
52
+ "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvaGVhZHMvdm1qb3NlcGgvc2lsZW50LXJldi1wYXJzZQ==",
53
+ "url":"https://api.github.com/repos/some-owner/some-name/git/refs/heads/v1",
54
+ "object": {
55
+ "sha":"af5130cb8882054eda385840657dcbd1e19ab8f4",
56
+ "type":"commit",
57
+ "url":"https://api.github.com/repos/some-owner/some-name/git/commits/af5130cb8882054eda385840657dcbd1e19ab8f4"
58
+ }
59
+ },
60
+ {
61
+ "ref":"refs/heads/v2",
62
+ "node_id":"MDM6UmVmMTk3ODE0NjI5OnJlZnMvaGVhZHMvdm1qb3NlcGgvdG9vbGtpdC13aW5kb3dzLWV4ZWM=",
63
+ "url":"https://api.github.com/repos/some-owner/some-name/git/refs/heads/v2",
64
+ "object": {
65
+ "sha":"c22ccee38a13e34cb01a103c324adb1db665821e",
66
+ "type":"commit",
67
+ "url":"https://api.github.com/repos/some-owner/some-name/git/commits/c22ccee38a13e34cb01a103c324adb1db665821e"
68
+ }
69
+ }
70
+ ]
71
+ """ .trimIndent()
72
+ val mockEngineFactory =
73
+ object : HttpClientEngineFactory <MockEngineConfig > {
74
+ override fun create (block : MockEngineConfig .() -> Unit ) =
75
+ MockEngine { request ->
76
+ if (" matching-refs/tags" in request.url.fullPath) {
77
+ respond(
78
+ // language=json
79
+ content = ByteReadChannel (tagsResponse),
80
+ status = HttpStatusCode .OK ,
81
+ headers = headersOf(HttpHeaders .ContentType , " application/json" ),
82
+ )
83
+ } else if (" matching-refs/heads" in request.url.fullPath) {
84
+ respond(
85
+ // language=json
86
+ content = ByteReadChannel (headsResponse),
87
+ status = HttpStatusCode .OK ,
88
+ headers = headersOf(HttpHeaders .ContentType , " application/json" ),
89
+ )
90
+ } else {
91
+ respond(
92
+ content = ByteReadChannel (" The mock client wasn't prepared for this request" ),
93
+ status = HttpStatusCode .NotFound ,
94
+ )
95
+ }
96
+ }
94
97
}
95
98
96
99
// When
@@ -99,7 +102,7 @@ class GithubApiTest :
99
102
owner = " some-owner" ,
100
103
name = " some-name" ,
101
104
githubAuthToken = " token" ,
102
- httpClientEngine = mockEngine ,
105
+ httpClientEngineFactory = mockEngineFactory ,
103
106
)
104
107
105
108
// Then
@@ -114,14 +117,17 @@ class GithubApiTest :
114
117
115
118
test(" error occurs when fetching branches and tags" ) {
116
119
// Given
117
- val mockEngine =
118
- MockEngine { request ->
119
- respond(
120
- // language=json
121
- content = ByteReadChannel (""" {"message": "There was a problem!"}""" ),
122
- status = HttpStatusCode .Forbidden ,
123
- headers = headersOf(HttpHeaders .ContentType , " application/json" ),
124
- )
120
+ val mockEngineFactory =
121
+ object : HttpClientEngineFactory <MockEngineConfig > {
122
+ override fun create (block : MockEngineConfig .() -> Unit ) =
123
+ MockEngine { request ->
124
+ respond(
125
+ // language=json
126
+ content = ByteReadChannel (""" {"message": "There was a problem!"}""" ),
127
+ status = HttpStatusCode .Forbidden ,
128
+ headers = headersOf(HttpHeaders .ContentType , " application/json" ),
129
+ )
130
+ }
125
131
}
126
132
127
133
// When
@@ -130,7 +136,7 @@ class GithubApiTest :
130
136
owner = " some-owner" ,
131
137
name = " some-name" ,
132
138
githubAuthToken = " token" ,
133
- httpClientEngine = mockEngine ,
139
+ httpClientEngineFactory = mockEngineFactory ,
134
140
)
135
141
136
142
// Then
0 commit comments