@@ -58,4 +58,123 @@ public void ToSbomChecksum_NullChecksum_ReturnsNull()
5858 var sbomChecksum = spdxChecksum . ToSbomChecksum ( ) ;
5959 Assert . IsNull ( sbomChecksum , "ToSbomChecksum should return null when the input checksum is null." ) ;
6060 }
61+
62+ [ TestMethod ]
63+ public void ToPurl_EmptyExternalReferences_ReturnsNull ( )
64+ {
65+ var emptyExternalReferences = new List < ExternalReference > ( ) ;
66+ var result = emptyExternalReferences . ToPurl ( ) ;
67+ Assert . IsNull ( result , "ToPurl should return null when external references list is empty." ) ;
68+ }
69+
70+ [ TestMethod ]
71+ public void ToPurl_NullExternalReferences_ReturnsNull ( )
72+ {
73+ IList < ExternalReference > nullExternalReferences = null ;
74+ var result = nullExternalReferences . ToPurl ( ) ;
75+ Assert . IsNull ( result , "ToPurl should return null when external references list is null." ) ;
76+ }
77+
78+ [ TestMethod ]
79+ public void ToPurl_NoPackageManagerReferences_ReturnsNull ( )
80+ {
81+ var externalReferences = new List < ExternalReference >
82+ {
83+ new ExternalReference
84+ {
85+ ReferenceCategory = "SECURITY" ,
86+ Type = "cpe23Type" ,
87+ Locator = "cpe:2.3:a:antlr4_runtime_standard:antlr4_runtime_standard_.net:4.13.1:*:*:*:*:*:*:*"
88+ } ,
89+ new ExternalReference
90+ {
91+ ReferenceCategory = "OTHER" ,
92+ Type = "website" ,
93+ Locator = "https://example.com"
94+ }
95+ } ;
96+
97+ var result = externalReferences . ToPurl ( ) ;
98+ Assert . IsNull ( result , "ToPurl should return null when no PACKAGE-MANAGER references exist." ) ;
99+ }
100+
101+ [ TestMethod ]
102+ public void ToPurl_WithPackageManagerReference_ReturnsCorrectPurl ( )
103+ {
104+ var externalReferences = new List < ExternalReference >
105+ {
106+ new ExternalReference
107+ {
108+ ReferenceCategory = "SECURITY" ,
109+ Type = "cpe23Type" ,
110+ Locator = "cpe:2.3:a:antlr4_runtime_standard:antlr4_runtime_standard_.net:4.13.1:*:*:*:*:*:*:*"
111+ } ,
112+ new ExternalReference
113+ {
114+ ReferenceCategory = "PACKAGE-MANAGER" ,
115+ Type = "purl" ,
116+ Locator = "pkg:nuget/Antlr4.Runtime.Standard@4.13.1"
117+ }
118+ } ;
119+
120+ var result = externalReferences . ToPurl ( ) ;
121+ Assert . AreEqual ( "pkg:nuget/Antlr4.Runtime.Standard@4.13.1" , result , "ToPurl should return the package manager locator value." ) ;
122+ }
123+
124+ [ TestMethod ]
125+ public void ToPurl_WithUnderscoreInReferenceCategory_ReturnsCorrectPurl ( )
126+ {
127+ var externalReferences = new List < ExternalReference >
128+ {
129+ new ExternalReference
130+ {
131+ ReferenceCategory = "PACKAGE_MANAGER" , // Using underscore format that gets converted to hyphen
132+ Type = "purl" ,
133+ Locator = "pkg:npm/test-package@1.0.0"
134+ }
135+ } ;
136+
137+ var result = externalReferences . ToPurl ( ) ;
138+ Assert . AreEqual ( "pkg:npm/test-package@1.0.0" , result , "ToPurl should handle underscore to hyphen conversion correctly." ) ;
139+ }
140+
141+ [ TestMethod ]
142+ public void ToPurl_MultiplePackageManagerReferences_ReturnsFirst ( )
143+ {
144+ var externalReferences = new List < ExternalReference >
145+ {
146+ new ExternalReference
147+ {
148+ ReferenceCategory = "PACKAGE-MANAGER" ,
149+ Type = "purl" ,
150+ Locator = "pkg:nuget/FirstPackage@1.0.0"
151+ } ,
152+ new ExternalReference
153+ {
154+ ReferenceCategory = "PACKAGE-MANAGER" ,
155+ Type = "purl" ,
156+ Locator = "pkg:nuget/SecondPackage@2.0.0"
157+ }
158+ } ;
159+
160+ var result = externalReferences . ToPurl ( ) ;
161+ Assert . AreEqual ( "pkg:nuget/FirstPackage@1.0.0" , result , "ToPurl should return the first PACKAGE-MANAGER reference when multiple exist." ) ;
162+ }
163+
164+ [ TestMethod ]
165+ public void ToPurl_PackageManagerReferenceWithNullLocator_ReturnsNull ( )
166+ {
167+ var externalReferences = new List < ExternalReference >
168+ {
169+ new ExternalReference
170+ {
171+ ReferenceCategory = "PACKAGE-MANAGER" ,
172+ Type = "purl" ,
173+ Locator = null
174+ }
175+ } ;
176+
177+ var result = externalReferences . ToPurl ( ) ;
178+ Assert . IsNull ( result , "ToPurl should return null when package manager reference has null locator." ) ;
179+ }
61180}
0 commit comments