@@ -203,9 +203,9 @@ func TestRunDependencyOrdering(t *testing.T) {
203203 // Mock fetcher that returns new versions for our test plugins
204204 // Cache keys are formatted as "github-owner-repository"
205205 fetcher := & mockFetcher {
206- versions : map [string ]string {
207- "github-test-base-plugin" : " v2.0.0" ,
208- "github-test-consumer-plugin" : " v2.0.0" ,
206+ versions : map [string ][] string {
207+ "github-test-base-plugin" : { "v1.0.0" , " v2.0.0"} ,
208+ "github-test-consumer-plugin" : { "v1.0.0" , " v2.0.0"} ,
209209 },
210210 }
211211
@@ -244,9 +244,9 @@ func TestRunUpdateFrequency(t *testing.T) {
244244 repository: base-plugin
245245`
246246 fetcher := & mockFetcher {
247- versions : map [string ]string {
248- "github-test-base-plugin" : " v2.0.0" ,
249- "github-test-consumer-plugin" : " v2.0.0" ,
247+ versions : map [string ][] string {
248+ "github-test-base-plugin" : { "v1.0.0" , " v2.0.0"} ,
249+ "github-test-consumer-plugin" : { "v1.0.0" , " v2.0.0"} ,
250250 },
251251 }
252252
@@ -294,16 +294,14 @@ func TestRunUpdateFrequency(t *testing.T) {
294294
295295// mockFetcher returns predetermined versions for testing.
296296type mockFetcher struct {
297- versions map [string ]string // maps cache key (e.g., "github-owner-repo") -> version to return
297+ versions map [string ][] string // maps cache key (e.g., "github-owner-repo") -> versions to return
298298}
299299
300- func (m * mockFetcher ) Fetch (_ context.Context , config * source.Config ) (string , error ) {
301- key := config .CacheKey ()
302- if version , ok := m .versions [key ]; ok {
303- return version , nil
300+ func (m * mockFetcher ) FetchVersions (_ context.Context , src * source.Source ) ([]string , error ) {
301+ if versions , ok := m .versions [src .CacheKey ()]; ok {
302+ return versions , nil
304303 }
305- // Return a default version if not in map
306- return "v1.0.0" , nil
304+ return []string {"v1.0.0" }, nil
307305}
308306
309307// setupTestRepository creates a complete test repository structure with:
@@ -614,3 +612,45 @@ func newTestContainer(t *testing.T, root string) appext.Container {
614612 logger := slog .New (slog .NewTextHandler (testWriter {t }, & slog.HandlerOptions {Level : slog .LevelDebug }))
615613 return appext .NewContainer (nameContainer , logger , appext .LogLevelDebug , appext .LogFormatText )
616614}
615+
616+ func TestFetchPendingCreationsMaxVersionSharedSource (t * testing.T ) {
617+ t .Parallel ()
618+ pluginsDir := filepath .Join (t .TempDir (), "plugins" )
619+ writePlugin := func (name string , sourceYAML string ) {
620+ pluginDir := filepath .Join (pluginsDir , "test" , name )
621+ require .NoError (t , os .MkdirAll (filepath .Join (pluginDir , "v1.0.0" ), 0755 ))
622+ require .NoError (t , os .WriteFile (filepath .Join (pluginDir , "source.yaml" ), []byte (sourceYAML ), 0644 ))
623+ }
624+ writePlugin ("unbounded" , `source:
625+ github:
626+ owner: test
627+ repository: shared
628+ ` )
629+ writePlugin ("bounded" , `source:
630+ github:
631+ owner: test
632+ repository: shared
633+ max_version: 2.0.0
634+ ` )
635+ configs , err := source .GatherConfigs (pluginsDir )
636+ require .NoError (t , err )
637+ fetcher := & mockFetcher {
638+ versions : map [string ][]string {
639+ "github-test-shared" : {"v1.0.0" , "v1.1.0" , "v2.0.0" },
640+ },
641+ }
642+ logger := slog .New (slog .DiscardHandler )
643+ pending , err := fetchPendingCreations (t .Context (), logger , fetcher , configs , nil , nil )
644+ require .NoError (t , err )
645+ require .Len (t , pending , 2 )
646+ for _ , config := range configs {
647+ pluginDir , err := filepath .Abs (filepath .Dir (config .Filename ))
648+ require .NoError (t , err )
649+ require .Contains (t , pending , pluginDir )
650+ want := "v2.0.0"
651+ if config .Source .MaxVersion != "" {
652+ want = "v1.1.0"
653+ }
654+ assert .Equal (t , want , pending [pluginDir ].newVersion , pluginDir )
655+ }
656+ }
0 commit comments