@@ -783,6 +783,144 @@ public async Task TestPnpmDetector_V9_GoodLockVersion_SkipsFileAndLinkDependenci
783
783
parentComponent => parentComponent . Name == "sampleDependency" ) ;
784
784
}
785
785
786
+ [ TestMethod ]
787
+ public async Task TestPnpmDetector_V9_GoodLockVersion_FileAndLinkDependenciesAreNotRegistered ( )
788
+ {
789
+ var yamlFile = @"
790
+ lockfileVersion: '9.0'
791
+ settings:
792
+ autoInstallPeers: true
793
+ excludeLinksFromLockfile: false
794
+ importers:
795
+ .:
796
+ dependencies:
797
+ sampleDependency:
798
+ specifier: ^1.1.1
799
+ version: 1.1.1
800
+ sampleFileDependency:
801
+ specifier: file:../test
802
+ version: file:../test
803
+ SampleLinkDependency:
804
+ specifier: workspace:*
805
+ version: link:SampleLinkDependency
806
+ packages:
807
+
808
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
809
+
810
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
811
+ engines: {node: '>= 0.8'}
812
+
813
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
814
+ engines: {node: '>=0.4.0'}
815
+
816
+ snapshots:
817
+
818
+ dependencies:
819
+ sampleIndirectDependency: 3.3.3
820
+ sampleIndirectDependency2: 2.2.2
821
+ 'file://../sampleFile': 'link:../\\'
822
+
823
+
824
+ sampleFileDependency@file:../test': {}
825
+ " ;
826
+
827
+ var ( scanResult , componentRecorder ) = await this . DetectorTestUtility
828
+ . WithFile ( "pnpm-lock.yaml" , yamlFile )
829
+ . ExecuteDetectorAsync ( ) ;
830
+
831
+ scanResult . ResultCode . Should ( ) . Be ( ProcessingResultCode . Success ) ;
832
+
833
+ var detectedComponents = componentRecorder . GetDetectedComponents ( ) ;
834
+ detectedComponents . Should ( ) . HaveCount ( 3 ) ;
835
+ var npmComponents = detectedComponents . Select ( x => new { Component = x . Component as NpmComponent , DetectedComponent = x } ) ;
836
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleDependency" && x . Component . Version == "1.1.1" ) ;
837
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleIndirectDependency2" && x . Component . Version == "2.2.2" ) ;
838
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleIndirectDependency" && x . Component . Version == "3.3.3" ) ;
839
+
840
+ var noDevDependencyComponent = npmComponents . First ( x => x . Component . Name == "sampleDependency" ) ;
841
+ var indirectDependencyComponent2 = npmComponents . First ( x => x . Component . Name == "sampleIndirectDependency2" ) ;
842
+ var indirectDependencyComponent = npmComponents . First ( x => x . Component . Name == "sampleIndirectDependency" ) ;
843
+
844
+ componentRecorder . GetEffectiveDevDependencyValue ( noDevDependencyComponent . Component . Id ) . Should ( ) . BeFalse ( ) ;
845
+ componentRecorder . GetEffectiveDevDependencyValue ( indirectDependencyComponent2 . Component . Id ) . Should ( ) . BeFalse ( ) ;
846
+ componentRecorder . GetEffectiveDevDependencyValue ( indirectDependencyComponent . Component . Id ) . Should ( ) . BeFalse ( ) ;
847
+ componentRecorder . AssertAllExplicitlyReferencedComponents < NpmComponent > (
848
+ indirectDependencyComponent . Component . Id ,
849
+ parentComponent => parentComponent . Name == "sampleDependency" ) ;
850
+ componentRecorder . AssertAllExplicitlyReferencedComponents < NpmComponent > (
851
+ indirectDependencyComponent2 . Component . Id ,
852
+ parentComponent => parentComponent . Name == "sampleDependency" ) ;
853
+ }
854
+
855
+ [ TestMethod ]
856
+ public async Task TestPnpmDetector_V9_GoodLockVersion_HttpDependenciesAreNotRegistered ( )
857
+ {
858
+ var yamlFile = @"
859
+ lockfileVersion: '9.0'
860
+ settings:
861
+ autoInstallPeers: true
862
+ excludeLinksFromLockfile: false
863
+ importers:
864
+ .:
865
+ dependencies:
866
+ sampleDependency:
867
+ specifier: ^1.1.1
868
+ version: 1.1.1
869
+ sampleHttpDependency:
870
+ specifier: https://samplePackage/tar.gz/32f550d3b3bdb1b781aabe100683311cd982c98e
871
+ version: sample@https://samplePackage/tar.gz/32f550d3b3bdb1b781aabe100683311cd982c98e
872
+ SampleLinkDependency:
873
+ specifier: workspace:*
874
+ version: link:SampleLinkDependency
875
+ packages:
876
+
877
+ resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
878
+
879
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
880
+ engines: {node: '>= 0.8'}
881
+
882
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
883
+ engines: {node: '>=0.4.0'}
884
+
885
+ snapshots:
886
+
887
+ dependencies:
888
+ sampleIndirectDependency: 3.3.3
889
+ sampleIndirectDependency2: 2.2.2
890
+ 'file://../sampleFile': 'link:../\\'
891
+
892
+
893
+ sampleHttpDependency@https://samplePackage/tar.gz/32f550d3b3bdb1b781aabe100683311cd982c98e': {}
894
+ " ;
895
+
896
+ var ( scanResult , componentRecorder ) = await this . DetectorTestUtility
897
+ . WithFile ( "pnpm-lock.yaml" , yamlFile )
898
+ . ExecuteDetectorAsync ( ) ;
899
+
900
+ scanResult . ResultCode . Should ( ) . Be ( ProcessingResultCode . Success ) ;
901
+
902
+ var detectedComponents = componentRecorder . GetDetectedComponents ( ) ;
903
+ detectedComponents . Should ( ) . HaveCount ( 3 ) ;
904
+ var npmComponents = detectedComponents . Select ( x => new { Component = x . Component as NpmComponent , DetectedComponent = x } ) ;
905
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleDependency" && x . Component . Version == "1.1.1" ) ;
906
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleIndirectDependency2" && x . Component . Version == "2.2.2" ) ;
907
+ npmComponents . Should ( ) . Contain ( x => x . Component . Name == "sampleIndirectDependency" && x . Component . Version == "3.3.3" ) ;
908
+
909
+ var noDevDependencyComponent = npmComponents . First ( x => x . Component . Name == "sampleDependency" ) ;
910
+ var indirectDependencyComponent2 = npmComponents . First ( x => x . Component . Name == "sampleIndirectDependency2" ) ;
911
+ var indirectDependencyComponent = npmComponents . First ( x => x . Component . Name == "sampleIndirectDependency" ) ;
912
+
913
+ componentRecorder . GetEffectiveDevDependencyValue ( noDevDependencyComponent . Component . Id ) . Should ( ) . BeFalse ( ) ;
914
+ componentRecorder . GetEffectiveDevDependencyValue ( indirectDependencyComponent2 . Component . Id ) . Should ( ) . BeFalse ( ) ;
915
+ componentRecorder . GetEffectiveDevDependencyValue ( indirectDependencyComponent . Component . Id ) . Should ( ) . BeFalse ( ) ;
916
+ componentRecorder . AssertAllExplicitlyReferencedComponents < NpmComponent > (
917
+ indirectDependencyComponent . Component . Id ,
918
+ parentComponent => parentComponent . Name == "sampleDependency" ) ;
919
+ componentRecorder . AssertAllExplicitlyReferencedComponents < NpmComponent > (
920
+ indirectDependencyComponent2 . Component . Id ,
921
+ parentComponent => parentComponent . Name == "sampleDependency" ) ;
922
+ }
923
+
786
924
[ TestMethod ]
787
925
public async Task TestPnpmDetector_V9_GoodLockVersion_MissingSnapshotsSuccess ( )
788
926
{
0 commit comments