@@ -18,6 +18,7 @@ import (
1818 "github.com/jfrog/jfrog-cli-core/v2/common/spec"
1919 "github.com/jfrog/jfrog-client-go/utils/log"
2020
21+ rtBuildInfo "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/buildinfo"
2122 "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic"
2223 "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
2324 "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
@@ -267,6 +268,17 @@ func TestBuildPublishDryRun(t *testing.T) {
267268 buildInfo := publishedBuildInfo .BuildInfo
268269 validateBuildInfo (buildInfo , t , 0 , 9 , tests .RtBuildName1 , buildinfo .Generic )
269270
271+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
272+ // Verify build publish info overwrite flag with dryrun
273+ for i := 0 ; i < 2 ; i ++ {
274+ runRt (t , "bp" , tests .RtBuildName1 , buildNumber )
275+ }
276+ existingBuildInfo , found , err := tests .GetBuildRuns (serverDetails , tests .RtBuildName1 )
277+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , existingBuildInfo , 2 , found , buildNumber , err )
278+ runRt (t , "bp" , tests .RtBuildName1 , buildNumber , "--dry-run=true" , "--overwrite=true" )
279+ // Expect no changes in the build info since it's a dry run
280+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , existingBuildInfo , 2 , found , buildNumber , err )
281+
270282 inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
271283 cleanArtifactoryTest ()
272284}
@@ -517,7 +529,9 @@ func testArtifactoryPublishWithoutBuildUrl(t *testing.T, buildName, buildNumber
517529func TestArtifactoryPublishBuildInfoBuildUrl (t * testing.T ) {
518530 initArtifactoryTest (t , "" )
519531 buildNumber := "11"
532+ // jfrog-ignore - false positive not a real URL.
520533 buildUrl := "http://example.ci.com"
534+ // jfrog-ignore - false positive not a real URL.
521535 setEnvCallBack := clientTestUtils .SetEnvWithCallbackAndAssert (t , cliutils .BuildUrl , "http://override-me.ci.com" )
522536 defer setEnvCallBack ()
523537 inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
@@ -538,6 +552,7 @@ func TestArtifactoryPublishBuildInfoBuildUrl(t *testing.T) {
538552func TestArtifactoryPublishBuildInfoBuildUrlFromEnv (t * testing.T ) {
539553 initArtifactoryTest (t , "" )
540554 buildNumber := "11"
555+ // jfrog-ignore - false positive not a real URL.
541556 buildUrl := "http://example-env.ci.com"
542557 inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , tests .RtBuildName1 , artHttpDetails )
543558 setEnvCallBack := clientTestUtils .SetEnvWithCallbackAndAssert (t , cliutils .BuildUrl , buildUrl )
@@ -658,6 +673,80 @@ func TestBuildAddGitEnvBuildNameAndNumber(t *testing.T) {
658673 testBuildAddGit (t , true )
659674}
660675
676+ func TestBuildPublishWithOverwrite (t * testing.T ) {
677+ initArtifactoryTest (t , "" )
678+ buildName := tests .RtBuildName1
679+ buildNumber := "1"
680+ preReleaseBuildNumber := "1-rc"
681+ defaultNumberOfBuilds := 5
682+
683+ // Clean old build tests if exists
684+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
685+
686+ // Publish build info without overwrite flag
687+ for i := 0 ; i < defaultNumberOfBuilds ; i ++ {
688+ runRt (t , "bp" , buildName , buildNumber )
689+ }
690+ for i := 0 ; i < 2 ; i ++ {
691+ runRt (t , "bp" , buildName , preReleaseBuildNumber )
692+ }
693+ publishedBuildInfo , found , err := tests .GetBuildRuns (serverDetails , buildName )
694+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
695+ // Verify if total of 7 build info's are available
696+ assert .Equal (t , 7 , len (publishedBuildInfo .BuildsNumbers ), "expected five build info's to be available" )
697+
698+ buildNumberFrequency := rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
699+ // Verify if 5 build info's are available for given build number and 2 for pre-release build number
700+ assert .Equal (t , defaultNumberOfBuilds , buildNumberFrequency [buildNumber ])
701+ assert .Equal (t , 2 , buildNumberFrequency [preReleaseBuildNumber ])
702+
703+ // Publish build info with overwrite flag
704+ runRt (t , "bp" , buildName , buildNumber , "--overwrite=true" )
705+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
706+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
707+ buildNumbersFrequencyAfterOverwrite := rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
708+ // Since overwrite is ran for buildNumber verify if only one build info is available for given build number
709+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [buildNumber ])
710+ // Since overwrite is ran for buildNumber verify no change for preReleaseBuildNumber
711+ assert .Equal (t , 2 , buildNumbersFrequencyAfterOverwrite [preReleaseBuildNumber ])
712+
713+ // Verify that only one build info is available for given build number with overwrite
714+ runRt (t , "bp" , buildName , preReleaseBuildNumber , "--overwrite=true" )
715+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
716+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
717+ buildNumbersFrequencyAfterOverwrite = rtBuildInfo .CalculateBuildNumberFrequency (publishedBuildInfo )
718+ // Since overwrite is ran for preReleaseBuildNumber verify no change for buildNumber
719+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [buildNumber ], "expected only one build info to be available" )
720+ // Since overwrite is ran for preReleaseBuildNumber verify if only one build info is available for given preReleaseBuildNumber
721+ assert .Equal (t , 1 , buildNumbersFrequencyAfterOverwrite [preReleaseBuildNumber ])
722+
723+ // Delete existing build info
724+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
725+
726+ // Run build-publish with overwrite flag and build should be published
727+ runRt (t , "bp" , buildName , buildNumber , "--overwrite=true" )
728+ publishedBuildInfo , found , err = tests .GetBuildRuns (serverDetails , buildName )
729+ // Verify even though overwrite is used when no build infos are available build info should be published
730+ assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t , publishedBuildInfo , 1 , found , buildNumber , err )
731+
732+ // Cleanup
733+ inttestutils .DeleteBuild (serverDetails .ArtifactoryUrl , buildName , artHttpDetails )
734+ cleanArtifactoryTest ()
735+ }
736+
737+ func assertBuildNumberOccurrencesForGivenBuildNameAndNumber (t * testing.T , existingBuildInfo * buildinfo.BuildRuns ,
738+ expectedOccurrences int , found bool , buildNumber string , err error ) {
739+
740+ buildNumbersFrequencyAfterOverwrite := rtBuildInfo .CalculateBuildNumberFrequency (existingBuildInfo )
741+ assertNoErrorAndAssertBuildInfoFound (t , err , found )
742+ assert .Equal (t , expectedOccurrences , buildNumbersFrequencyAfterOverwrite [buildNumber ], "expected only one build info to be available" )
743+ }
744+
745+ func assertNoErrorAndAssertBuildInfoFound (t * testing.T , err error , found bool ) {
746+ assert .NoError (t , err )
747+ assert .True (t , found , "build info was expected to be found" )
748+ }
749+
661750func testBuildAddGit (t * testing.T , useEnvBuildNameAndNumber bool ) {
662751 initArtifactoryTest (t , "" )
663752 gitCollectCliRunner := coretests .NewJfrogCli (execMain , "jfrog rt" , "" )
0 commit comments