1- # SPDX-FileCopyrightText: 2024 SPDX contributors
1+ # SPDX-FileCopyrightText: 2024-2025 SPDX contributors
22# SPDX-FileType: SOURCE
33# SPDX-License-Identifier: Apache-2.0
44
@@ -429,6 +429,7 @@ def test_sbomchecker_output_html():
429429
430430 got = sbom .output_html ()
431431 expected = (
432+ "<div class='conformance-res'>\n "
432433 "<h2 class='conformance-res-title'>"
433434 "2021 NTIA SBOM Minimum Elements Conformance Results"
434435 "</h2>\n "
@@ -453,11 +454,66 @@ def test_sbomchecker_output_html():
453454 "<td class='conformance-res-tab-v'>True</td></tr>\n "
454455 "</tbody>\n "
455456 "</table>\n "
456- "<p class='conformance-missing-label'>"
457+ "</div>\n "
458+ "<div class='conformance-mis'>\n "
459+ "<p class='conformance-mis-label'>"
457460 "Missing required information in these components:</p>\n "
458- "<ul class='conformance-missing -list'>\n "
461+ "<ul class='conformance-mis -list'>\n "
459462 "<li>supplier (3): xyz, curl, openssl</li>\n "
460- "</ul>"
463+ "</ul>\n "
464+ "</div>"
465+ )
466+
467+ assert got == expected
468+
469+
470+ def test_sbomchecker_fsct3_output_html ():
471+ filepath = os .path .join (
472+ os .path .dirname (__file__ ), "data" , "other_tests" , "SPDXSBOMExample.spdx.yml"
473+ )
474+ sbom = sbom_checker .SbomChecker (filepath , compliance = "fsct3-min" )
475+
476+ got = sbom .output_html ()
477+ expected = (
478+ "<div class='conformance-res'>\n "
479+ "<h2 class='conformance-res-title'>"
480+ "2024 CISA Framing Software Component Transparency"
481+ " (minimum expectation) Conformance Results"
482+ "</h2>\n "
483+ "<h3 class='conformance-res-status'>Conformant: False</h3>\n "
484+ "<table class='conformance-res-tab'>\n "
485+ "<thead><tr><th>Requirement</th>"
486+ "<th>Conformant</th></tr></thead>\n "
487+ "<tbody>\n "
488+ "<tr><td class='conformance-res-tab-r'>All component names provided?</td>"
489+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
490+ "<tr><td class='conformance-res-tab-r'>All component versions provided?</td>"
491+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
492+ "<tr><td class='conformance-res-tab-r'>All component identifiers provided?</td>"
493+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
494+ "<tr><td class='conformance-res-tab-r'>All component suppliers provided?</td>"
495+ "<td class='conformance-res-tab-v'>False</td></tr>\n "
496+ "<tr><td class='conformance-res-tab-r'>All component concluded license provided?</td>"
497+ "<td class='conformance-res-tab-v'>False</td></tr>\n "
498+ "<tr><td class='conformance-res-tab-r'>All component copyright notice provided?</td>"
499+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
500+ "<tr><td class='conformance-res-tab-r'>SBOM author name provided?</td>"
501+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
502+ "<tr><td class='conformance-res-tab-r'>SBOM creation timestamp provided?</td>"
503+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
504+ "<tr><td class='conformance-res-tab-r'>Dependency relationships provided?</td>"
505+ "<td class='conformance-res-tab-v'>True</td></tr>\n "
506+ "</tbody>\n "
507+ "</table>\n "
508+ "</div>\n "
509+ "<div class='conformance-mis'>\n "
510+ "<p class='conformance-mis-label'>"
511+ "Missing required information in these components:</p>\n "
512+ "<ul class='conformance-mis-list'>\n "
513+ "<li>supplier (3): xyz, curl, openssl</li>\n "
514+ "<li>concluded_license (3): xyz, curl, openssl</li>\n "
515+ "</ul>\n "
516+ "</div>"
461517 )
462518
463519 assert got == expected
0 commit comments