addVersion() public method

The version needs to be added in the PRE_PACKAGE_INSTALL/UPDATE event to make sure that different version save different urls in composer.lock. Composer would load any available version from cache although the version numbers might differ (because they have the same url).
public addVersion ( Composer\Installer\PackageEvent $event )
$event Composer\Installer\PackageEvent The event that called the method
 public function testReplaceVersionInUrl()
 {
     // The version that should be required
     $version = '1.2.3';
     // Make key available in the ENVIRONMENT
     putenv(self::KEY_ENV_VARIABLE . '=KEY');
     // Mock a Package
     $package = $this->getMockBuilder('Composer\\Package\\PackageInterface')->setMethods(['getName', 'getPrettyVersion', 'getDistUrl', 'setDistUrl'])->getMockForAbstractClass();
     $package->expects($this->once())->method('getName')->willReturn(self::REPO_NAME);
     $package->expects($this->once())->method('getPrettyVersion')->willReturn($version);
     $package->expects($this->once())->method('getDistUrl')->willReturn(self::REPO_URL . '&t=' . $version . '.4');
     $package->expects($this->once())->method('setDistUrl')->with(self::REPO_URL . "&t={$version}");
     // Mock an Operation
     $operationClass = 'Composer\\DependencyResolver\\Operation\\InstallOperation';
     $operation = $this->getMockBuilder($operationClass)->disableOriginalConstructor()->setMethods(['getJobType', 'getPackage'])->getMock();
     $operation->expects($this->once())->method('getJobType')->willReturn('install');
     $operation->expects($this->once())->method('getPackage')->willReturn($package);
     // Mock a PackageEvent
     $packageEvent = $this->getMockBuilder('Composer\\Installer\\PackageEvent')->disableOriginalConstructor()->setMethods(['getOperation'])->getMock();
     $packageEvent->expects($this->once())->method('getOperation')->willReturn($operation);
     // Call addVersion
     $plugin = new Plugin();
     $plugin->addVersion($packageEvent);
 }