@@ -5341,6 +5341,63 @@ func TestArtifactorySearchProps(t *testing.T) {
53415341 cleanArtifactoryTest ()
53425342}
53435343
5344+ // Test that the --include flag works correctly with spec files
5345+ func TestArtifactorySearchIncludeWithSpec (t * testing.T ) {
5346+ initArtifactoryTest (t , "" )
5347+
5348+ // Upload files
5349+ specFile , err := tests .CreateSpec (tests .SplitUploadSpecA )
5350+ assert .NoError (t , err )
5351+ runRt (t , "upload" , "--spec=" + specFile , "--recursive" , "--flat=false" )
5352+
5353+ // Test 1: Search with spec WITHOUT --include flag (should return all fields)
5354+ searchSpecBuilder := spec .NewBuilder ().Pattern (tests .RtRepo1 + "/*" ).Recursive (true )
5355+ searchCmd := generic .NewSearchCommand ()
5356+ searchCmd .SetServerDetails (serverDetails ).SetSpec (searchSpecBuilder .BuildSpec ())
5357+ reader , err := searchCmd .Search ()
5358+ assert .NoError (t , err )
5359+
5360+ foundWithAllFields := false
5361+ for resultItem := new (utils.SearchResult ); reader .NextRecord (resultItem ) == nil ; resultItem = new (utils.SearchResult ) {
5362+ // Check that we have all default fields (type, size, sha1, etc.)
5363+ if resultItem .Type != "" && resultItem .Size > 0 && resultItem .Sha1 != "" {
5364+ foundWithAllFields = true
5365+ break
5366+ }
5367+ }
5368+ assert .True (t , foundWithAllFields , "Search without --include should return all fields" )
5369+ readerCloseAndAssert (t , reader )
5370+
5371+ // Test 2: Search with spec WITH --include flag using spec builder (simulating CLI flag)
5372+ searchSpecBuilder = spec .NewBuilder ().Pattern (tests .RtRepo1 + "/*" ).Recursive (true ).Include ([]string {"size" , "created" })
5373+ searchCmd = generic .NewSearchCommand ()
5374+ searchCmd .SetServerDetails (serverDetails ).SetSpec (searchSpecBuilder .BuildSpec ())
5375+ reader , err = searchCmd .Search ()
5376+ assert .NoError (t , err )
5377+
5378+ // Verify limited fields are returned
5379+ var resultItems []utils.SearchResult
5380+ readerNoDate , err := utils .SearchResultNoDate (reader )
5381+ assert .NoError (t , err )
5382+ for resultItem := new (utils.SearchResult ); readerNoDate .NextRecord (resultItem ) == nil ; resultItem = new (utils.SearchResult ) {
5383+ resultItems = append (resultItems , * resultItem )
5384+ // Verify that size and created are present (when include is used)
5385+ // Note: path, name, repo are always included as base fields
5386+ assert .NotEmpty (t , resultItem .Path , "Path should always be present" )
5387+ // Check that we have the requested field
5388+ if resultItem .Size > 0 {
5389+ // Size was requested, should be present
5390+ assert .Greater (t , resultItem .Size , int64 (0 ), "Size should be present when included" )
5391+ }
5392+ }
5393+ assert .Greater (t , len (resultItems ), 0 , "Should find at least one artifact" )
5394+ readerGetErrorAndAssert (t , readerNoDate )
5395+ readerCloseAndAssert (t , readerNoDate )
5396+
5397+ // Cleanup
5398+ cleanArtifactoryTest ()
5399+ }
5400+
53445401// Remove not to be deleted dirs from delete command from path to delete.
53455402func TestArtifactoryDeleteExcludeProps (t * testing.T ) {
53465403 initArtifactoryTest (t , "" )
0 commit comments