Skip to content

feat: add mandatory test 6.1.27.15 #340

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions csaf_2_1/mandatoryTests.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export { mandatoryTest_6_1_1 } from './mandatoryTests/mandatoryTest_6_1_1.js'
export { mandatoryTest_6_1_8 } from './mandatoryTests/mandatoryTest_6_1_8.js'
export { mandatoryTest_6_1_11 } from './mandatoryTests/mandatoryTest_6_1_11.js'
export { mandatoryTest_6_1_13 } from './mandatoryTests/mandatoryTest_6_1_13.js'
export { mandatoryTest_6_1_27_15 } from './mandatoryTests/mandatoryTest_6_1_27_15.js'
export { mandatoryTest_6_1_34 } from './mandatoryTests/mandatoryTest_6_1_34.js'
export { mandatoryTest_6_1_35 } from './mandatoryTests/mandatoryTest_6_1_35.js'
export { mandatoryTest_6_1_9 } from './mandatoryTests/mandatoryTest_6_1_9.js'
Expand Down
65 changes: 65 additions & 0 deletions csaf_2_1/mandatoryTests/mandatoryTest_6_1_27_15.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import Ajv from 'ajv/dist/jtd.js'

const ajv = new Ajv()

/*
This is the jtd schema that needs to match the input document so that the
test is activated. If this schema doesn't match it normally means that the input
document does not validate against the csaf json schema or optional fields that
the test checks are not present.
*/
const inputSchema = /** @type {const} */ ({
additionalProperties: true,
properties: {
document: {
additionalProperties: true,
properties: {
category: {
type: 'string',
},
},
},
},
optionalProperties: {
product_tree: {
additionalProperties: true,
properties: {},
},
},
Comment on lines +23 to +28
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does that make sense? We want to check that it doesn't exist... - Maybe, I'm missing something.

})

const validate = ajv.compile(inputSchema)

/**
* This implements the mandatory test 6.1.27.15 of the CSAF 2.1 standard.
*
* @param {unknown} doc
*/
export function mandatoryTest_6_1_27_15(doc) {
/*
The `ctx` variable holds the state that is accumulated during the test ran and is
finally returned by the function.
*/
const ctx = {
errors:
/** @type {Array<{ instancePath: string; message: string }>} */ ([]),
isValid: true,
}

if (
!validate(doc) ||
!['csaf_withdrawn', 'csaf_superseded'].includes(doc.document.category)
)
return ctx

if (doc.product_tree) {
ctx.isValid = false
ctx.errors.push({
instancePath: `/product_tree`,
message:
'the product_tree is not allowed in the specified document category',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'the product_tree is not allowed in the specified document category',
'must not exist in the specified document category',

})
}

return ctx
}
26 changes: 26 additions & 0 deletions tests/csaf_2_1/mandatoryTest_6_1_27_15.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import assert from 'node:assert/strict'
import { mandatoryTest_6_1_27_15 } from '../../csaf_2_1/mandatoryTests/mandatoryTest_6_1_27_15.js'

describe('mandatoryTest_6_1_27_15', function () {
it('only runs on documents matching the input schema', function () {
assert.equal(
mandatoryTest_6_1_27_15({
document: 'invalid json',
product_tree: [],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't that always validate as the check goes against an object, not an array?

}).isValid,
true
)
})

it('only runs on csaf_withdrawn and csaf_superseded documents', function () {
assert.equal(
mandatoryTest_6_1_27_15({
document: {
category: 'unknown category',
},
product_tree: [],
}).isValid,
true
)
})
})
1 change: 0 additions & 1 deletion tests/csaf_2_1/oasis.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ const excluded = [
'6.1.27.12',
'6.1.27.13',
'6.1.27.14',
'6.1.27.15',
'6.1.27.16',
'6.1.27.17',
'6.1.27.18',
Expand Down