public function testRandomFloat() { $min = 4; $max = 10; $nbMaxDecimals = 8; $result = BaseProvider::randomFloat($nbMaxDecimals, $min, $max); $parts = explode('.', $result); $this->assertInternalType('float', $result); $this->assertGreaterThanOrEqual($min, $result); $this->assertLessThanOrEqual($max, $result); $this->assertLessThanOrEqual($nbMaxDecimals, strlen($parts[1])); }
/** * Generate the admin form type entity. */ private function generateBehatTest() { $configDir = $this->bundle->getPath() . '/Resources/config'; // Get the context names for each section config file $sectionInfo = array(); $dir = $configDir . '/pageparts/'; foreach ($this->sections as $section) { $data = Yaml::parse($dir . $section); $sectionInfo[basename($section, '.yml')] = array('context' => $data['context'], 'pagetempates' => array()); } /* Example $sectionInfo contents: Array ( [main] => Array ( [context] => main [pagetempates] => Array ( ) ) ) */ // Get a list of page templates that use this context $allTemplates = glob($configDir . '/pagetemplates/*.yml'); $contextTemplates = array(); foreach ($allTemplates as $templatePath) { $parts = explode("/", $templatePath); $fileName = basename($parts[count($parts) - 1], '.yml'); $data = Yaml::parse($templatePath); $templateName = $data['name']; if (array_key_exists('rows', $data) && is_array($data['rows'])) { foreach ($data['rows'] as $row) { if (is_array($row) && array_key_exists('regions', $row) && is_array($row['regions'])) { foreach ($row['regions'] as $region) { $contextTemplates[$region['name']][$fileName] = $templateName; } } } } } /* Example $contextTemplates contents: Array ( [main] => Array ( [full-width-page] => Full width page [homepage] => Home page [sidebar-page] => Page with left sidebar ) [top] => Array ( [homepage] => Home page ) [sidebar] => Array ( [homepage] => Home page [sidebar-page] => Page with left sidebar ) ) */ // Link the page templates to the sections foreach ($sectionInfo as $fileName => $info) { $context = $info['context']; if (array_key_exists($context, $contextTemplates)) { $sectionInfo[$fileName]['pagetempates'] = $contextTemplates[$context]; } } /* Example $sectionInfo contents: Array ( [main] => Array ( [context] => main [pagetempates] => Array ( [full-width-page] => Full width page [homepage] => Home page [sidebar-page] => Page with left sidebar ) ) ) */ $folder = $this->registry->getRepository('KunstmaanMediaBundle:Folder')->findOneBy(array('rel' => 'image')); $images = $this->registry->getRepository('KunstmaanMediaBundle:Media')->findBy(array('folder' => $folder, 'deleted' => false), array(), 2); // Get all the available pages $allPages = glob($this->bundle->getPath() . '/Entity/Pages/*.php'); $pages = array(); foreach ($allPages as $pageFile) { $parts = explode("/", $pageFile); $className = basename($parts[count($parts) - 1], '.php'); $contents = file_get_contents($pageFile); if (strpos($contents, 'abstract class') === false && strpos($contents, 'interface ') === false) { $classNamespace = '\\' . $this->bundle->getNamespace() . '\\Entity\\Pages\\' . $className; $entity = new $classNamespace(); if (!method_exists($entity, 'getPagePartAdminConfigurations') || !method_exists($entity, 'getPageTemplates')) { continue; } $ppConfigs = $entity->getPagePartAdminConfigurations(); $ptConfigs = $entity->getPageTemplates(); foreach ($ppConfigs as $ppConfig) { $parts = explode(":", $ppConfig); $ppConfigFilename = $parts[count($parts) - 1]; // Context found in this Page class if (array_key_exists($ppConfigFilename, $sectionInfo)) { // Search for templates foreach ($ptConfigs as $ptConfig) { $parts = explode(":", $ptConfig); $ptConfigFilename = $parts[count($parts) - 1]; // Page template found if (array_key_exists($ptConfigFilename, $sectionInfo[$ppConfigFilename]['pagetempates'])) { $formType = $entity->getDefaultAdminType(); if (!is_object($formType)) { $formType = $this->container->get($formType); } // Get all page properties $form = $this->container->get('form.factory')->create($formType); $children = $form->createView()->children; $pageFields = array(); foreach ($children as $field) { $name = $field->vars['name']; $attr = $field->vars['attr']; $blocks = $field->vars['block_prefixes']; if ($name == 'title' || $name == 'pageTitle') { continue; } if ($blocks[1] == 'hidden') { // do nothing } elseif ($blocks[1] == 'choice' && $blocks[1] == 'entity') { // do nothing } elseif ($blocks[1] == 'datetime') { $pageFields[]['datetime'] = array('label' => $this->labelCase($name), 'date_random' => DateTime::date('d/m/Y'), 'time_random' => DateTime::time('H:i')); } elseif ($blocks[1] == 'number') { $pageFields[]['decimal'] = array('label' => $this->labelCase($name), 'random' => Base::randomFloat(2, 0, 99999)); } elseif ($blocks[1] == 'integer') { $pageFields[]['integer'] = array('label' => $this->labelCase($name), 'random' => Base::randomNumber(3000, 99999)); } elseif ($blocks[1] == 'checkbox') { $pageFields[]['boolean'] = array('label' => $this->labelCase($name)); } elseif ($blocks[1] == 'media') { $id = count($images) > 0 ? $images[0]->getId() : 1; $pageFields[]['media'] = array('label' => $this->labelCase($name), 'random' => $id); } elseif ($blocks[2] == 'urlchooser') { $pageFields[]['link'] = array('label' => $this->labelCase($name), 'random' => 'http://www.' . strtolower(Lorem::word()) . '.com'); } elseif ($blocks[2] == 'textarea' && array_key_exists('class', $attr) && $attr['class'] == 'rich_editor') { $pageFields[]['rich_text'] = array('label' => $this->labelCase($name), 'random' => Lorem::sentence()); } elseif ($blocks[2] == 'textarea' || $blocks[1] == 'text') { $pageFields[]['text'] = array('label' => $this->labelCase($name), 'random' => Lorem::word()); } } $pages[] = array('name' => $className, 'section' => $sectionInfo[$ppConfigFilename]['context'], 'template' => $sectionInfo[$ppConfigFilename]['pagetempates'][$ptConfigFilename], 'fields' => $pageFields); } } } } } } /* Example $pages contents: Array ( [0] => Array ( [name] => ContentPage [section] => main [template] => Page with left sidebar [fields] => Array ( ... ) ) [1] => Array ( [name] => ContentPage [section] => main [template] => Full width page [fields] => Array ( ... ) ) [2] => Array ( [name] => HomePage [section] => main [template] => Home page [fields] => Array ( ... ) ) ) */ // Add some random values in the field array, so that this values can be uses as test values foreach ($this->fields as $fkey => $fieldSet) { foreach ($fieldSet as $key => $values) { switch ($key) { case 'multi_line': case 'single_line': $values[0]['random1'] = Lorem::word(); $values[0]['random2'] = Lorem::word(); $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; case 'rich_text': $values[0]['random1'] = Lorem::sentence(); $values[0]['random2'] = Lorem::sentence(); $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; case 'link': $values['url']['random1'] = 'http://www.' . strtolower(Lorem::word()) . '.com'; $values['url']['random2'] = 'http://www.' . strtolower(Lorem::word()) . '.com'; $values['url']['lName'] = $this->labelCase($values['url']['fieldName']); $values['text']['random1'] = Lorem::word(); $values['text']['random2'] = Lorem::word(); $values['text']['lName'] = $this->labelCase($values['text']['fieldName']); $values['new_window']['lName'] = $this->labelCase($values['new_window']['fieldName']); break; case 'image': if (count($images) > 0) { if (count($images) > 1) { $values['image']['id_random1'] = $images[0]->getId(); $values['image']['url_random1'] = $images[0]->getUrl(); $values['image']['id_random2'] = $images[1]->getId(); $values['image']['url_random2'] = $images[1]->getUrl(); } else { $values['image']['id_random1'] = $values['image']['id_random2'] = $images[0]->getId(); $values['image']['url_random1'] = $values['image']['url_random2'] = $images[0]->getUrl(); } } else { $values['image']['id_random1'] = $values['image']['id_random2'] = '1'; $values['image']['url_random1'] = $values['image']['url_random2'] = 'XXX'; } $values['image']['lName'] = $this->labelCase($values['image']['fieldName']); $values['alt_text']['random1'] = Lorem::word(); $values['alt_text']['random2'] = Lorem::word(); $values['alt_text']['lName'] = $this->labelCase($values['alt_text']['fieldName']); break; case 'boolean': $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; case 'integer': $values[0]['random1'] = Base::randomNumber(3000, 99999); $values[0]['random2'] = Base::randomNumber(3000, 99999); $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; case 'decimal': $values[0]['random1'] = Base::randomFloat(2, 0, 99999); $values[0]['random2'] = Base::randomFloat(2, 0, 99999); $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; case 'datetime': $values[0]['date_random1'] = DateTime::date('d/m/Y'); $values[0]['date_random2'] = DateTime::date('d/m/Y'); $values[0]['time_random1'] = DateTime::time('H:i'); $values[0]['time_random2'] = DateTime::time('H:i'); $dparts = explode('/', $values[0]['date_random1']); $values[0]['datetime_random1'] = $dparts[2] . '-' . $dparts[1] . '-' . $dparts[0] . ' ' . $values[0]['time_random1'] . ':00'; $dparts = explode('/', $values[0]['date_random2']); $values[0]['datetime_random2'] = $dparts[2] . '-' . $dparts[1] . '-' . $dparts[0] . ' ' . $values[0]['time_random2'] . ':00'; $values[0]['lName'] = $this->labelCase($values[0]['fieldName']); break; } $this->fields[$fkey][$key] = $values; } } $params = array('name' => $this->entity, 'pages' => $pages, 'fields' => $this->fields); $this->renderFile('/Features/PagePart.feature', $this->bundle->getPath() . '/Features/Admin' . $this->entity . '.feature', $params); $this->assistant->writeLine('Generating behat test : <info>OK</info>'); }