public function testNominalCase($providers = false)
{
$packagesBuilder = new PackagesBuilder(new NullOutput(), vfsStream::url('build'), ['providers' => $providers, 'repositories' => [['type' => 'composer', 'url' => 'http://localhost:54715']], 'require' => ['vendor/name' => '*']], false);
$lastIncludedJsonFile = null;
foreach ([1, 2, 2] as $i) {
$packages = self::createPackages($i);
$arrayPackages = self::createPackages($i, true);
$packagesBuilder->dump($packages);
$packagesJson = JsonFile::parseJson($this->root->getChild('build/packages.json')->getContent());
$this->assertArrayNotHasKey('notify-batch', $packagesJson);
if ($providers) {
$packageName = key($arrayPackages);
$arrayPackages[$packageName][$i . '.0']['uid'] = 1;
$hash = current($packagesJson['providers'][$packageName]);
$includeJson = str_replace(['%package%', '%hash%'], [$packageName, $hash], $packagesJson['providers-url']);
} else {
$includes = array_keys($packagesJson['includes']);
$includeJson = end($includes);
}
$includeJsonFile = 'build/' . $includeJson;
$this->assertTrue(is_file(vfsStream::url($includeJsonFile)));
$packagesIncludeJson = JsonFile::parseJson($this->root->getChild($includeJsonFile)->getContent());
$this->assertEquals($arrayPackages, $packagesIncludeJson['packages']);
if ($lastIncludedJsonFile && $lastIncludedJsonFile !== $includeJsonFile) {
$this->assertFalse(is_file(vfsStream::url($lastIncludedJsonFile)), 'Previous files not pruned');
}
$lastIncludedJsonFile = $includeJsonFile;
}
}