@@ -98,8 +98,8 @@ function makeRefsCollection(array $tags = [], array $branches = []): RefsCollect
9898 $ repository = Repository::factory ()->forOrganization ($ organization )->create ();
9999 $ package = Package::factory ()->forOrganization ($ organization )->forRepository ($ repository )->create ();
100100
101- // Version stored without v prefix (extractVersion strips it)
102- PackageVersion::factory ()->forPackage ($ package )->create (['version ' => '1 .0.0 ' , 'normalized_version ' => '1.0.0.0 ' ]);
101+ // Version stored with the v prefix preserved, matching the original tag
102+ PackageVersion::factory ()->forPackage ($ package )->create (['version ' => 'v1 .0.0 ' , 'normalized_version ' => '1.0.0.0 ' ]);
103103
104104 $ refs = makeRefsCollection (
105105 tags: [
@@ -113,6 +113,27 @@ function makeRefsCollection(array $tags = [], array $branches = []): RefsCollect
113113 expect ($ removed )->toBe (0 );
114114});
115115
116+ it ('removes legacy versions stored without the v prefix on re-sync ' , function () {
117+ $ organization = Organization::factory ()->create ();
118+ $ repository = Repository::factory ()->forOrganization ($ organization )->create ();
119+ $ package = Package::factory ()->forOrganization ($ organization )->forRepository ($ repository )->create ();
120+
121+ // Legacy row stored before the prefix was preserved
122+ PackageVersion::factory ()->forPackage ($ package )->create (['version ' => '1.0.0 ' , 'normalized_version ' => '1.0.0.0 ' ]);
123+
124+ $ refs = makeRefsCollection (
125+ tags: [
126+ ['name ' => 'v1.0.0 ' , 'commit ' => 'abc123 ' ],
127+ ]
128+ );
129+
130+ $ action = app (RemoveStaleVersionsAction::class);
131+ $ removed = $ action ->handle ($ repository , $ refs );
132+
133+ expect ($ removed )->toBe (1 );
134+ expect (PackageVersion::where ('package_uuid ' , $ package ->uuid )->count ())->toBe (0 );
135+ });
136+
116137it ('returns zero when repository has no packages ' , function () {
117138 $ organization = Organization::factory ()->create ();
118139 $ repository = Repository::factory ()->forOrganization ($ organization )->create ();
0 commit comments