@@ -48,6 +48,312 @@ class GradleInitGeneratorTest : WordSpec({
4848 mockBuilder.homeFileName shouldBe " .gradle/init.gradle.kts"
4949 }
5050
51+ " generate repositories blocks from definitions" {
52+ val secUser1 = MockConfigFileBuilder .createSecret("user1Secret")
53+ val secPass1 = MockConfigFileBuilder .createSecret("pass1Secret")
54+ val secUser2 = MockConfigFileBuilder .createSecret("user2Secret")
55+ val secPass2 = MockConfigFileBuilder .createSecret("pass2Secret")
56+
57+ val definition1 = GradleDefinition (
58+ MockConfigFileBuilder .createInfrastructureService("https://repo1.example.org", secUser1, secPass1),
59+ emptySet()
60+ )
61+
62+ val definition2 = GradleDefinition (
63+ MockConfigFileBuilder .createInfrastructureService("https://repo2.example.org", secUser2, secPass2),
64+ emptySet()
65+ )
66+
67+ val mockBuilder = MockConfigFileBuilder ()
68+
69+ GradleInitGenerator ().generate(mockBuilder.builder, listOf(definition1, definition2))
70+
71+ val expectedLines = listOf(
72+ "allprojects {",
73+ " repositories {",
74+ " maven {",
75+ " url = uri(\"https://repo1.example.org\")",
76+ " credentials {",
77+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser1)}\"",
78+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass1)}\"",
79+ " }",
80+ " }",
81+ " maven {",
82+ " url = uri(\"https://repo2.example.org\")",
83+ " credentials {",
84+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser2)}\"",
85+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass2)}\"",
86+ " }",
87+ " }",
88+ " }",
89+ "",
90+ " buildscript {",
91+ " repositories {",
92+ " maven {",
93+ " url = uri(\"https://repo1.example.org\")",
94+ " credentials {",
95+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser1)}\"",
96+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass1)}\"",
97+ " }",
98+ " }",
99+ " maven {",
100+ " url = uri(\"https://repo2.example.org\")",
101+ " credentials {",
102+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser2)}\"",
103+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass2)}\"",
104+ " }",
105+ " }",
106+ " }",
107+ " }",
108+ "}",
109+ "",
110+ "settingsEvaluated {",
111+ " settings.pluginManagement {",
112+ " repositories {",
113+ " maven {",
114+ " url = uri(\"https://repo1.example.org\")",
115+ " credentials {",
116+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser1)}\"",
117+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass1)}\"",
118+ " }",
119+ " }",
120+ " maven {",
121+ " url = uri(\"https://repo2.example.org\")",
122+ " credentials {",
123+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser2)}\"",
124+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass2)}\"",
125+ " }",
126+ " }",
127+ " gradlePluginPortal()",
128+ " }",
129+ " }",
130+ "",
131+ " settings.dependencyResolutionManagement {",
132+ " repositories {",
133+ " maven {",
134+ " url = uri(\"https://repo1.example.org\")",
135+ " credentials {",
136+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser1)}\"",
137+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass1)}\"",
138+ " }",
139+ " }",
140+ " maven {",
141+ " url = uri(\"https://repo2.example.org\")",
142+ " credentials {",
143+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser2)}\"",
144+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass2)}\"",
145+ " }",
146+ " }",
147+ " }",
148+ " }",
149+ "}"
150+ )
151+
152+ val lines = mockBuilder.generatedLines()
153+ lines shouldContainExactly expectedLines
154+ }
155+
156+ " generate repositories section for both GradleDefinition and MavenCentralMirror if URL differs" {
157+ val secUser = MockConfigFileBuilder .createSecret("userSecret")
158+ val secPass = MockConfigFileBuilder .createSecret("passSecret")
159+
160+ val definition1 = GradleDefinition (
161+ MockConfigFileBuilder .createInfrastructureService("https://repo.example.org", secUser, secPass),
162+ emptySet()
163+ )
164+
165+ val username = " test-username"
166+ val infraUsernameSecret = MockConfigFileBuilder .createSecret("infra-secret-username")
167+ val password = " test-password"
168+ val infraPasswordSecret = MockConfigFileBuilder .createSecret("infra-secret-password")
169+ val mavenCentralMirror = MavenCentralMirror (
170+ id = "central",
171+ name = "Maven Central ",
172+ url = "https://different-repo.example.org",
173+ mirrorOf = "central",
174+ usernameSecret = infraUsernameSecret.name,
175+ passwordSecret = infraPasswordSecret.name
176+ )
177+
178+ val mockBuilder = MockConfigFileBuilder ()
179+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraUsernameSecret.path)) } returns username
180+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraPasswordSecret.path)) } returns password
181+ every { mockBuilder.adminConfig.mavenCentralMirror } returns mavenCentralMirror
182+
183+ GradleInitGenerator ().generate(mockBuilder.builder, listOf(definition1))
184+
185+ val expectedLines = listOf(
186+ "allprojects {",
187+ " repositories {",
188+ " maven {",
189+ " url = uri(\"${mavenCentralMirror.url}\")",
190+ " credentials {",
191+ " username = \"$username\"",
192+ " password = \"$password\"",
193+ " }",
194+ " }",
195+ " maven {",
196+ " url = uri(\"https://repo.example.org\")",
197+ " credentials {",
198+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
199+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
200+ " }",
201+ " }",
202+ " }",
203+ "",
204+ " buildscript {",
205+ " repositories {",
206+ " maven {",
207+ " url = uri(\"${mavenCentralMirror.url}\")",
208+ " credentials {",
209+ " username = \"$username\"",
210+ " password = \"$password\"",
211+ " }",
212+ " }",
213+ " maven {",
214+ " url = uri(\"https://repo.example.org\")",
215+ " credentials {",
216+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
217+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
218+ " }",
219+ " }",
220+ " }",
221+ " }",
222+ "}",
223+ "",
224+ "settingsEvaluated {",
225+ " settings.pluginManagement {",
226+ " repositories {",
227+ " maven {",
228+ " url = uri(\"${mavenCentralMirror.url}\")",
229+ " credentials {",
230+ " username = \"$username\"",
231+ " password = \"$password\"",
232+ " }",
233+ " }",
234+ " maven {",
235+ " url = uri(\"https://repo.example.org\")",
236+ " credentials {",
237+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
238+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
239+ " }",
240+ " }",
241+ " gradlePluginPortal()",
242+ " }",
243+ " }",
244+ "",
245+ " settings.dependencyResolutionManagement {",
246+ " repositories {",
247+ " maven {",
248+ " url = uri(\"${mavenCentralMirror.url}\")",
249+ " credentials {",
250+ " username = \"$username\"",
251+ " password = \"$password\"",
252+ " }",
253+ " }",
254+ " maven {",
255+ " url = uri(\"https://repo.example.org\")",
256+ " credentials {",
257+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
258+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
259+ " }",
260+ " }",
261+ " }",
262+ " }",
263+ "}"
264+ )
265+
266+ val lines = mockBuilder.generatedLines()
267+ lines shouldContainExactly expectedLines
268+ }
269+
270+ " prefer GradleDefinition over MavenCentralMirror if URLs match" {
271+ val repositoryUrl = " https://repo.example.org"
272+ val secUser = MockConfigFileBuilder .createSecret("userSecret")
273+ val secPass = MockConfigFileBuilder .createSecret("passSecret")
274+
275+ val definition1 = GradleDefinition (
276+ MockConfigFileBuilder .createInfrastructureService(repositoryUrl, secUser, secPass),
277+ emptySet()
278+ )
279+
280+ val username = " test-username"
281+ val infraUsernameSecret = MockConfigFileBuilder .createSecret("infra-secret-username")
282+ val password = " test-password"
283+ val infraPasswordSecret = MockConfigFileBuilder .createSecret("infra-secret-password")
284+ val mavenCentralMirror = MavenCentralMirror (
285+ id = "central",
286+ name = "Maven Central ",
287+ url = repositoryUrl,
288+ mirrorOf = "central",
289+ usernameSecret = infraUsernameSecret.name,
290+ passwordSecret = infraPasswordSecret.name
291+ )
292+
293+ val mockBuilder = MockConfigFileBuilder ()
294+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraUsernameSecret.path)) } returns username
295+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraPasswordSecret.path)) } returns password
296+ every { mockBuilder.adminConfig.mavenCentralMirror } returns mavenCentralMirror
297+
298+ GradleInitGenerator ().generate(mockBuilder.builder, listOf(definition1))
299+
300+ val expectedLines = listOf(
301+ "allprojects {",
302+ " repositories {",
303+ " maven {",
304+ " url = uri(\"$repositoryUrl\")",
305+ " credentials {",
306+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
307+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
308+ " }",
309+ " }",
310+ " }",
311+ "",
312+ " buildscript {",
313+ " repositories {",
314+ " maven {",
315+ " url = uri(\"$repositoryUrl\")",
316+ " credentials {",
317+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
318+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
319+ " }",
320+ " }",
321+ " }",
322+ " }",
323+ "}",
324+ "",
325+ "settingsEvaluated {",
326+ " settings.pluginManagement {",
327+ " repositories {",
328+ " maven {",
329+ " url = uri(\"$repositoryUrl\")",
330+ " credentials {",
331+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
332+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
333+ " }",
334+ " }",
335+ " gradlePluginPortal()",
336+ " }",
337+ " }",
338+ "",
339+ " settings.dependencyResolutionManagement {",
340+ " repositories {",
341+ " maven {",
342+ " url = uri(\"$repositoryUrl\")",
343+ " credentials {",
344+ " username = \"${MockConfigFileBuilder .testSecretRef(secUser)}\"",
345+ " password = \"${MockConfigFileBuilder .testSecretRef(secPass)}\"",
346+ " }",
347+ " }",
348+ " }",
349+ " }",
350+ "}"
351+ )
352+
353+ val lines = mockBuilder.generatedLines()
354+ lines shouldContainExactly expectedLines
355+ }
356+
51357 " generate an empty file if MavenCentralMirror is null" {
52358 val mockBuilder = MockConfigFileBuilder ()
53359
0 commit comments