public function getExtraDefinitions() { $testVarDefinitionSource = new TestingEnvironmentVariablesDefinitionSource($this->vars); $diConfigs = array($testVarDefinitionSource); if ($this->vars->testCaseClass) { $testCaseClass = $this->vars->testCaseClass; if (class_exists($testCaseClass)) { $testCase = new $testCaseClass(); // Apply DI config from the fixture if (isset($testCaseClass::$fixture)) { $diConfigs[] = $testCaseClass::$fixture->provideContainerConfig(); } if (method_exists($testCaseClass, 'provideContainerConfigBeforeClass')) { $diConfigs[] = $testCaseClass::provideContainerConfigBeforeClass(); } if (method_exists($testCase, 'provideContainerConfig')) { $diConfigs[] = $testCase->provideContainerConfig(); } } } else { if ($this->vars->fixtureClass) { $fixtureClass = $this->vars->fixtureClass; if (class_exists($fixtureClass)) { $fixture = new $fixtureClass(); if (method_exists($fixture, 'provideContainerConfig')) { $diConfigs[] = $fixture->provideContainerConfig(); } } } } $plugins = $this->getPluginsToLoadDuringTest(); $diConfigs[] = array('observers.global' => \DI\add($this->globalObservers), 'Piwik\\Config' => \DI\decorate(function (Config $config, ContainerInterface $c) use($plugins) { /** @var PluginList $pluginList */ $pluginList = $c->get('Piwik\\Application\\Kernel\\PluginList'); $plugins = $pluginList->sortPlugins($plugins); // set the plugins to load, has to be done to Config, since Config will reload files on construction. // TODO: probably shouldn't need to do this, will wait until 3.0 to remove. $config->Plugins['Plugins'] = $plugins; return $config; })); return $diConfigs; }
<?php use Piwik\Container\StaticContainer; return array('tests.ui.url_normalizer_blacklist.api' => array(), 'tests.ui.url_normalizer_blacklist.controller' => array(), 'Piwik\\Config' => \DI\decorate(function (\Piwik\Config $config) { $config->General['cors_domains'][] = '*'; $config->General['trusted_hosts'][] = $config->tests['http_host']; $config->General['trusted_hosts'][] = $config->tests['http_host'] . ':' . $config->tests['port']; return $config; }), 'observers.global' => \DI\add(array(array('Request.dispatch.end', function (&$result) { $request = $_GET + $_POST; $apiblacklist = StaticContainer::get('tests.ui.url_normalizer_blacklist.api'); if (!empty($request['method']) && in_array($request['method'], $apiblacklist)) { return; } $controllerActionblacklist = StaticContainer::get('tests.ui.url_normalizer_blacklist.controller'); if (!empty($request['module']) && !empty($request['action'])) { $controllerAction = $request['module'] . '.' . $request['action']; if (in_array($controllerAction, $controllerActionblacklist)) { return; } } $config = \Piwik\Config::getInstance(); $host = $config->tests['http_host']; $port = $config->tests['port']; if (!empty($port)) { // remove the port from URLs if any so UI tests won't fail if the port isn't 80 $result = str_replace($host . ':' . $port, $host, $result); } // remove PIWIK_INCLUDE_PATH from result so tests don't change based on the machine used $result = str_replace(realpath(PIWIK_INCLUDE_PATH), '', $result); }), array('Controller.RssWidget.rssPiwik.end', function (&$result, $parameters) {
}), 'Piwik\\Plugins\\Marketplace\\Api\\Service' => DI\decorate(function ($previous, ContainerInterface $c) { if (!$c->get('test.vars.mockMarketplaceApiService')) { return $previous; } // for ui tests $service = new MockService(); $key = new LicenseKey(); $accessToken = $key->get(); $service->authenticate($accessToken); function removeReviewsUrl($content) { $content = json_decode($content, true); if (!empty($content['shop']['reviews']['embedUrl'])) { $content['shop']['reviews']['embedUrl'] = ''; } return json_encode($content); } $isExceededUser = $c->get('test.vars.consumer') === 'exceededLicense'; $isExpiredUser = $c->get('test.vars.consumer') === 'expiredLicense'; $isValidUser = $c->get('test.vars.consumer') === 'validLicense'; $service->setOnDownloadCallback(function ($action, $params) use($service, $isExceededUser, $isValidUser, $isExpiredUser) { if ($action === 'info') { return $service->getFixtureContent('v2.0_info.json'); } elseif ($action === 'consumer' && $service->getAccessToken() === 'valid') { return $service->getFixtureContent('v2.0_consumer-access_token-consumer2_paid1.json'); } elseif ($action === 'consumer/validate' && $service->getAccessToken() === 'valid') { return $service->getFixtureContent('v2.0_consumer_validate-access_token-consumer2_paid1.json'); } elseif ($action === 'consumer' && $service->getAccessToken() === 'invalid') { return $service->getFixtureContent('v2.0_consumer-access_token-notexistingtoken.json'); } elseif ($action === 'consumer/validate' && $service->getAccessToken() === 'invalid') { return $service->getFixtureContent('v2.0_consumer_validate-access_token-notexistingtoken.json'); } elseif ($action === 'plugins' && empty($params['purchase_type']) && empty($params['query'])) { return $service->getFixtureContent('v2.0_plugins.json'); } elseif ($action === 'plugins' && $isExceededUser && !empty($params['purchase_type']) && $params['purchase_type'] === PurchaseType::TYPE_PAID && empty($params['query'])) { return $service->getFixtureContent('v2.0_plugins-purchase_type-paid-num_users-201-access_token-consumer2_paid1.json'); } elseif ($action === 'plugins' && $isExpiredUser && !empty($params['purchase_type']) && $params['purchase_type'] === PurchaseType::TYPE_PAID && empty($params['query'])) { return $service->getFixtureContent('v2.0_plugins-purchase_type-paid-access_token-consumer1_paid2_custom1.json'); } elseif ($action === 'plugins' && ($service->hasAccessToken() || $isValidUser) && !empty($params['purchase_type']) && $params['purchase_type'] === PurchaseType::TYPE_PAID && empty($params['query'])) { return $service->getFixtureContent('v2.0_plugins-purchase_type-paid-access_token-consumer2_paid1.json'); } elseif ($action === 'plugins' && !$service->hasAccessToken() && !empty($params['purchase_type']) && $params['purchase_type'] === PurchaseType::TYPE_PAID && empty($params['query'])) { return $service->getFixtureContent('v2.0_plugins-purchase_type-paid-access_token-notexistingtoken.json'); } elseif ($action === 'themes' && empty($params['purchase_type']) && empty($params['query'])) { return $service->getFixtureContent('v2.0_themes.json'); } elseif ($action === 'plugins/Barometer/info') { return $service->getFixtureContent('v2.0_plugins_Barometer_info.json'); } elseif ($action === 'plugins/TreemapVisualization/info') { return $service->getFixtureContent('v2.0_plugins_TreemapVisualization_info.json'); } elseif ($action === 'plugins/PaidPlugin1/info' && $service->hasAccessToken() && $isExceededUser) { $content = $service->getFixtureContent('v2.0_plugins_PaidPlugin1_info-purchase_type-paid-num_users-201-access_token-consumer2_paid1.json'); return removeReviewsUrl($content); } elseif ($action === 'plugins/PaidPlugin1/info' && $service->hasAccessToken()) { $content = $service->getFixtureContent('v2.0_plugins_PaidPlugin1_info-access_token-consumer3_paid1_custom2.json'); return removeReviewsUrl($content); } elseif ($action === 'plugins/PaidPlugin1/info' && !$service->hasAccessToken()) { $content = $service->getFixtureContent('v2.0_plugins_PaidPlugin1_info.json'); return removeReviewsUrl($content); } elseif ($action === 'plugins/checkUpdates') { return $service->getFixtureContent('v2.0_plugins_checkUpdates-pluginspluginsnameAnonymousPi.json'); } }); return $service; }));
<?php return array('Piwik\\Plugins\\QueuedTracking\\Settings' => DI\decorate(function (\Piwik\Plugins\QueuedTracking\Settings $settings) { if ($settings->redisHost->isWritableByCurrentUser()) { $settings->redisHost->setValue('127.0.0.1'); $settings->redisPort->setValue(6379); $settings->redisPassword->setValue(''); $settings->redisDatabase->setValue(15); $settings->numQueueWorkers->setValue(4); } return $settings; }));
<?php return ['event_manager' => \DI\decorate(function ($eventManager, $container) { $eventManager->attach('ERROR_DISPATCH', [$container->get(\ClassicApp\EventListener\DispatcherExceptionListener::class), 'onError']); $eventManager->attach('*', [$container->get(\ClassicApp\EventListener\ExceptionListener::class), 'onError']); return $eventManager; }), \ClassicApp\EventListener\ExceptionListener::class => \DI\object(\ClassicApp\EventListener\ExceptionListener::class)->constructor(\DI\get('template')), \ClassicApp\EventListener\DispatcherExceptionListener::class => \DI\object(\ClassicApp\EventListener\DispatcherExceptionListener::class)->constructor(\DI\get('template')), 'dispatcher' => \DI\factory(function (\DI\Container $c) { $dispatcher = new \ClassicApp\Dispatcher\SymfonyDispatcher($c->get('router')); return $dispatcher; }), 'session' => \DI\factory(function (\DI\Container $c) { $session = new \Symfony\Component\HttpFoundation\Session\Session(); $session->start(); return $session; }), 'translator' => \DI\factory(function () { $translator = new \Symfony\Component\Translation\Translator('en_US', new \Symfony\Component\Translation\MessageSelector()); $translator->addLoader('php', new \Symfony\Component\Translation\Loader\PhpFileLoader()); $translator->addResource('php', './app/Resources/translator/en_US.php', 'en_US'); $translator->addResource('php', './app/Resources/translator/it_IT.php', 'it_IT'); return $translator; }), 'template' => \DI\factory(function (\DI\Container $c) { $twigBridgeViews = __DIR__ . '/../vendor/symfony/twig-bridge/Resources/views/Form'; $loader = new Twig_Loader_Filesystem([$twigBridgeViews, './app/Resources/view']); $twig = new Twig_Environment($loader, $c->get('parameters')['twig']['loader_options']); $twig->addGlobal('show_exception_backtrace', $c->get('parameters')['twig']['show_exception_backtrace']); $twig->addGlobal('session', $c->get('session')); $formEngine = new \Symfony\Bridge\Twig\Form\TwigRendererEngine(['bootstrap_3_layout.html.twig']); $formEngine->setEnvironment($twig); $formExt = new \Symfony\Bridge\Twig\Extension\FormExtension(new \Symfony\Bridge\Twig\Form\TwigRenderer($formEngine)); $twig->addExtension($formExt); $transExt = new \Symfony\Bridge\Twig\Extension\TranslationExtension($c->get('translator')); $twig->addExtension($transExt);
<?php return ['event_manager' => \DI\decorate(function ($eventManager, $container) { $eventManager->attach("ERROR_DISPATCH", [$container->get(\ClassicApp\EventListener\DispatcherExceptionListener::class), "onError"]); $eventManager->attach("*_error", [$container->get(\ClassicApp\EventListener\ExceptionListener::class), "onError"]); return $eventManager; }), \ClassicApp\EventListener\ExceptionListener::class => \DI\object(\ClassicApp\EventListener\ExceptionListener::class)->constructor(\DI\get("template")), \ClassicApp\EventListener\DispatcherExceptionListener::class => \DI\object(\ClassicApp\EventListener\DispatcherExceptionListener::class)->constructor(\DI\get("template")), 'template' => \DI\object(\League\Plates\Engine::class)->constructor('./app/view/'), 'router' => function () { return \FastRoute\simpleDispatcher(function (\FastRoute\RouteCollector $r) { $r->addRoute('GET', '/', ['ClassicApp\\Controller\\IndexController', 'index']); }); }];
} }), 'Piwik\\Config' => DI\decorate(function ($previous, ContainerInterface $c) { $testingEnvironment = $c->get('Piwik\\Tests\\Framework\\TestingEnvironmentVariables'); $dontUseTestConfig = $c->get('test.vars.dontUseTestConfig'); if (!$dontUseTestConfig) { $settingsProvider = $c->get('Piwik\\Application\\Kernel\\GlobalSettingsProvider'); return new TestConfig($settingsProvider, $testingEnvironment, $allowSave = false, $doSetTestEnvironment = true); } else { return $previous; } }), 'Piwik\\Access' => DI\decorate(function ($previous, ContainerInterface $c) { $testUseMockAuth = $c->get('test.vars.testUseMockAuth'); if ($testUseMockAuth) { $access = new FakeAccess(); FakeAccess::$superUser = true; FakeAccess::$superUserLogin = '******'; return $access; } else { return $previous; } }), 'observers.global' => DI\add(array(array('AssetManager.getStylesheetFiles', function (&$stylesheets) { $useOverrideCss = \Piwik\Container\StaticContainer::get('test.vars.useOverrideCss'); if ($useOverrideCss) { $stylesheets[] = 'tests/resources/screenshot-override/override.css'; } }), array('AssetManager.getJavaScriptFiles', function (&$jsFiles) { $useOverrideJs = \Piwik\Container\StaticContainer::get('test.vars.useOverrideJs'); if ($useOverrideJs) { $jsFiles[] = 'tests/resources/screenshot-override/override.js'; } }), array('Updater.checkForUpdates', function () {
return new TestConfig($settingsProvider, $testingEnvironment, $allowSave = false, $doSetTestEnvironment = true); } else { return $previous; } }), 'Piwik\\Access' => DI\decorate(function ($previous, ContainerInterface $c) { $testUseMockAuth = $c->get('test.vars.testUseMockAuth'); if ($testUseMockAuth) { $idSitesAdmin = $c->get('test.vars.idSitesAdminAccess'); $idSitesView = $c->get('test.vars.idSitesViewAccess'); $access = new FakeAccess(); if (!empty($idSitesView)) { FakeAccess::$superUser = false; FakeAccess::$idSitesView = $idSitesView; FakeAccess::$idSitesAdmin = !empty($idSitesAdmin) ? $idSitesAdmin : array(); FakeAccess::$identity = 'viewUserLogin'; } elseif (!empty($idSitesAdmin)) { FakeAccess::$superUser = false; FakeAccess::$idSitesAdmin = $idSitesAdmin; FakeAccess::$identity = 'adminUserLogin'; } else { FakeAccess::$superUser = true; FakeAccess::$superUserLogin = '******'; } return $access; } else { return $previous; } }), 'observers.global' => DI\add(array(array('AssetManager.getStylesheetFiles', function (&$stylesheets) { $useOverrideCss = \Piwik\Container\StaticContainer::get('test.vars.useOverrideCss'); if ($useOverrideCss) { $stylesheets[] = 'tests/resources/screenshot-override/override.css'; }
<?php use Interop\Container\ContainerInterface; function isTrackerDebugEnabled(ContainerInterface $c) { $trackerDebug = $c->get("ini.Tracker.debug"); return $trackerDebug == 1 || !empty($GLOBALS['PIWIK_TRACKER_DEBUG']); } return array('Psr\\Log\\LoggerInterface' => function (ContainerInterface $c) { if (isTrackerDebugEnabled($c)) { return $c->get('Monolog\\Logger'); } else { return new \Psr\Log\NullLogger(); } }, 'log.handler.classes' => DI\decorate(function ($previous) { if (isset($previous['screen'])) { $previous['screen'] = 'Piwik\\Plugins\\Monolog\\Handler\\EchoHandler'; } return $previous; }), 'log.level' => DI\decorate(function ($previous, ContainerInterface $c) { if (isTrackerDebugEnabled($c)) { return \Monolog\Logger::DEBUG; } return $previous; }));
<?php use Penny\ExcpHandler\EventListener\WhoopsListener; return ['event_manager' => \DI\decorate(function ($eventManager, $container) { $eventManager->attach("dispatch_error", [$container->get(WhoopsListener::class), "onError"]); $eventManager->attach("*_error", [$container->get(WhoopsListener::class), "onError"]); // this is usage if we want to use templated error handler // \App\EventListener\ExceptionListener::class => \DI\object(\App\EventListener\ExceptionListener::class) // ->constructor(\DI\get("template")), // \App\EventListener\DispatcherExceptionListener::class => \DI\object(\App\EventListener\DispatcherExceptionListener::class) // ->constructor(\DI\get("template")), return $eventManager; }), WhoopsListener::class => \DI\object(WhoopsListener::class), \App\EventListener\ExceptionListener::class => \DI\object(\App\EventListener\ExceptionListener::class)->constructor(\DI\get("template")), \App\EventListener\DispatcherExceptionListener::class => \DI\object(\App\EventListener\DispatcherExceptionListener::class)->constructor(\DI\get("template")), 'template' => \DI\object(\League\Plates\Engine::class)->constructor('./app/view/'), 'router' => function () { return \FastRoute\simpleDispatcher(function (\FastRoute\RouteCollector $r) { $r->addRoute('GET', '/', ['App\\Controller\\IndexController', 'index']); }); }];