@@ -729,6 +729,393 @@ public void WriteCreatorKpiDataToConsole_WithZeroValues_LogsDataSuccessfully()
729729 Assert . DoesNotThrow ( ( ) => PackageUploadHelper . WriteCreatorKpiDataToConsole ( uploaderKpiData ) ) ;
730730 }
731731
732+ #region SourceRepoFoundToUploadArtifactory Tests - Using IncrementCountersBasedOnPackageType
733+
734+ [ Test ]
735+ public void IncrementCountersBasedOnPackageType_WhenClearedThirdPartySuccess_IncrementsPackagesUploadedToJfrog ( )
736+ {
737+ // Arrange
738+ var uploaderKpiData = new UploaderKpiData ( ) ;
739+ var packageType = PackageType . ClearedThirdParty ;
740+ bool isSuccess = true ;
741+
742+ // Use reflection to call private method
743+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "IncrementCountersBasedOnPackageType" ,
744+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
745+
746+ // Act
747+ methodInfo . Invoke ( null , new object [ ] { uploaderKpiData , packageType , isSuccess } ) ;
748+
749+ // Assert
750+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesUploadedToJfrog ) ;
751+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesNotUploadedToJfrog ) ;
752+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesNotUploadedDueToError ) ;
753+ }
754+
755+ [ Test ]
756+ public async Task SourceRepoFoundToUploadArtifactory_WhenPackageNotFound_SetsWarningCodeAndIncrementsFailureCounters ( )
757+ {
758+ // Arrange
759+ var packageType = PackageType . ClearedThirdParty ;
760+ var uploaderKpiData = new UploaderKpiData ( ) ;
761+ var item = new ComponentsToArtifactory
762+ {
763+ Name = "missing-package" ,
764+ Version = "2.0.0" ,
765+ ComponentType = "NUGET" ,
766+ PackageType = PackageType . ClearedThirdParty ,
767+ DryRun = false ,
768+ SrcRepoName = "src-repo" ,
769+ DestRepoName = "dest-repo" ,
770+ JfrogApi = "https://test-api.com" ,
771+ Token = "test-token"
772+ } ;
773+ int timeout = 5000 ;
774+ var displayPackagesInfo = new DisplayPackagesInfo
775+ {
776+ JfrogFoundPackagesNuget = new List < ComponentsToArtifactory > ( ) ,
777+ JfrogNotFoundPackagesNuget = new List < ComponentsToArtifactory > ( )
778+ } ;
779+
780+ // Mock services
781+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
782+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
783+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
784+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
785+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
786+
787+ // Use reflection to get private method
788+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
789+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
790+
791+ // Act
792+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
793+ await task ;
794+
795+ // Assert
796+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesUploadedToJfrog ) ;
797+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesNotUploadedToJfrog ) ;
798+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesNotUploadedDueToError ) ;
799+ Assert . IsNull ( item . DestRepoName ) ;
800+ }
801+
802+ [ Test ]
803+ public async Task SourceRepoFoundToUploadArtifactory_WhenErrorInUpload_IncrementsFailureCountersAndLogsError ( )
804+ {
805+ // Arrange
806+ var packageType = PackageType . Internal ;
807+ var uploaderKpiData = new UploaderKpiData ( ) ;
808+ var item = new ComponentsToArtifactory
809+ {
810+ Name = "error-package" ,
811+ Version = "3.0.0" ,
812+ ComponentType = "MAVEN" ,
813+ PackageType = PackageType . Internal ,
814+ DryRun = false ,
815+ SrcRepoName = "src-repo" ,
816+ DestRepoName = "dest-repo" ,
817+ JfrogApi = "https://test-api.com" ,
818+ Token = "test-token"
819+ } ;
820+ int timeout = 5000 ;
821+ var displayPackagesInfo = new DisplayPackagesInfo
822+ {
823+ JfrogFoundPackagesMaven = new List < ComponentsToArtifactory > ( ) ,
824+ JfrogNotFoundPackagesMaven = new List < ComponentsToArtifactory > ( )
825+ } ;
826+
827+ // Mock services
828+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
829+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
830+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
831+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
832+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
833+
834+ // Use reflection to get private method
835+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
836+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
837+
838+ // Act
839+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
840+ await task ;
841+
842+ // Assert
843+ Assert . AreEqual ( 0 , uploaderKpiData . InternalPackagesUploaded ) ;
844+ Assert . AreEqual ( 1 , uploaderKpiData . InternalPackagesNotUploadedToJfrog ) ;
845+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesNotUploadedDueToError ) ;
846+ Assert . IsNull ( item . DestRepoName ) ;
847+ }
848+
849+ [ Test ]
850+ public async Task SourceRepoFoundToUploadArtifactory_WhenDevelopmentPackageSuccessful_IncrementsDevCounters ( )
851+ {
852+ // Arrange
853+ var packageType = PackageType . Development ;
854+ var uploaderKpiData = new UploaderKpiData ( ) ;
855+ var item = new ComponentsToArtifactory
856+ {
857+ Name = "dev-package" ,
858+ Version = "1.0.0-dev" ,
859+ ComponentType = "POETRY" ,
860+ PackageType = PackageType . Development ,
861+ DryRun = false ,
862+ SrcRepoName = "src-repo" ,
863+ DestRepoName = "dev-repo" ,
864+ JfrogApi = "https://test-api.com" ,
865+ Token = "test-token"
866+ } ;
867+ int timeout = 5000 ;
868+ var displayPackagesInfo = new DisplayPackagesInfo
869+ {
870+ JfrogFoundPackagesPython = new List < ComponentsToArtifactory > ( ) ,
871+ JfrogNotFoundPackagesPython = new List < ComponentsToArtifactory > ( )
872+ } ;
873+
874+ // Mock services
875+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
876+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
877+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
878+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
879+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
880+
881+ // Use reflection to get private method
882+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
883+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
884+
885+ // Act
886+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
887+ await task ;
888+
889+ // Assert
890+ Assert . AreEqual ( 1 , uploaderKpiData . DevPackagesUploaded ) ;
891+ Assert . AreEqual ( 0 , uploaderKpiData . DevPackagesNotUploadedToJfrog ) ;
892+ }
893+
894+ [ Test ]
895+ public async Task SourceRepoFoundToUploadArtifactory_WhenDevelopmentPackageFails_IncrementsDevFailureCounters ( )
896+ {
897+ // Arrange
898+ var packageType = PackageType . Development ;
899+ var uploaderKpiData = new UploaderKpiData ( ) ;
900+ var item = new ComponentsToArtifactory
901+ {
902+ Name = "dev-package-fail" ,
903+ Version = "2.0.0-dev" ,
904+ ComponentType = "CONAN" ,
905+ PackageType = PackageType . Development ,
906+ DryRun = false ,
907+ SrcRepoName = "src-repo" ,
908+ DestRepoName = "dev-repo" ,
909+ JfrogApi = "https://test-api.com" ,
910+ Token = "test-token"
911+ } ;
912+ int timeout = 5000 ;
913+ var displayPackagesInfo = new DisplayPackagesInfo
914+ {
915+ JfrogFoundPackagesConan = new List < ComponentsToArtifactory > ( ) ,
916+ JfrogNotFoundPackagesConan = new List < ComponentsToArtifactory > ( )
917+ } ;
918+
919+ // Mock services
920+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
921+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
922+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
923+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
924+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
925+
926+ // Use reflection to get private method
927+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
928+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
929+
930+ // Act
931+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
932+ await task ;
933+
934+ // Assert
935+ Assert . AreEqual ( 0 , uploaderKpiData . DevPackagesUploaded ) ;
936+ Assert . AreEqual ( 1 , uploaderKpiData . DevPackagesNotUploadedToJfrog ) ;
937+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesNotUploadedDueToError ) ;
938+ }
939+
940+ [ Test ]
941+ public async Task SourceRepoFoundToUploadArtifactory_WhenDryRunMode_DoesNotIncrementSuccessCounters ( )
942+ {
943+ // Arrange
944+ var packageType = PackageType . ClearedThirdParty ;
945+ var uploaderKpiData = new UploaderKpiData ( ) ;
946+ var item = new ComponentsToArtifactory
947+ {
948+ Name = "dryrun-package" ,
949+ Version = "1.0.0" ,
950+ ComponentType = "DEBIAN" ,
951+ PackageType = PackageType . ClearedThirdParty ,
952+ DryRun = true ,
953+ SrcRepoName = "src-repo" ,
954+ DestRepoName = "dest-repo" ,
955+ JfrogApi = "https://test-api.com" ,
956+ Token = "test-token"
957+ } ;
958+ int timeout = 5000 ;
959+ var displayPackagesInfo = new DisplayPackagesInfo
960+ {
961+ JfrogFoundPackagesDebian = new List < ComponentsToArtifactory > ( ) ,
962+ JfrogNotFoundPackagesDebian = new List < ComponentsToArtifactory > ( )
963+ } ;
964+
965+ // Mock services
966+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
967+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
968+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
969+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
970+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
971+
972+ // Use reflection to get private method
973+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
974+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
975+
976+ // Act
977+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
978+ await task ;
979+
980+ // Assert - No counters should be incremented in dry run mode with success
981+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesUploadedToJfrog ) ;
982+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesNotUploadedToJfrog ) ;
983+ }
984+
985+ [ Test ]
986+ public async Task SourceRepoFoundToUploadArtifactory_WithCopyOperation_SetsCorrectOperationType ( )
987+ {
988+ // Arrange
989+ var packageType = PackageType . ClearedThirdParty ;
990+ var uploaderKpiData = new UploaderKpiData ( ) ;
991+ var item = new ComponentsToArtifactory
992+ {
993+ Name = "copy-package" ,
994+ Version = "1.0.0" ,
995+ ComponentType = "CARGO" ,
996+ PackageType = PackageType . ClearedThirdParty , // Should result in copy operation
997+ DryRun = false ,
998+ SrcRepoName = "src-repo" ,
999+ DestRepoName = "dest-repo" ,
1000+ JfrogApi = "https://test-api.com" ,
1001+ Token = "test-token"
1002+ } ;
1003+ int timeout = 5000 ;
1004+ var displayPackagesInfo = new DisplayPackagesInfo
1005+ {
1006+ JfrogFoundPackagesCargo = new List < ComponentsToArtifactory > ( ) ,
1007+ JfrogNotFoundPackagesCargo = new List < ComponentsToArtifactory > ( )
1008+ } ;
1009+
1010+ // Mock services
1011+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
1012+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
1013+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
1014+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
1015+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
1016+
1017+ // Use reflection to get private method
1018+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
1019+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
1020+
1021+ // Act
1022+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
1023+ await task ;
1024+
1025+ // Assert
1026+ Assert . AreEqual ( 1 , uploaderKpiData . PackagesUploadedToJfrog ) ;
1027+ }
1028+
1029+ [ Test ]
1030+ public async Task SourceRepoFoundToUploadArtifactory_WithMoveOperation_InternalPackage ( )
1031+ {
1032+ // Arrange
1033+ var packageType = PackageType . Internal ;
1034+ var uploaderKpiData = new UploaderKpiData ( ) ;
1035+ var item = new ComponentsToArtifactory
1036+ {
1037+ Name = "internal-package" ,
1038+ Version = "1.0.0" ,
1039+ ComponentType = "CHOCO" ,
1040+ PackageType = PackageType . Internal , // Should result in move operation
1041+ DryRun = false ,
1042+ SrcRepoName = "src-repo" ,
1043+ DestRepoName = "internal-repo" ,
1044+ JfrogApi = "https://test-api.com" ,
1045+ Token = "test-token"
1046+ } ;
1047+ int timeout = 5000 ;
1048+ var displayPackagesInfo = new DisplayPackagesInfo
1049+ {
1050+ JfrogFoundPackagesChoco = new List < ComponentsToArtifactory > ( ) ,
1051+ JfrogNotFoundPackagesChoco = new List < ComponentsToArtifactory > ( )
1052+ } ;
1053+
1054+ // Mock services
1055+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
1056+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
1057+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
1058+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
1059+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
1060+
1061+ // Use reflection to get private method
1062+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
1063+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
1064+
1065+ // Act
1066+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
1067+ await task ;
1068+
1069+ // Assert
1070+ Assert . AreEqual ( 1 , uploaderKpiData . InternalPackagesUploaded ) ;
1071+ Assert . AreEqual ( 0 , uploaderKpiData . InternalPackagesNotUploadedToJfrog ) ;
1072+ }
1073+
1074+ [ Test ]
1075+ public async Task SourceRepoFoundToUploadArtifactory_WhenResponseIsNotOkOrKnownError_DoesNothing ( )
1076+ {
1077+ // Arrange
1078+ var packageType = PackageType . ClearedThirdParty ;
1079+ var uploaderKpiData = new UploaderKpiData ( ) ;
1080+ var item = new ComponentsToArtifactory
1081+ {
1082+ Name = "unknown-error-package" ,
1083+ Version = "1.0.0" ,
1084+ ComponentType = "NPM" ,
1085+ PackageType = PackageType . ClearedThirdParty ,
1086+ DryRun = false ,
1087+ SrcRepoName = "src-repo" ,
1088+ DestRepoName = "dest-repo" ,
1089+ JfrogApi = "https://test-api.com" ,
1090+ Token = "test-token"
1091+ } ;
1092+ int timeout = 5000 ;
1093+ var displayPackagesInfo = new DisplayPackagesInfo
1094+ {
1095+ JfrogFoundPackagesNpm = new List < ComponentsToArtifactory > ( ) ,
1096+ JfrogNotFoundPackagesNpm = new List < ComponentsToArtifactory > ( )
1097+ } ;
1098+
1099+ // Mock services
1100+ var mockJFrogService = new Mock < IJFrogService > ( ) ;
1101+ var mockJFrogApiComm = new Mock < IJFrogApiCommunication > ( ) ;
1102+ PackageUploadHelper . JFrogService = mockJFrogService . Object ;
1103+ ArtifactoryUploader . ArtifactoryUploader . JFrogService = mockJFrogService . Object ;
1104+ ArtifactoryUploader . ArtifactoryUploader . JFrogApiCommInstance = mockJFrogApiComm . Object ;
1105+
1106+ // Use reflection to get private method
1107+ var methodInfo = typeof ( PackageUploadHelper ) . GetMethod ( "SourceRepoFoundToUploadArtifactory" ,
1108+ System . Reflection . BindingFlags . NonPublic | System . Reflection . BindingFlags . Static ) ;
1109+
1110+ // Act
1111+ var task = ( Task ) methodInfo . Invoke ( null , new object [ ] { packageType , uploaderKpiData , item , timeout , displayPackagesInfo } ) ;
1112+ await task ;
1113+
1114+ // Assert - Counters should remain at 0 for unknown errors (else branch does nothing)
1115+ Assert . AreEqual ( 0 , uploaderKpiData . PackagesUploadedToJfrog ) ;
1116+ }
1117+
1118+ #endregion
7321119
7331120 }
7341121}
0 commit comments