diff --git a/library/Class/Migration/AlbumChangeCodif.php b/library/Class/Migration/AlbumChangeCodif.php index 260c3ce9136bad9296b445be30138bd4b72e987b..c87beb029d1362d9193070a88a236b6ba7c24a40 100644 --- a/library/Class/Migration/AlbumChangeCodif.php +++ b/library/Class/Migration/AlbumChangeCodif.php @@ -26,6 +26,7 @@ class Class_Migration_AlbumChangeCodif { $_codif_name, $_id_origin, $_id_replace, + $_force_update, $_map_attrib_class = [ 'genre' => Class_CodifGenre::class, 'sections' => Class_CodifSection::class, @@ -33,31 +34,29 @@ class Class_Migration_AlbumChangeCodif { 'matiere' => Class_CodifMatiere::class ]; - public function __construct($cat_id, $codif_name, $id_origin, $id_replace) { + public function __construct($cat_id, $codif_name, + $id_origin, $id_replace, $force_update = false) { $this->_cat_id = $cat_id; $this->_codif_name = $codif_name; $this->_id_origin = $id_origin; $this->_id_replace = $id_replace; + $this->_force_update = $force_update; } public function run() : string { try { - if (!$this->_cat_id - || !$category = Class_AlbumCategorie::find($this->_cat_id)) + if (!$category = $this->_getCategory()) return "Category can't be found with id: " . $this->_cat_id; - if (!$this->_codif_name - || !isset($this->_map_attrib_class[$this->_codif_name])) + if (!$this->_isCodifNameValid()) return sprintf("Codif %s doesn't exist", $this->_codif_name); $codif = $this->_map_attrib_class[$this->_codif_name]; - if (!$this->_id_origin - || $codif::find($this->_id_origin)) + if (!$this->_isOriginCodifValid($codif)) return sprintf("%s with id: %s should not exists", $codif, $this->_id_origin); - if (!$this->_id_replace - || !$codif::find($this->_id_replace)) + if (!$this->_isReplaceCodifValid($codif)) return sprintf("%s can't be found with id: %s", $codif, $this->_id_replace); $albums = Class_Album::findAllBy(['cat_id' => $category @@ -97,4 +96,30 @@ class Class_Migration_AlbumChangeCodif { return 0; } + + + protected function _getCategory() { + if (!$this->_cat_id) + return null; + + return Class_AlbumCategorie::find($this->_cat_id); + } + + + protected function _isCodifNameValid() : bool { + return $this->_codif_name && isset($this->_map_attrib_class[$this->_codif_name]); + } + + + protected function _isOriginCodifValid($codif): bool { + if (!$this->_id_origin) + return false; + + return $this->_force_update || !$codif::find($this->_id_origin); + } + + + protected function _isReplaceCodifValid($codif) : bool { + return $this->_id_replace && $codif::find($this->_id_replace); + } } diff --git a/scripts/album_change_codif.php b/scripts/album_change_codif.php index b9ea32f628710cdef7842d938895ef974c3d62fd..1faa4dff33dff59357791c63d9d051c94402b035 100644 --- a/scripts/album_change_codif.php +++ b/scripts/album_change_codif.php @@ -1,11 +1,12 @@ <?php require __DIR__ . '/../console.php'; -if (5 !== $argc) { - echo 'This script must have 4 arguments' . "\n\n"; +if ($argc < 5) { + echo 'This script must have at least 4 arguments' . "\n\n"; return; } -echo (new Class_Migration_AlbumChangeCodif($argv[1], $argv[2], $argv[3], $argv[4])) +echo (new Class_Migration_AlbumChangeCodif($argv[1], $argv[2], + $argv[3], $argv[4], '-f' === $argv[5])) ->run(); echo "\n\n"; diff --git a/tests/library/Class/Migration/AlbumChangeCodifTest.php b/tests/library/Class/Migration/AlbumChangeCodifTest.php index 55966c38264ab32327f4364fa1b0743c2b1ab288..3a50cb6df2b7c13f207df14e0bee3b6415ca158a 100644 --- a/tests/library/Class/Migration/AlbumChangeCodifTest.php +++ b/tests/library/Class/Migration/AlbumChangeCodifTest.php @@ -280,3 +280,23 @@ class AlbumChangeCodifWithErrorTest extends ModelTestCase { $this->assertEquals("Class_CodifGenre can't be found with id: 3", $message); } } + + + + +class AlbumChangeCodifForGenreForceUpdateTest extends AlbumChangeCodifTestCase { + + public function setUp() { + parent::setUp(); + + $this->_message = (new Class_Migration_AlbumChangeCodif(1, 'genre', + 101, 110, true)) + ->run(); + } + + + /** @test */ + public function album10ShouldHaveReplaceIdGenre101By110() { + $this->assertEquals('100;;110', Class_Album::find(10)->getGenre()); + } +}