diff --git a/composer.json b/composer.json index d64e8e6..7cf24db 100644 --- a/composer.json +++ b/composer.json @@ -11,10 +11,12 @@ "behat/mink-extension": "*", "behat/mink-browserkit-driver": "*", "behat/mink-goutte-driver": ">=1.0.3", - "sensiolabs/behat-page-object-extension": "*" + "sensiolabs/behat-page-object-extension": "*", + "symfony/http-kernel": "~2.6" }, "require-dev": { "phpspec/phpspec": "~2.0", + "bossa/phpspec2-expect": "dev-master", "mockery/mockery": "*", "magetest/magento": "*" }, diff --git a/features/backend/homepage.feature b/features/backend/homepage.feature index 3b903f3..8d6f3f6 100644 --- a/features/backend/homepage.feature +++ b/features/backend/homepage.feature @@ -1,9 +1,12 @@ Feature: Index Page As a website administrator - I want to see the index page + I want to see the dashboard page So that I can understand what the website offers and how it can benefit me + Background: + Given there is an admin user "admintest" "admin" + Scenario: Display Header -# Given I log in as admin user "admin" identified by "123123pass" - When I open admin URI "/admin/process/list" - Then I should see text "Index Management" + Given I am logged in as admin "admintest" with credentials "admin" + When I open admin URI "/admin/system_account/" + Then I should see that the page title is "Dashboard" diff --git a/features/bootstrap/AdminContext.php b/features/bootstrap/AdminContext.php new file mode 100644 index 0000000..bc8bc34 --- /dev/null +++ b/features/bootstrap/AdminContext.php @@ -0,0 +1,49 @@ +load($username, 'username'); + + if (null === $user->getUsername()) { + $user->setData(array( + 'username' => $username, + 'firstname' => 'Admin', + 'lastname' => 'Admin', + 'email' => 'test@test.com', + 'password' => $password, + 'is_active' => 1 + )) + ->save() + ->setRoleIds(array(1)) + ->setRoleUserId($user->getUserId()) + ->saveRelations(); + } + } + + /** + * @Given I am logged in as admin :username with credentials :password + */ + public function iAmASiteAdmin($username, $password) + { + $sessionId = $this->getSessionService()->adminLogin($username, $password); + $this->getSession()->setCookie('adminhtml', $sessionId); + } + + /** + * @Then I should see that the page title is :title + */ + public function iShouldSeeThatThePageTitleIs($title) + { + $page = $this->getSession()->getPage(); + expect($page->find('css', 'h3')->getText())->toBe($title); + } +} diff --git a/src/MageTest/MagentoExtension/Client/TestClient.php b/src/MageTest/MagentoExtension/Client/TestClient.php new file mode 100644 index 0000000..6c0d8e3 --- /dev/null +++ b/src/MageTest/MagentoExtension/Client/TestClient.php @@ -0,0 +1,59 @@ +kernel = $kernel; + parent::__construct($server); + } + + /** + * Makes a request. + * + * @param HttpRequest $request + * + * @return BrowserKitResponse + */ + protected function doRequest($request) + { + return $this->kernel->handle($request); + } + + /** + * @param HttpResponse $response + * + * @return BrowserKitResponse + */ + protected function filterResponse($response) + { + return new BrowserKitResponse($response->getContent(), $response->getStatusCode(), $response->headers->all()); + } + + /** + * @param BrowserKitRequest $request + * + * @return HttpRequest + */ + protected function filterRequest(BrowserKitRequest $request) + { + return HttpRequest::create($request->getUri(), $request->getMethod()); + } +} diff --git a/src/MageTest/MagentoExtension/Driver/MageApp.php b/src/MageTest/MagentoExtension/Driver/MageApp.php new file mode 100644 index 0000000..004c2db --- /dev/null +++ b/src/MageTest/MagentoExtension/Driver/MageApp.php @@ -0,0 +1,70 @@ +container = $container; + } + + /** + * Handles a Request to convert it to a Response. + * + * @param Request $request A Request instance + * + * @return Response A Response instance + * + * @throws \Exception When an Exception occurs during processing + * + * @api + */ + public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true) + { + $_SERVER['REQUEST_URI'] = $request->getRequestUri(); + + $contents = $this->runApplication(); + + return new Response($contents, 200); + } + + /** + * Gets the current container. + * + * @return ContainerInterface A ContainerInterface instance + * + * @api + */ + public function getContainer() + { + return $this->container; + } + + /** + * @return string + */ + private function runApplication() + { + ob_start(); + \Mage::run(); + $contents = ob_get_contents(); + ob_end_clean(); + \Mage::reset(); + + return $contents; + } +} diff --git a/src/MageTest/MagentoExtension/Driver/MageAppDriver.php b/src/MageTest/MagentoExtension/Driver/MageAppDriver.php new file mode 100644 index 0000000..caf973e --- /dev/null +++ b/src/MageTest/MagentoExtension/Driver/MageAppDriver.php @@ -0,0 +1,17 @@ +getContainer()->get(TestClient::SERVICE_ID), $baseUrl); + } +} \ No newline at end of file diff --git a/src/MageTest/MagentoExtension/Driver/MagentoFactory.php b/src/MageTest/MagentoExtension/Driver/MagentoFactory.php new file mode 100644 index 0000000..692f8a0 --- /dev/null +++ b/src/MageTest/MagentoExtension/Driver/MagentoFactory.php @@ -0,0 +1,65 @@ +getExtension('mink')) { + $minkExtension->registerDriverFactory(new MagentoFactory()); + } } /** @@ -82,6 +87,11 @@ public function load(ContainerBuilder $container, array $config) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/services')); $loader->load('core.xml'); + + $container->setDefinition( + self::KERNEL_ID, + new Definition('MageTest\MagentoExtension\Driver\MageApp', array($container)) + ); } /** diff --git a/src/MageTest/MagentoExtension/services/core.xml b/src/MageTest/MagentoExtension/services/core.xml index 62bd1d8..584ea6a 100644 --- a/src/MageTest/MagentoExtension/services/core.xml +++ b/src/MageTest/MagentoExtension/services/core.xml @@ -9,6 +9,8 @@ MageTest\MagentoExtension\Service\Bootstrap MageTest\MagentoExtension\Context\Initializer\MagentoAwareInitializer MageTest\MagentoExtension\Service\Session + MageTest\MagentoExtension\Driver\MageApp + MageTest\MagentoExtension\Client\TestClient Mage_Core_Model_Config Mage_Core_Model_Config_Data MageTest\MagentoExtension\Context\ClassGuesser @@ -37,5 +39,8 @@ + + +