From fbd30fac9803dddb980db4377048839ff070a4e7 Mon Sep 17 00:00:00 2001 From: Aaron Carlino Date: Wed, 29 Nov 2017 11:45:42 +1300 Subject: [PATCH] Add new page type creator task, Faker dependency --- code/tasks/FTPageMakerTask.php | 10 ++- code/tasks/FTPageTypeCreatorTask.php | 111 +++++++++++++++++++++++++ code/test-pages/AdipisciPage.php | 9 ++ code/test-pages/AliquidPage.php | 9 ++ code/test-pages/AperiamPage.php | 9 ++ code/test-pages/AtquePage.php | 9 ++ code/test-pages/AutPage.php | 9 ++ code/test-pages/AutemPage.php | 9 ++ code/test-pages/BeataePage.php | 9 ++ code/test-pages/ConsequaturPage.php | 9 ++ code/test-pages/CorruptiPage.php | 9 ++ code/test-pages/CulpaPage.php | 9 ++ code/test-pages/CumPage.php | 9 ++ code/test-pages/DelenitiPage.php | 9 ++ code/test-pages/DolorPage.php | 9 ++ code/test-pages/DoloremquePage.php | 9 ++ code/test-pages/EaPage.php | 9 ++ code/test-pages/EligendiPage.php | 9 ++ code/test-pages/EosPage.php | 9 ++ code/test-pages/EstPage.php | 9 ++ code/test-pages/EtPage.php | 9 ++ code/test-pages/EvenietPage.php | 9 ++ code/test-pages/ExpeditaPage.php | 9 ++ code/test-pages/FacerePage.php | 9 ++ code/test-pages/FacilisPage.php | 9 ++ code/test-pages/FugiatPage.php | 9 ++ code/test-pages/IdPage.php | 9 ++ code/test-pages/InventorePage.php | 9 ++ code/test-pages/IurePage.php | 9 ++ code/test-pages/LaborePage.php | 9 ++ code/test-pages/MinimaPage.php | 9 ++ code/test-pages/NecessitatibusPage.php | 9 ++ code/test-pages/NumquamPage.php | 9 ++ code/test-pages/OmnisPage.php | 9 ++ code/test-pages/PraesentiumPage.php | 9 ++ code/test-pages/QuaeratPage.php | 9 ++ code/test-pages/QuasPage.php | 9 ++ code/test-pages/QuiPage.php | 9 ++ code/test-pages/QuodPage.php | 9 ++ code/test-pages/QuosPage.php | 9 ++ code/test-pages/RepellatPage.php | 9 ++ code/test-pages/ReprehenderitPage.php | 9 ++ code/test-pages/RerumPage.php | 9 ++ code/test-pages/SapientePage.php | 9 ++ code/test-pages/SedPage.php | 9 ++ code/test-pages/SintPage.php | 9 ++ code/test-pages/SuntPage.php | 9 ++ code/test-pages/SuscipitPage.php | 9 ++ code/test-pages/TemporibusPage.php | 9 ++ code/test-pages/TestPageInterface.php | 10 +++ code/test-pages/UllamPage.php | 9 ++ code/test-pages/VelitPage.php | 9 ++ code/test-pages/VeritatisPage.php | 9 ++ code/test-pages/VoluptatemPage.php | 9 ++ code/test-pages/VoluptatesPage.php | 9 ++ composer.json | 3 +- 56 files changed, 599 insertions(+), 3 deletions(-) create mode 100644 code/tasks/FTPageTypeCreatorTask.php create mode 100644 code/test-pages/AdipisciPage.php create mode 100644 code/test-pages/AliquidPage.php create mode 100644 code/test-pages/AperiamPage.php create mode 100644 code/test-pages/AtquePage.php create mode 100644 code/test-pages/AutPage.php create mode 100644 code/test-pages/AutemPage.php create mode 100644 code/test-pages/BeataePage.php create mode 100644 code/test-pages/ConsequaturPage.php create mode 100644 code/test-pages/CorruptiPage.php create mode 100644 code/test-pages/CulpaPage.php create mode 100644 code/test-pages/CumPage.php create mode 100644 code/test-pages/DelenitiPage.php create mode 100644 code/test-pages/DolorPage.php create mode 100644 code/test-pages/DoloremquePage.php create mode 100644 code/test-pages/EaPage.php create mode 100644 code/test-pages/EligendiPage.php create mode 100644 code/test-pages/EosPage.php create mode 100644 code/test-pages/EstPage.php create mode 100644 code/test-pages/EtPage.php create mode 100644 code/test-pages/EvenietPage.php create mode 100644 code/test-pages/ExpeditaPage.php create mode 100644 code/test-pages/FacerePage.php create mode 100644 code/test-pages/FacilisPage.php create mode 100644 code/test-pages/FugiatPage.php create mode 100644 code/test-pages/IdPage.php create mode 100644 code/test-pages/InventorePage.php create mode 100644 code/test-pages/IurePage.php create mode 100644 code/test-pages/LaborePage.php create mode 100644 code/test-pages/MinimaPage.php create mode 100644 code/test-pages/NecessitatibusPage.php create mode 100644 code/test-pages/NumquamPage.php create mode 100644 code/test-pages/OmnisPage.php create mode 100644 code/test-pages/PraesentiumPage.php create mode 100644 code/test-pages/QuaeratPage.php create mode 100644 code/test-pages/QuasPage.php create mode 100644 code/test-pages/QuiPage.php create mode 100644 code/test-pages/QuodPage.php create mode 100644 code/test-pages/QuosPage.php create mode 100644 code/test-pages/RepellatPage.php create mode 100644 code/test-pages/ReprehenderitPage.php create mode 100644 code/test-pages/RerumPage.php create mode 100644 code/test-pages/SapientePage.php create mode 100644 code/test-pages/SedPage.php create mode 100644 code/test-pages/SintPage.php create mode 100644 code/test-pages/SuntPage.php create mode 100644 code/test-pages/SuscipitPage.php create mode 100644 code/test-pages/TemporibusPage.php create mode 100644 code/test-pages/TestPageInterface.php create mode 100644 code/test-pages/UllamPage.php create mode 100644 code/test-pages/VelitPage.php create mode 100644 code/test-pages/VeritatisPage.php create mode 100644 code/test-pages/VoluptatemPage.php create mode 100644 code/test-pages/VoluptatesPage.php diff --git a/code/tasks/FTPageMakerTask.php b/code/tasks/FTPageMakerTask.php index e4749d3..bdd22cd 100644 --- a/code/tasks/FTPageMakerTask.php +++ b/code/tasks/FTPageMakerTask.php @@ -1,6 +1,8 @@ pageCountByDepth); $pageCount = $this->pageCountByDepth[$depth]; + $testPageClasses = ClassInfo::implementorsOf('TestPageInterface'); + $testPageClasses[] = 'Page'; for ($i=1; $i<=$pageCount; $i++) { $fullPrefix = $prefix ? "{$prefix}-{$i}" : $i; - $page = new Page(); + $randomIndex = array_rand($testPageClasses); + $pageClass = $testPageClasses[$randomIndex]; + $page = new $pageClass(); $page->ParentID = $parentID; $page->Title = "Test page {$fullPrefix}"; $page->write(); $page->publish('Stage', 'Live'); - echo "Created '$page->Title'\n"; + echo "Created '$page->Title' ($page->ClassName)\n"; $pageID = $page->ID; unset($page); diff --git a/code/tasks/FTPageTypeCreatorTask.php b/code/tasks/FTPageTypeCreatorTask.php new file mode 100644 index 0000000..0c70df7 --- /dev/null +++ b/code/tasks/FTPageTypeCreatorTask.php @@ -0,0 +1,111 @@ +fs = new Filesystem(); + $this->faker = Factory::create(); + $this->finder = new Finder(); + } + + /** + * @param HTTPRequest $request + */ + public function run($request) + { + $count = $request->getVar('count') ?: 20; + $module = ModuleLoader::getModule('silverstripe/frameworktest'); + $testPageDir = $module->getPath() . '/code/test-pages'; + if(!$this->fs->exists($testPageDir)) { + throw new RuntimeException("Test page directory $testPageDir does not exist!"); + } + + $pageTypes = $this->getExistingClassNames($testPageDir); + $created = 0; + while($created < $count) { + $className = null; + while( + !$className || + in_array($className, $pageTypes) || + class_exists(basename($className, 'php')) + ) { + $className = $this->generateClassName(); + } + $pageTypes[] = $className; + $code = $this->generateClassCode($className); + $filePath = sprintf('%s/%s.php', $testPageDir, $className); + try { + $this->fs->dumpFile($filePath, $code); + $created++; + } catch (IOException $e) { + echo "Could not write to file $filePath. Got error: {$e->getMessage()}\n"; + die(); + } + echo "Created page type $className\n"; + } + } + + private function getExistingClassNames($dir) + { + $files = $this->finder + ->in($dir) + ->files() + ->name('*Page.php'); + + return array_map(function ($file) { + /* @var SplFileInfo $file */ + return $file->getBasename(); + }, iterator_to_array($files)); + } + + private function generateClassName() + { + return ucfirst($this->faker->word . 'Page'); + } + + private function generateClassCode($className) + { + $self = __CLASS__; + $code = <<