@@ -25,6 +25,7 @@ const { createComplexStructure } = require('../_data/models')
2525const { loadSerializeResult, writeSerializeResult } = require ( '../_data/serialize' )
2626
2727const {
28+ Models, Enums,
2829 Serialize : {
2930 XML : { Normalize : { Factory : XmlNormalizeFactory } } ,
3031 XmlSerializer
@@ -52,6 +53,7 @@ describe('Serialize.XmlSerialize', function () {
5253
5354 it ( 'serialize' , function ( ) {
5455 const serializer = new XmlSerializer ( normalizerFactory )
56+
5557 const serialized = serializer . serialize (
5658 this . bom , {
5759 sortLists : true ,
@@ -69,4 +71,56 @@ describe('Serialize.XmlSerialize', function () {
6971
7072 // TODO add more tests
7173 } ) )
74+
75+ describe ( 'make bom-refs unique' , ( ) => {
76+ it ( 'as expected' , ( ) => {
77+ const bom = new Models . Bom ( {
78+ metadata : new Models . Metadata ( {
79+ component : new Models . Component ( Enums . ComponentType . Library , 'root' , {
80+ bomRef : 'testing' ,
81+ components : new Models . ComponentRepository ( [
82+ new Models . Component ( Enums . ComponentType . Library , 'c2' , {
83+ bomRef : 'testing'
84+ } )
85+ ] )
86+ } )
87+ } ) ,
88+ components : new Models . ComponentRepository ( [
89+ new Models . Component ( Enums . ComponentType . Library , 'c1' , {
90+ bomRef : 'testing' ,
91+ components : new Models . ComponentRepository ( [
92+ new Models . Component ( Enums . ComponentType . Library , 'c2' , {
93+ bomRef : 'testing'
94+ } )
95+ ] )
96+ } )
97+ ] )
98+ } )
99+ const knownBomRefs = [
100+ bom . metadata . component . bomRef ,
101+ [ ...bom . metadata . component . components ] [ 0 ] . bomRef ,
102+ [ ...bom . components . values ( ) ] [ 0 ] . bomRef ,
103+ [ ...[ ...bom . components ] [ 0 ] . components ] [ 0 ] . bomRef
104+ ]
105+ const normalizedBomRefs = new Set ( /* will be filled on call */ )
106+ const bomNormalizer = {
107+ normalize : ( bom ) => {
108+ normalizedBomRefs . add ( bom . metadata . component . bomRef . value )
109+ normalizedBomRefs . add ( [ ...bom . metadata . component . components ] [ 0 ] . bomRef . value )
110+ normalizedBomRefs . add ( [ ...bom . components . values ( ) ] [ 0 ] . bomRef . value )
111+ normalizedBomRefs . add ( [ ...[ ...bom . components ] [ 0 ] . components ] [ 0 ] . bomRef . value )
112+ return { type : 'element' , name : 'dummy' }
113+ }
114+ }
115+ const normalizerFactory = { makeForBom : ( ) => bomNormalizer , spec : Spec1dot4 }
116+ const serializer = new XmlSerializer ( normalizerFactory )
117+
118+ serializer . serialize ( bom )
119+
120+ assert . strictEqual ( normalizedBomRefs . has ( 'testing' ) , true )
121+ assert . strictEqual ( normalizedBomRefs . size , 4 , 'not every value was unique' )
122+ // everything back to before - all have
123+ knownBomRefs . forEach ( ( { value } ) => assert . strictEqual ( value , 'testing' ) )
124+ } )
125+ } )
72126} )
0 commit comments