Skip to content

Commit 50b2382

Browse files
committed
Add test for BOM metadata's licenses and properties fields. #1019
Signed-off-by: Augustus Kling <[email protected]>
1 parent 2206b34 commit 50b2382

18 files changed

+368
-13
lines changed

src/serialize/json/normalize.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,12 @@ export class MetadataNormalizer extends BaseJsonNormalizer<Models.Metadata> {
224224
supplier: data.supplier === undefined
225225
? undefined
226226
: orgEntityNormalizer.normalize(data.supplier, options),
227-
licenses: data.licenses.size > 0
227+
licenses: this._factory.spec.supportsMetadataLicenses && data.licenses.size > 0
228228
? this._factory.makeForLicense().normalizeIterable(data.licenses, options)
229229
: undefined,
230-
properties: this._factory.spec.supportsProperties(data) && data.properties.size > 0
230+
properties: this._factory.spec.supportsMetadataProperties && data.properties.size > 0
231231
? this._factory.makeForProperty().normalizeIterable(data.properties, options)
232-
: undefined,
232+
: undefined
233233
}
234234
}
235235
}

src/serialize/xml/normalize.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -246,14 +246,14 @@ export class MetadataNormalizer extends BaseXmlNormalizer<Models.Metadata> {
246246
children: this._factory.makeForOrganizationalContact().normalizeIterable(data.authors, options, 'author')
247247
}
248248
: undefined
249-
const licenses: SimpleXml.Element | undefined = data.licenses.size > 0
249+
const licenses: SimpleXml.Element | undefined = this._factory.spec.supportsMetadataLicenses && data.licenses.size > 0
250250
? {
251251
type: 'element',
252252
name: 'licenses',
253253
children: this._factory.makeForLicense().normalizeIterable(data.licenses, options)
254254
}
255255
: undefined
256-
const properties: SimpleXml.Element | undefined = this._factory.spec.supportsProperties(data) && data.properties.size > 0
256+
const properties: SimpleXml.Element | undefined = this._factory.spec.supportsMetadataProperties && data.properties.size > 0
257257
? {
258258
type: 'element',
259259
name: 'properties',

src/spec/_protocol.ts

+16
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ export interface _SpecProtocol {
4343
supportsVulnerabilityRatingMethod: (rm: Vulnerability.RatingMethod | any) => boolean
4444
supportsComponentEvidence: boolean
4545
supportsMetadataLifecycles: boolean
46+
supportsMetadataLicenses: boolean
47+
supportsMetadataProperties: boolean
4648
supportsExternalReferenceHashes: boolean
4749
}
4850

@@ -68,6 +70,8 @@ export class _Spec implements _SpecProtocol {
6870
readonly #supportsVulnerabilities: boolean
6971
readonly #supportsComponentEvidence: boolean
7072
readonly #supportsMetadataLifecycles: boolean
73+
readonly #supportsMetadataLicenses: boolean
74+
readonly #supportsMetadataProperties: boolean
7175
readonly #supportsExternalReferenceHashes: boolean
7276

7377
constructor (
@@ -85,6 +89,8 @@ export class _Spec implements _SpecProtocol {
8589
vulnerabilityRatingMethods: Iterable<Vulnerability.RatingMethod>,
8690
supportsComponentEvidence: boolean,
8791
supportsMetadataLifecycles: boolean,
92+
supportsMetadataLicenses: boolean,
93+
supportsMetadataProperties: boolean,
8894
supportsExternalReferenceHashes: boolean
8995
) {
9096
this.#version = version
@@ -101,6 +107,8 @@ export class _Spec implements _SpecProtocol {
101107
this.#vulnerabilityRatingMethods = new Set(vulnerabilityRatingMethods)
102108
this.#supportsComponentEvidence = supportsComponentEvidence
103109
this.#supportsMetadataLifecycles = supportsMetadataLifecycles
110+
this.#supportsMetadataLicenses = supportsMetadataLicenses
111+
this.#supportsMetadataProperties = supportsMetadataProperties
104112
this.#supportsExternalReferenceHashes = supportsExternalReferenceHashes
105113
}
106114

@@ -167,6 +175,14 @@ export class _Spec implements _SpecProtocol {
167175
return this.#supportsMetadataLifecycles
168176
}
169177

178+
get supportsMetadataLicenses (): boolean {
179+
return this.#supportsMetadataLicenses
180+
}
181+
182+
get supportsMetadataProperties (): boolean {
183+
return this.#supportsMetadataProperties
184+
}
185+
170186
get supportsExternalReferenceHashes (): boolean {
171187
return this.#supportsExternalReferenceHashes
172188
}

src/spec/consts.ts

+8
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ export const Spec1dot2: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
7979
[],
8080
false,
8181
false,
82+
false,
83+
false,
8284
false
8385
))
8486

@@ -139,6 +141,8 @@ export const Spec1dot3: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
139141
[],
140142
true,
141143
false,
144+
true,
145+
true,
142146
true
143147
))
144148

@@ -206,6 +210,8 @@ export const Spec1dot4: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
206210
],
207211
true,
208212
false,
213+
true,
214+
true,
209215
true
210216
))
211217

@@ -302,6 +308,8 @@ export const Spec1dot5: Readonly<_SpecProtocol> = Object.freeze(new _Spec(
302308
],
303309
true,
304310
true,
311+
true,
312+
true,
305313
true
306314
))
307315

tests/README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ to be picked up.
1212
## Snapshots
1313

1414
Some tests check against snapshots.
15-
To update these, set the env var `CJL_TEST_UPDATE_SNAPSHOTS` to a non-falsy value.
15+
To update these, build and set the env var `CJL_TEST_UPDATE_SNAPSHOTS` to a non-falsy value.
16+
17+
```shell
18+
npm run build
19+
CJL_TEST_UPDATE_SNAPSHOTS=true npm test
20+
```
1621

1722
## Run node tests
1823

tests/_data/models.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,15 @@ module.exports.createComplexStructure = function () {
8787
name: 'Jane "the-other-supplier" Doe'
8888
})
8989
])
90-
})
90+
}),
91+
licenses: new Models.LicenseRepository([
92+
new Models.SpdxLicense('0BSD'),
93+
new Models.NamedLicense('Some license name')
94+
]),
95+
properties: new Models.PropertyRepository([
96+
new Models.Property('a', 'b'),
97+
new Models.Property('cdx:reproducible', 'true')
98+
])
9199
})
92100
})
93101

tests/_data/normalizeResults/json_sortedLists_spec1.3.json

+23-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/_data/normalizeResults/json_sortedLists_spec1.4.json

+23-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/_data/normalizeResults/json_sortedLists_spec1.5.json

+23-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/_data/normalizeResults/xml_sortedLists_spec1.3.json

+50
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/_data/normalizeResults/xml_sortedLists_spec1.4.json

+50
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)