@@ -177,6 +177,54 @@ suite('testing the python-pyproject data provider', () => {
177177 } ) . timeout ( TIMEOUT )
178178 } )
179179
180+ suite ( 'poetry projects - modern dev dependencies excluded (TC-4096)' , ( ) => {
181+ test ( 'dev dependencies excluded from stack analysis' , async ( ) => {
182+ let expectedSbom = fs . readFileSync ( 'test/providers/tst_manifests/pyproject/poetry_dev_deps/expected_stack_sbom.json' ) . toString ( )
183+ expectedSbom = JSON . stringify ( JSON . parse ( expectedSbom ) )
184+ let result = await poetryProvider . provideStack ( 'test/providers/tst_manifests/pyproject/poetry_dev_deps/pyproject.toml' )
185+ expect ( result ) . to . deep . equal ( {
186+ ecosystem : 'pip' ,
187+ contentType : 'application/vnd.cyclonedx+json' ,
188+ content : expectedSbom
189+ } )
190+ } ) . timeout ( TIMEOUT )
191+
192+ test ( 'dev dependencies excluded from component analysis' , async ( ) => {
193+ let expectedSbom = fs . readFileSync ( 'test/providers/tst_manifests/pyproject/poetry_dev_deps/expected_component_sbom.json' ) . toString ( ) . trim ( )
194+ expectedSbom = JSON . stringify ( JSON . parse ( expectedSbom ) )
195+ let result = await poetryProvider . provideComponent ( 'test/providers/tst_manifests/pyproject/poetry_dev_deps/pyproject.toml' )
196+ expect ( result ) . to . deep . equal ( {
197+ ecosystem : 'pip' ,
198+ contentType : 'application/vnd.cyclonedx+json' ,
199+ content : expectedSbom
200+ } )
201+ } ) . timeout ( TIMEOUT )
202+ } )
203+
204+ suite ( 'poetry projects - legacy dev-dependencies excluded (TC-4096)' , ( ) => {
205+ test ( 'legacy dev dependencies excluded from stack analysis' , async ( ) => {
206+ let expectedSbom = fs . readFileSync ( 'test/providers/tst_manifests/pyproject/poetry_legacy_dev_deps/expected_stack_sbom.json' ) . toString ( )
207+ expectedSbom = JSON . stringify ( JSON . parse ( expectedSbom ) )
208+ let result = await poetryProvider . provideStack ( 'test/providers/tst_manifests/pyproject/poetry_legacy_dev_deps/pyproject.toml' )
209+ expect ( result ) . to . deep . equal ( {
210+ ecosystem : 'pip' ,
211+ contentType : 'application/vnd.cyclonedx+json' ,
212+ content : expectedSbom
213+ } )
214+ } ) . timeout ( TIMEOUT )
215+
216+ test ( 'legacy dev dependencies excluded from component analysis' , async ( ) => {
217+ let expectedSbom = fs . readFileSync ( 'test/providers/tst_manifests/pyproject/poetry_legacy_dev_deps/expected_component_sbom.json' ) . toString ( ) . trim ( )
218+ expectedSbom = JSON . stringify ( JSON . parse ( expectedSbom ) )
219+ let result = await poetryProvider . provideComponent ( 'test/providers/tst_manifests/pyproject/poetry_legacy_dev_deps/pyproject.toml' )
220+ expect ( result ) . to . deep . equal ( {
221+ ecosystem : 'pip' ,
222+ contentType : 'application/vnd.cyclonedx+json' ,
223+ content : expectedSbom
224+ } )
225+ } ) . timeout ( TIMEOUT )
226+ } )
227+
180228 suite ( 'poetry projects - poetry_only_deps manifest' , ( ) => {
181229 const fixtureDir = `${ MANIFESTS } /poetry_only_deps`
182230
0 commit comments