@@ -66,7 +66,7 @@ func testConfig(t *testing.T, context spec.G, it spec.S) {
66
66
PURL : "some-purl" ,
67
67
DeprecationDate : & deprecationDate ,
68
68
ID : "some-dependency" ,
69
- Licenses : []string {"fancy-license" , "fancy-license-2" },
69
+ Licenses : []interface {} {"fancy-license" , "fancy-license-2" },
70
70
Name : "Some Dependency" ,
71
71
SHA256 : "shasum" ,
72
72
Source : "source" ,
@@ -164,6 +164,163 @@ api = "0.2"
164
164
` ))
165
165
})
166
166
167
+ context ("when the config dependency licenses are structured like ConfigBuildpackLicenses" , func () {
168
+ it ("encodes the config to TOML" , func () {
169
+ deprecationDate , err := time .Parse (time .RFC3339 , "2020-06-01T00:00:00Z" )
170
+ Expect (err ).NotTo (HaveOccurred ())
171
+
172
+ err = cargo .EncodeConfig (buffer , cargo.Config {
173
+ API : "0.2" ,
174
+ Buildpack : cargo.ConfigBuildpack {
175
+ ID : "some-buildpack-id" ,
176
+ Name : "some-buildpack-name" ,
177
+ Version : "some-buildpack-version" ,
178
+ Homepage : "some-homepage-link" ,
179
+ Licenses : []cargo.ConfigBuildpackLicense {
180
+ {
181
+ Type : "some-license-type" ,
182
+ URI : "some-license-uri" ,
183
+ },
184
+ },
185
+ },
186
+ Stacks : []cargo.ConfigStack {
187
+ {
188
+ ID : "some-stack-id" ,
189
+ Mixins : []string {"some-mixin-id" },
190
+ },
191
+ {
192
+ ID : "other-stack-id" ,
193
+ },
194
+ },
195
+ Metadata : cargo.ConfigMetadata {
196
+ IncludeFiles : []string {
197
+ "some-include-file" ,
198
+ "other-include-file" ,
199
+ },
200
+ Unstructured : map [string ]interface {}{"some-map" : []map [string ]interface {}{{"key" : "value" }}},
201
+ PrePackage : "some-pre-package-script.sh" ,
202
+ Dependencies : []cargo.ConfigMetadataDependency {
203
+ {
204
+ CPE : "some-cpe" ,
205
+ PURL : "some-purl" ,
206
+ DeprecationDate : & deprecationDate ,
207
+ ID : "some-dependency" ,
208
+ Licenses : []interface {}{
209
+ cargo.ConfigBuildpackLicense {
210
+ Type : "fancy-license" ,
211
+ URI : "some-license-uri" ,
212
+ },
213
+ cargo.ConfigBuildpackLicense {
214
+ Type : "fancy-license-2" ,
215
+ URI : "some-license-uri" ,
216
+ },
217
+ },
218
+ Name : "Some Dependency" ,
219
+ SHA256 : "shasum" ,
220
+ Source : "source" ,
221
+ SourceSHA256 : "source-shasum" ,
222
+ Stacks : []string {"io.buildpacks.stacks.bionic" , "org.cloudfoundry.stacks.tiny" },
223
+ URI : "http://some-url" ,
224
+ Version : "1.2.3" ,
225
+ },
226
+ },
227
+ DependencyConstraints : []cargo.ConfigMetadataDependencyConstraint {
228
+ {
229
+ ID : "some-dependency" ,
230
+ Constraint : "1.*" ,
231
+ Patches : 1 ,
232
+ },
233
+ },
234
+ DefaultVersions : map [string ]string {
235
+ "some-dependency" : "1.2.x" ,
236
+ },
237
+ },
238
+ Order : []cargo.ConfigOrder {
239
+ {
240
+ Group : []cargo.ConfigOrderGroup {
241
+ {
242
+ ID : "some-dependency" ,
243
+ Version : "some-version" },
244
+ {
245
+ ID : "other-dependency" ,
246
+ Version : "other-version" ,
247
+ Optional : true ,
248
+ },
249
+ },
250
+ },
251
+ },
252
+ })
253
+ Expect (err ).NotTo (HaveOccurred ())
254
+ Expect (buffer .String ()).To (MatchTOML (`
255
+ api = "0.2"
256
+
257
+ [buildpack]
258
+ id = "some-buildpack-id"
259
+ name = "some-buildpack-name"
260
+ version = "some-buildpack-version"
261
+ homepage = "some-homepage-link"
262
+
263
+ [[buildpack.licenses]]
264
+ type = "some-license-type"
265
+ uri = "some-license-uri"
266
+
267
+ [metadata]
268
+ include-files = ["some-include-file", "other-include-file"]
269
+ pre-package = "some-pre-package-script.sh"
270
+
271
+ [metadata.default-versions]
272
+ some-dependency = "1.2.x"
273
+
274
+ [[metadata.dependencies]]
275
+ cpe = "some-cpe"
276
+ purl = "some-purl"
277
+ deprecation_date = "2020-06-01T00:00:00Z"
278
+ id = "some-dependency"
279
+ name = "Some Dependency"
280
+ sha256 = "shasum"
281
+ source = "source"
282
+ source_sha256 = "source-shasum"
283
+ stacks = ["io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"]
284
+ uri = "http://some-url"
285
+ version = "1.2.3"
286
+
287
+ [[metadata.dependencies.licenses]]
288
+ type = "fancy-license"
289
+ uri = "some-license-uri"
290
+
291
+ [[metadata.dependencies.licenses]]
292
+ type = "fancy-license-2"
293
+ uri = "some-license-uri"
294
+
295
+ [[metadata.dependency-constraints]]
296
+ id = "some-dependency"
297
+ constraint = "1.*"
298
+ patches = 1
299
+
300
+ [[metadata.some-map]]
301
+ key = "value"
302
+
303
+ [[stacks]]
304
+ id = "some-stack-id"
305
+ mixins = ["some-mixin-id"]
306
+
307
+ [[stacks]]
308
+ id = "other-stack-id"
309
+
310
+ [[order]]
311
+ [[order.group]]
312
+ id = "some-dependency"
313
+ version = "some-version"
314
+
315
+ [[order.group]]
316
+ id = "other-dependency"
317
+ version = "other-version"
318
+ optional = true
319
+ ` ))
320
+ })
321
+
322
+ })
323
+
167
324
context ("failure cases" , func () {
168
325
context ("when the Config cannot be marshalled to json" , func () {
169
326
it ("returns an error" , func () {
@@ -296,7 +453,7 @@ api = "0.2"
296
453
CPE : "some-cpe" ,
297
454
PURL : "some-purl" ,
298
455
ID : "some-dependency" ,
299
- Licenses : []string {"fancy-license" , "fancy-license-2" },
456
+ Licenses : []interface {} {"fancy-license" , "fancy-license-2" },
300
457
Name : "Some Dependency" ,
301
458
SHA256 : "shasum" ,
302
459
Source : "source" ,
@@ -336,6 +493,162 @@ api = "0.2"
336
493
}))
337
494
})
338
495
496
+ context ("dependency license are not a list of IDs" , func () {
497
+ it ("decodes TOML to config" , func () {
498
+ tomlBuffer := strings .NewReader (`
499
+ api = "0.2"
500
+
501
+ [buildpack]
502
+ id = "some-buildpack-id"
503
+ name = "some-buildpack-name"
504
+ version = "some-buildpack-version"
505
+ homepage = "some-homepage-link"
506
+
507
+ [[buildpack.licenses]]
508
+ type = "some-license-type"
509
+ uri = "some-license-uri"
510
+
511
+ [metadata]
512
+ include-files = ["some-include-file", "other-include-file"]
513
+ pre-package = "some-pre-package-script.sh"
514
+
515
+ [metadata.default-versions]
516
+ some-dependency = "1.2.x"
517
+
518
+ [[metadata.some-map]]
519
+ key = "value"
520
+
521
+ [[metadata.dependencies]]
522
+ cpe = "some-cpe"
523
+ purl = "some-purl"
524
+ id = "some-dependency"
525
+ name = "Some Dependency"
526
+ sha256 = "shasum"
527
+ source = "source"
528
+ source_sha256 = "source-shasum"
529
+ stacks = ["io.buildpacks.stacks.bionic", "org.cloudfoundry.stacks.tiny"]
530
+ uri = "http://some-url"
531
+ version = "1.2.3"
532
+
533
+ [[metadata.dependencies.licenses]]
534
+ type = "fancy-license"
535
+ uri = "some-license-uri"
536
+
537
+ [[metadata.dependencies.licenses]]
538
+ type = "fancy-license-2"
539
+ uri = "some-license-uri"
540
+
541
+ [[metadata.dependency-constraints]]
542
+ id = "some-dependency"
543
+ constraint = "1.*"
544
+ patches = 1
545
+
546
+ [[stacks]]
547
+ id = "some-stack-id"
548
+ mixins = ["some-mixin-id"]
549
+
550
+ [[stacks]]
551
+ id = "other-stack-id"
552
+
553
+ [[order]]
554
+ [[order.group]]
555
+ id = "some-dependency"
556
+ version = "some-version"
557
+
558
+ [[order.group]]
559
+ id = "other-dependency"
560
+ version = "other-version"
561
+ optional = true
562
+ ` )
563
+
564
+ var config cargo.Config
565
+ Expect (cargo .DecodeConfig (tomlBuffer , & config )).To (Succeed ())
566
+ Expect (config ).To (Equal (cargo.Config {
567
+ API : "0.2" ,
568
+ Buildpack : cargo.ConfigBuildpack {
569
+ ID : "some-buildpack-id" ,
570
+ Name : "some-buildpack-name" ,
571
+ Version : "some-buildpack-version" ,
572
+ Homepage : "some-homepage-link" ,
573
+ Licenses : []cargo.ConfigBuildpackLicense {
574
+ {
575
+ Type : "some-license-type" ,
576
+ URI : "some-license-uri" ,
577
+ },
578
+ },
579
+ },
580
+ Stacks : []cargo.ConfigStack {
581
+ {
582
+ ID : "some-stack-id" ,
583
+ Mixins : []string {"some-mixin-id" },
584
+ },
585
+ {
586
+ ID : "other-stack-id" ,
587
+ },
588
+ },
589
+ Metadata : cargo.ConfigMetadata {
590
+ Unstructured : map [string ]interface {}{"some-map" : json .RawMessage (`[{"key":"value"}]` )},
591
+ IncludeFiles : []string {
592
+ "some-include-file" ,
593
+ "other-include-file" ,
594
+ },
595
+ PrePackage : "some-pre-package-script.sh" ,
596
+ Dependencies : []cargo.ConfigMetadataDependency {
597
+ {
598
+ CPE : "some-cpe" ,
599
+ PURL : "some-purl" ,
600
+ ID : "some-dependency" ,
601
+ Licenses : []interface {}{
602
+ map [string ]interface {}{
603
+ "type" : "fancy-license" ,
604
+ "uri" : "some-license-uri" ,
605
+ },
606
+ map [string ]interface {}{
607
+ "type" : "fancy-license-2" ,
608
+ "uri" : "some-license-uri" ,
609
+ },
610
+ },
611
+ Name : "Some Dependency" ,
612
+ SHA256 : "shasum" ,
613
+ Source : "source" ,
614
+ SourceSHA256 : "source-shasum" ,
615
+ Stacks : []string {"io.buildpacks.stacks.bionic" , "org.cloudfoundry.stacks.tiny" },
616
+ URI : "http://some-url" ,
617
+ Version : "1.2.3" ,
618
+ },
619
+ },
620
+ DependencyConstraints : []cargo.ConfigMetadataDependencyConstraint {
621
+ {
622
+ ID : "some-dependency" ,
623
+ Constraint : "1.*" ,
624
+ Patches : 1 ,
625
+ },
626
+ },
627
+ DefaultVersions : map [string ]string {
628
+ "some-dependency" : "1.2.x" ,
629
+ },
630
+ },
631
+ Order : []cargo.ConfigOrder {
632
+ {
633
+ Group : []cargo.ConfigOrderGroup {
634
+ {
635
+ ID : "some-dependency" ,
636
+ Version : "some-version" ,
637
+ Optional : false ,
638
+ },
639
+ {
640
+ ID : "other-dependency" ,
641
+ Version : "other-version" ,
642
+ Optional : true ,
643
+ },
644
+ },
645
+ },
646
+ },
647
+ }))
648
+ })
649
+
650
+ })
651
+
339
652
context ("failure cases" , func () {
340
653
context ("when a bad reader is passed in" , func () {
341
654
it ("returns an error" , func () {
0 commit comments