@@ -48,6 +48,315 @@ 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 expectedContent = """
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+ """ .trimIndent()
152+
153+ val content = mockBuilder.generatedText()
154+ content shouldBe expectedContent
155+ }
156+
157+ " generate repositories section for both GradleDefinition and MavenCentralMirror if URL differs" {
158+ val secUser = MockConfigFileBuilder .createSecret("userSecret")
159+ val secPass = MockConfigFileBuilder .createSecret("passSecret")
160+
161+ val definition1 = GradleDefinition (
162+ MockConfigFileBuilder .createInfrastructureService("https://repo.example.org", secUser, secPass),
163+ emptySet()
164+ )
165+
166+ val username = " test-username"
167+ val infraUsernameSecret = MockConfigFileBuilder .createSecret("infra-secret-username")
168+ val password = " test-password"
169+ val infraPasswordSecret = MockConfigFileBuilder .createSecret("infra-secret-password")
170+ val mavenCentralMirror = MavenCentralMirror (
171+ id = "central",
172+ name = "Maven Central ",
173+ url = "https://different-repo.example.org",
174+ mirrorOf = "central",
175+ usernameSecret = infraUsernameSecret.name,
176+ passwordSecret = infraPasswordSecret.name
177+ )
178+
179+ val mockBuilder = MockConfigFileBuilder ()
180+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraUsernameSecret.path)) } returns username
181+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraPasswordSecret.path)) } returns password
182+ every { mockBuilder.adminConfig.mavenCentralMirror } returns mavenCentralMirror
183+
184+ GradleInitGenerator ().generate(mockBuilder.builder, listOf(definition1))
185+
186+ val expectedContent = """
187+ allprojects {
188+ repositories {
189+ maven {
190+ url = uri("${mavenCentralMirror.url} ")
191+ credentials {
192+ username = "$username "
193+ password = "$password "
194+ }
195+ }
196+ maven {
197+ url = uri("https://repo.example.org")
198+ credentials {
199+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
200+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
201+ }
202+ }
203+ }
204+
205+ buildscript {
206+ repositories {
207+ maven {
208+ url = uri("${mavenCentralMirror.url} ")
209+ credentials {
210+ username = "$username "
211+ password = "$password "
212+ }
213+ }
214+ maven {
215+ url = uri("https://repo.example.org")
216+ credentials {
217+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
218+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
219+ }
220+ }
221+ }
222+ }
223+ }
224+
225+ settingsEvaluated {
226+ settings.pluginManagement {
227+ repositories {
228+ maven {
229+ url = uri("${mavenCentralMirror.url} ")
230+ credentials {
231+ username = "$username "
232+ password = "$password "
233+ }
234+ }
235+ maven {
236+ url = uri("https://repo.example.org")
237+ credentials {
238+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
239+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
240+ }
241+ }
242+ gradlePluginPortal()
243+ }
244+ }
245+
246+ settings.dependencyResolutionManagement {
247+ repositories {
248+ maven {
249+ url = uri("${mavenCentralMirror.url} ")
250+ credentials {
251+ username = "$username "
252+ password = "$password "
253+ }
254+ }
255+ maven {
256+ url = uri("https://repo.example.org")
257+ credentials {
258+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
259+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
260+ }
261+ }
262+ }
263+ }
264+ }
265+
266+ """ .trimIndent()
267+
268+ val content = mockBuilder.generatedText()
269+ content shouldBe expectedContent
270+ }
271+
272+ " prefer GradleDefinition over MavenCentralMirror if URLs match" {
273+ val repositoryUrl = " https://repo.example.org"
274+ val secUser = MockConfigFileBuilder .createSecret("userSecret")
275+ val secPass = MockConfigFileBuilder .createSecret("passSecret")
276+
277+ val definition1 = GradleDefinition (
278+ MockConfigFileBuilder .createInfrastructureService(repositoryUrl, secUser, secPass),
279+ emptySet()
280+ )
281+
282+ val username = " test-username"
283+ val infraUsernameSecret = MockConfigFileBuilder .createSecret("infra-secret-username")
284+ val password = " test-password"
285+ val infraPasswordSecret = MockConfigFileBuilder .createSecret("infra-secret-password")
286+ val mavenCentralMirror = MavenCentralMirror (
287+ id = "central",
288+ name = "Maven Central ",
289+ url = repositoryUrl,
290+ mirrorOf = "central",
291+ usernameSecret = infraUsernameSecret.name,
292+ passwordSecret = infraPasswordSecret.name
293+ )
294+
295+ val mockBuilder = MockConfigFileBuilder ()
296+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraUsernameSecret.path)) } returns username
297+ every { mockBuilder.infraSecretResolverFun.invoke(Path (infraPasswordSecret.path)) } returns password
298+ every { mockBuilder.adminConfig.mavenCentralMirror } returns mavenCentralMirror
299+
300+ GradleInitGenerator ().generate(mockBuilder.builder, listOf(definition1))
301+
302+ val expectedContent = """
303+ allprojects {
304+ repositories {
305+ maven {
306+ url = uri("$repositoryUrl ")
307+ credentials {
308+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
309+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
310+ }
311+ }
312+ }
313+
314+ buildscript {
315+ repositories {
316+ maven {
317+ url = uri("$repositoryUrl ")
318+ credentials {
319+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
320+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
321+ }
322+ }
323+ }
324+ }
325+ }
326+
327+ settingsEvaluated {
328+ settings.pluginManagement {
329+ repositories {
330+ maven {
331+ url = uri("$repositoryUrl ")
332+ credentials {
333+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
334+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
335+ }
336+ }
337+ gradlePluginPortal()
338+ }
339+ }
340+
341+ settings.dependencyResolutionManagement {
342+ repositories {
343+ maven {
344+ url = uri("$repositoryUrl ")
345+ credentials {
346+ username = "${MockConfigFileBuilder .testSecretRef(secUser)} "
347+ password = "${MockConfigFileBuilder .testSecretRef(secPass)} "
348+ }
349+ }
350+ }
351+ }
352+ }
353+
354+ """ .trimIndent()
355+
356+ val content = mockBuilder.generatedText()
357+ content shouldBe expectedContent
358+ }
359+
51360 " generate an empty file if MavenCentralMirror is null" {
52361 val mockBuilder = MockConfigFileBuilder ()
53362
0 commit comments