@@ -1675,6 +1675,25 @@ func Test_GetRefSources(t *testing.T) {
16751675 require .Error (t , err )
16761676 assert .Empty (t , refSources )
16771677 })
1678+
1679+ t .Run ("single source with ref populates refSources" , func (t * testing.T ) {
1680+ argoSpec := getMultiSourceAppSpec (argoappv1.ApplicationSources {
1681+ {RepoURL : "file://" + repoPath , TargetRevision : "HEAD" , Ref : "gitops" },
1682+ })
1683+
1684+ refSources , err := GetRefSources (t .Context (), argoSpec .Sources , argoSpec .Project , func (_ context.Context , _ string , _ string ) (* argoappv1.Repository , error ) {
1685+ return repo , nil
1686+ }, []string {})
1687+
1688+ require .NoError (t , err )
1689+ expected := argoappv1.RefTargetRevisionMapping {
1690+ "$gitops" : & argoappv1.RefTarget {
1691+ Repo : * repo ,
1692+ TargetRevision : "HEAD" ,
1693+ },
1694+ }
1695+ assert .Equal (t , expected , refSources )
1696+ })
16781697}
16791698
16801699func TestValidatePermissionsMultipleSources (t * testing.T ) {
@@ -2304,3 +2323,31 @@ func Test_GetSyncedRefSources(t *testing.T) {
23042323 })
23052324 }
23062325}
2326+
2327+ // Covers https://github.com/argoproj/argo-cd/issues/27759:
2328+ // spec.sources with one element still sets HasMultipleSources(); GetRefSources must populate refSources so
2329+ // GetSyncedRefSources does not dereference a missing map entry.
2330+ func Test_GetRefSourcesAndSyncedRefSources_SingleSourceWithRef (t * testing.T ) {
2331+ repoPath , err := filepath .Abs ("./../.." )
2332+ require .NoError (t , err )
2333+ repo := & argoappv1.Repository {Repo : "file://" + repoPath }
2334+ sources := argoappv1.ApplicationSources {
2335+ {RepoURL : "file://" + repoPath , TargetRevision : "HEAD" , Ref : "gitops" },
2336+ }
2337+
2338+ refSources , err := GetRefSources (t .Context (), sources , "" , func (_ context.Context , _ string , _ string ) (* argoappv1.Repository , error ) {
2339+ return repo , nil
2340+ }, []string {})
2341+ require .NoError (t , err )
2342+
2343+ syncedRevisions := []string {"rev" }
2344+ synced := GetSyncedRefSources (refSources , sources , syncedRevisions )
2345+
2346+ expected := argoappv1.RefTargetRevisionMapping {
2347+ "$gitops" : & argoappv1.RefTarget {
2348+ Repo : * repo ,
2349+ TargetRevision : "rev" ,
2350+ },
2351+ }
2352+ assert .Equal (t , expected , synced )
2353+ }
0 commit comments