diff --git a/src/HeaderComment/SPDXLicenseTemplateProvider.php b/src/HeaderComment/SPDXLicenseTemplateProvider.php index e5768ce4112e33e09630d0bcbb6a62b2a31364af..4ecf1f01c866e399c8a2932aa86718da2fd072c8 100644 --- a/src/HeaderComment/SPDXLicenseTemplateProvider.php +++ b/src/HeaderComment/SPDXLicenseTemplateProvider.php @@ -30,8 +30,10 @@ final class SPDXLicenseTemplateProvider implements TemplateProviderInterface /** * SPDXLicenseTemplateProvider constructor. */ - public function __construct(ComposerPackageInterface $composerPackage, string $urlTemplate = 'https://spdx.org/licenses/%s.json') - { + public function __construct( + ComposerPackageInterface $composerPackage, + string $urlTemplate = 'https://spdx.org/licenses/%s.json' + ) { $this->composerPackage = $composerPackage; $this->urlTemplate = $urlTemplate; } @@ -52,7 +54,11 @@ final class SPDXLicenseTemplateProvider implements TemplateProviderInterface private function fetchTemplate(string $spdxId): ?string { - $licenseJson = @file_get_contents(sprintf($this->urlTemplate, $spdxId)); + try { + $licenseJson = @file_get_contents(sprintf($this->urlTemplate, $spdxId)); + } catch (\ErrorException $ex) { + return null; + } if ($licenseJson === false) { return null; } diff --git a/tests/HeaderComment/SPDXLicenseTemplateProviderTest.php b/tests/HeaderComment/SPDXLicenseTemplateProviderTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1943b4fc1017916470ee19df5746019a9d7f2c7b --- /dev/null +++ b/tests/HeaderComment/SPDXLicenseTemplateProviderTest.php @@ -0,0 +1,88 @@ +<?php declare(strict_types=1); +/** + * Copyright (C) 2020 IRSTEA + * All rights reserved. + * + * @copyright 2020 IRSTEA + * @author guillaume.perreal + */ + +namespace Irstea\CS\Tests\HeaderComment; + +use Irstea\CS\Composer\ComposerPackageInterface; +use Irstea\CS\HeaderComment\SPDXLicenseTemplateProvider; +use org\bovigo\vfs\vfsStream; +use org\bovigo\vfs\vfsStreamDirectory; +use PHPUnit\Framework\TestCase; +use Prophecy\Prophecy\ObjectProphecy; + +/** + * Class SPDXLicenseTemplateProviderTest + */ +final class SPDXLicenseTemplateProviderTest extends TestCase +{ + /** + * @var vfsStreamDirectory + */ + private $root; + + /** + * @var ComposerPackageInterface|ObjectProphecy + */ + private $composerPackage; + + /** + * @var SPDXLicenseTemplateProviderTest + */ + private $templateProvider; + + protected function setUp() + { + $this->root = vfsStream::setup('licenses'); + + $this->composerPackage = $this->prophesize(ComposerPackageInterface::class); + + $this->templateProvider = new SPDXLicenseTemplateProvider( + $this->composerPackage->reveal() + $this->root->url(). '/%s.json' + ); + } + + public function testKnownLicense() { + + $this->composerPackage->getLicenses() + ->shouldBeCalled() + ->willReturn(['foo']); + + $this->root->addChild(vfsStream::newFile('foo.json')->setContent('{"standardLicenseHeader": "bar"}')); + + $result = $this->templateProvider->getTemplate(); + + self::assertEquals('bar', $result); + } + + public function testUnknownLicense() { + + $this->composerPackage->getLicenses() + ->shouldBeCalled() + ->willReturn(['foo']); + + $result = $this->templateProvider->getTemplate(); + + self::assertNull($result); + } + + public function testInvalidJSON() { + + $this->composerPackage->getLicenses() + ->shouldBeCalled() + ->willReturn(['foo']); + + $this->root->addChild(vfsStream::newFile('foo.json')->setContent('bar')); + + $result = $this->templateProvider->getTemplate(); + + self::assertNull($result); + } + +}