Skip to content
Extraits de code Groupes Projets
Valider 779ab95d rédigé par JamesRezo's avatar JamesRezo :tada:
Parcourir les fichiers

chore: fix tests, dump composer version, docs

parent 9e0ea60b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de avec 2428 ajouts et 1093 suppressions
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false
.editorconfig export-ignore
.gitignore export-ignore
.gitattributes export-ignore
/tests/ export-ignore
/plugin.xml export-ignore
composer.phar
/vendor/
.php_cs.cache
/.phpunit.cache
/tmp/
MIT License
Copyright (c) 2018 James Hautot
Copyright (c) 2023 James Hautot
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
......
......@@ -2,14 +2,33 @@
Composer Plugin to Install SPIP Applications.
## Identified Composer Types.
## Identified Composer Types
- `spip-classic`
- `spip-ecrire`
- `spip-ecrire`
- `spip-prive`
- `spip-plugin`
## Reserved Composer Types for future uses.
## Reserved Composer Types for future uses
- `spip-lang`
- `spip-theme`
## Extra parameters in root package
- `extra.spip.template` goes to `./squelettes-dist`
- `extra.spip.extensions` go to `./plugins-dist`
```json
{
"extra": {
"spip": {
"template": "vendor/default-template",
"extensions": [
"vendor1/plugin-dist-1",
"vendor2/plugin-dist-2"
]
}
}
}
```
......@@ -10,16 +10,13 @@
}
],
"require": {
"php": "^5.3|^7",
"composer-plugin-api": "^1.0 || ^2.0"
},
"config": {
"platform": {
"php": "5.6.40"
}
"composer-plugin-api": "^2.3"
},
"extra": {
"class": "Spip\\Composer\\SpipInstallerPlugin"
"class": "Spip\\Composer\\SpipInstallerPlugin",
"branch-alias": {
"dev-master": "0.5.x-dev"
}
},
"autoload": {
"psr-4": {
......@@ -32,7 +29,7 @@
}
},
"require-dev": {
"composer/composer": "^1.10",
"phpunit/phpunit": "^5.7"
"composer/composer": "^2.5",
"phpunit/phpunit": "^10.0"
}
}
Ce diff est replié.
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd"
bootstrap="vendor/autoload.php"
cacheDirectory=".phpunit.cache"
executionOrder="depends,defects"
requireCoverageMetadata="true"
beStrictAboutCoverageMetadata="true"
beStrictAboutOutputDuringTests="true"
failOnRisky="true"
failOnWarning="true">
<testsuites>
<testsuite name="standard">
<testsuite name="default">
<directory>tests</directory>
</testsuite>
</testsuites>
<coverage>
<include>
<directory suffix=".php">src</directory>
</include>
</coverage>
</phpunit>
......@@ -26,9 +26,8 @@ class SpipInstaller extends LibraryInstaller
if ('spip-plugin' === $package->getType()) {
$extra = $this->composer->getPackage()->getExtra();
$template = isset($extra['spip']['template']) ? $extra['spip']['template'] : '';
$template = is_string($template) ? $template : '';
$extensions = isset($extra['spip']['extensions']) ? $extra['spip']['extensions'] : [];
$template = $extra['spip']['template'] ?? '';
$extensions = $extra['spip']['extensions'] ?? [];
$name = $package->getName();
if ($template === $name) {
......@@ -48,7 +47,7 @@ class SpipInstaller extends LibraryInstaller
))) {
throw new \InvalidArgumentException(
'Unable to install this package as its type is not supported for now.'.
' Wait for SPIP3.4+ for using it.'
' Wait for a future SPIP version for using it.'
);
}
}
......@@ -59,12 +58,12 @@ class SpipInstaller extends LibraryInstaller
public function supports($packageType)
{
return in_array($packageType, array(
'spip-classic', //SPIP Classic a.k.a. v3.0 to v3.2
//Until SPIP 4.0 some packages need to be installed in some particular places
'spip-ecrire', //SPIP CMS Component a.k.a. spip/ecrire v3.3
'spip-prive', //SPIP CMS Component a.k.a. spip/prive v3.3
'spip-lang', //SPIP CMS Component a.k.a. spip/lang v3.4
'spip-theme', //SPIP CMS Component a.k.a. spip/theme v3.4
'spip-classic', //SPIP Classic a.k.a. v4.2
//Until SPIP X.Y some packages need to be installed in some particular places
'spip-ecrire', //SPIP CMS Component a.k.a. spip/ecrire vX.Y
'spip-prive', //SPIP CMS Component a.k.a. spip/prive vX.Y
'spip-lang', //SPIP CMS Component a.k.a. spip/lang
'spip-theme', //SPIP CMS Component a.k.a. spip/theme
'spip-plugin', //an optional or required SPIP plugin or the default template
));
}
......
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\Package;
class SpipClassic
{
public function getPackage()
{
$package = new Package('spip/classic', '1.0', '1.0.0.0');
$package->setType('spip-classic');
return $package;
}
}
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\Package;
class SpipCms
{
public function getPackage()
{
$package = new Package('SPIP/Cms', '1.0', '1.0.0.0');
$package->setType('spip-cms');
return $package;
}
}
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\Package;
class SpipExtension
{
public function getPackage()
{
$package = new Package('spip/mots', '1.0', '1.0.0.0');
$package->setType('spip-plugin');
return $package;
}
}
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\Package;
class SpipPlugin
{
public function getPackage()
{
$package = new Package('spip/test', '1.0', '1.0.0.0');
$package->setType('spip-plugin');
return $package;
}
}
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\RootPackage;
class SpipProject
{
public function getPackage()
{
$package = new RootPackage('spip/spip', '1.0', '1.0.0.0');
$package->setType('project');
$package->setExtra(array(
'spip' => array(
'template' => 'spip/dist',
'extensions' => array(
'spip/organiseur',
'spip/mots',
'spip/filtre_images'
)
)
));
return $package;
}
}
<?php
namespace Spip\Test\Composer\Mocks;
use Composer\Package\Package;
class SpipTemplate
{
public function getPackage()
{
$package = new Package('spip/dist', '1.0', '1.0.0.0');
$package->setType('spip-plugin');
return $package;
}
}
<?php
namespace Spip\Test\Composer;
use Composer;
use Composer\Composer as ComposerObject;
use Composer\IO\IOInterface;
use Composer\Package\Package;
use Composer\Package\RootPackage;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use Spip\Composer\Classic;
use Spip\Composer\SpipInstaller;
use Spip\Test\Composer\Mocks\SpipClassic;
use Spip\Test\Composer\Mocks\SpipProject;
/**
* @covers Spip\Composer\SpipInstaller
*/
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',
'extensions' => [
'spip/mandatory',
],
],
]);
$composer->setPackage($package);
$this->installer = new SpipInstaller($io, $composer);
}
public static function dataPluginTypes()
{
return [
'library' => [
'expected' => null,
'name' => 'spip/test',
'type' => 'library',
],
'classic' => [
'expected' => './tmp/__spip_classic__',
'name' => 'spip/test',
'type' => 'spip-classic',
],
'ecrire' => [
'expected' => './ecrire',
'name' => 'spip/test',
'type' => 'spip-ecrire',
],
'prive' => [
'expected' => './prive',
'name' => 'spip/test',
'type' => 'spip-prive',
],
'plugin' => [
'expected' => './plugins/spip/test',
'name' => 'spip/test',
'type' => 'spip-plugin',
],
'extension' => [
'expected' => './plugins-dist/spip/mandatory',
'name' => 'spip/mandatory',
'type' => 'spip-plugin',
],
'template' => [
'expected' => './squelettes-dist',
'name' => 'spip/default-template',
'type' => 'spip-plugin',
],
];
}
/**
* @dataProvider dataPluginTypes
*/
public function testSupports($expected, $name, $type)
{
$package = new Package($name, '1.0.0', '1.0.0.0');
$package->setType($type);
$this->assertEquals(!is_null($expected), $this->installer->supports($package->getType()));
}
/**
* @dataProvider dataPluginTypes
*/
public function testGetInstallPath($expected, $name, $type)
{
$package = new Package($name, '1.0.0', '1.0.0.0');
$package->setType($type);
$this->assertSame($expected, $this->installer->getInstallPath($package));
}
public function testUnsupportedType()
{
$this->expectException(InvalidArgumentException::class);
$package = new Package('spip/test', '1.0.0', '1.0.0.0');
$package->setType('spip-lang');
$this->installer->getInstallPath($package);
}
}
\ No newline at end of file
<?php
namespace Spip\Test\Composer;
use Composer;
use PHPUnit\Framework\TestCase;
use Spip\Composer\Classic;
use Spip\Composer\SpipInstaller;
use Spip\Test\Composer\Mocks\SpipClassic;
use Spip\Test\Composer\Mocks\SpipProject;
class SpipInstallerTest extends TestCase
{
public function testGetInstallPath()
{
$spip = new SpipClassic();
$package = $spip->getPackage();
$io = new Composer\IO\NullIO();
$composer = Composer\Factory::create($io);
$spipInstaller = new SpipInstaller($io, $composer);
$this->assertSame('./tmp/__spip_classic__', $spipInstaller->getInstallPath($package));
}
}
\ No newline at end of file
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use Composer\Factory;
use Composer\Script\Event;
use Spip\Composer\Classic;
use Spip\Composer\SpipInstaller;
use Spip\Test\Composer\Mocks\SpipClassic;
$io = new Composer\IO\NullIO();
$composer = Factory::create($io);
$event = new Event('test', $composer, $io, true);
Classic::postInstall($event);
echo PHP_EOL;
exit(0);
<?php
/*echo PHP_EOL;
echo 'autoload: ';
echo "'" . __DIR__ . '/../vendor/autoload.php" ';
echo file_exists(__DIR__ . '/../vendor/autoload.php') ? 'OK' : 'KO';
echo PHP_EOL;
*/
require_once __DIR__ . '/../vendor/autoload.php';
use Composer\Factory;
use Spip\Composer\Classic;
use Spip\Composer\SpipInstaller;
use Spip\Test\Composer\Mocks\SpipCms;
use Spip\Test\Composer\Mocks\SpipExtension;
use Spip\Test\Composer\Mocks\SpipPlugin;
use Spip\Test\Composer\Mocks\SpipProject;
use Spip\Test\Composer\Mocks\SpipTemplate;
$spipProject = new SpipProject();
$io = new Composer\IO\NullIO();
$composer = Factory::create($io);
$composer->setPackage($spipProject->getPackage());
$extra = $composer->getPackage()->getExtra();
var_dump(["extra du rootPackage" => $extra]);
$mock = new SpipCms();
$package = $mock->getPackage();
var_dump(["un pacakge de type spip-cms" => $package]);
/*$extra = [
'spip' => [
'template' => ['jamesrezo/spip-clear'],
'extensions' => 'test/test'
]
];
$extra = [
'spip' => [
'template' => 'jamesrezo/spip-clear',
'extensions' => ['test/test']
]
];
$extra = [
'spip' => []
];*/
$template = isset($extra['spip']['template']) ? $extra['spip']['template'] : '';
$extensions = isset($extra['spip']['extensions']) ? $extra['spip']['extensions'] : [];
echo PHP_EOL;
echo 'extra: ';
echo PHP_EOL;
echo 'template: "';
echo is_string($template) ? $template : '';
echo '"';
echo PHP_EOL;
echo 'extensions: (';
echo is_array($extensions) ? implode(', ', $extensions) : '';
echo ')';
$spipInstaller = new SpipInstaller($io, $composer);
try {
$path = $spipInstaller->getInstallPath($package);
} catch (Exception $e) {
$path = '';
var_dump($e->getMessage());
}
echo 'path: "' . $path. '"';
echo PHP_EOL;
$mock = new SpipPlugin();
$package = $mock->getPackage();
try {
$path = $spipInstaller->getInstallPath($package);
} catch (Exception $e) {
$path = '';
var_dump($e->getMessage());
}
echo 'path: "' . $path. '"';
echo PHP_EOL;
$mock = new SpipExtension();
$package = $mock->getPackage();
try {
$path = $spipInstaller->getInstallPath($package);
} catch (Exception $e) {
$path = '';
var_dump($e->getMessage());
}
echo 'path: "' . $path. '"';
echo PHP_EOL;
$mock = new SpipTemplate();
$package = $mock->getPackage();
try {
$path = $spipInstaller->getInstallPath($package);
} catch (Exception $e) {
$path = '';
var_dump($e->getMessage());
}
echo 'path: "' . $path. '"';
echo PHP_EOL;
echo PHP_EOL;
exit(0);
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter