Skip to content
Extraits de code Groupes Projets
SpipInstallerTest.php 3,71 ko
Newer Older
namespace SpipLeague\Test\Composer;

use Composer;
use Composer\Package\Package;
use Composer\Package\RootPackage;
use InvalidArgumentException;
JamesRezo's avatar
JamesRezo a validé
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use SpipLeague\Composer\SpipInstaller;
use SpipLeague\Composer\SpipPaths;
JamesRezo's avatar
JamesRezo a validé
#[CoversClass(SpipInstaller::class)]
class SpipInstallerTest extends TestCase
{
    private SpipInstaller $installer;

    protected function setUp(): void
    {
        $io = new Composer\IO\NullIO();
        $composer = Composer\Factory::create($io);
        $package = new RootPackage('spip/spip', '1.0', '1.0.0.0');
        $package->setExtra([
            'spip' => [
                'template' => 'spip/default-template',
marcimat's avatar
marcimat a validé
                'extensions' => ['spip/mandatory'],
        $composer->setPackage($package);
        $this->installer = new SpipInstaller($io, $composer);
JamesRezo's avatar
JamesRezo a validé
    /**
     * @return array<string,mixed>
     */
    public static function dataPluginTypes(): array
    {
        return [
            'library' => [
JamesRezo's avatar
JamesRezo a validé
                'expected' => false,
                'type' => 'library',
            ],
            'ecrire' => [
                'expected' => true,
                'type' => 'spip-ecrire',
            ],
            'prive' => [
                'expected' => true,
                'type' => 'spip-prive',
            ],
            'plugin' => [
                'expected' => true,
                'type' => 'spip-plugin',
            ],
        ];
    }

    #[DataProvider('dataPluginTypes')]
JamesRezo's avatar
JamesRezo a validé
    public function testSupports(bool $expected, string $type): void
JamesRezo's avatar
JamesRezo a validé
    {
        $package = new Package('spip/test', '1.0.0', '1.0.0.0');
        $package->setType($type);

        $this->assertEquals($expected, $this->installer->supports($package->getType()));
    }

JamesRezo's avatar
JamesRezo a validé
    /**
     * @return array<string,mixed>
     */
    public static function dataPluginPaths(): array
JamesRezo's avatar
JamesRezo a validé
    {
        return [
            'library' => [
                'expected' => dirname(__DIR__, 1) . '/vendor/spip/test',
                'name' => 'spip/test',
                'type' => 'library',
JamesRezo's avatar
JamesRezo a validé
                'expected' => './' . SpipPaths::BACK_OFFICE,
                'name' => 'spip/test',
                'type' => 'spip-ecrire',
            ],
            'prive' => [
JamesRezo's avatar
JamesRezo a validé
                'expected' => './' . SpipPaths::PRIVATE_TEMPLATE,
                'name' => 'spip/test',
                'type' => 'spip-prive',
            ],
            'plugin' => [
JamesRezo's avatar
JamesRezo a validé
                'expected' => './' . SpipPaths::PLUGINS . '/spip/test',
                'name' => 'spip/test',
                'type' => 'spip-plugin',
            ],
            'extension' => [
                'expected' => './' . SpipPaths::EXTENSIONS . '/spip/mandatory',
                'name' => 'spip/mandatory',
                'type' => 'spip-plugin',
            ],
            'template' => [
                'expected' => './' . SpipPaths::TEMPLATE,
                'name' => 'spip/default-template',
                'type' => 'spip-plugin',
            ],
        ];
    }

JamesRezo's avatar
JamesRezo a validé
    #[DataProvider('dataPluginPaths')]
JamesRezo's avatar
JamesRezo a validé
    public function testGetInstallPath(string $expected, string $name, string $type): void
    {
        $package = new Package($name, '1.0.0', '1.0.0.0');
        $package->setType($type);

        $this->assertSame($expected, $this->installer->getInstallPath($package));
    }

JamesRezo's avatar
JamesRezo a validé
    public function testUnsupportedType(): void
    {
        $this->expectException(InvalidArgumentException::class);
        $package = new Package('spip/test', '1.0.0', '1.0.0.0');
        $package->setType('spip-lang');

        $this->installer->getInstallPath($package);
    }