Skip to content

Commit

Permalink
#73: add form and area tests
Browse files Browse the repository at this point in the history
  • Loading branch information
solverat committed Jan 4, 2019
1 parent db0534e commit 2b4dcfe
Show file tree
Hide file tree
Showing 14 changed files with 692 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ public function action(Info $info)
/** @var $formFactory \MembersBundle\Form\Factory\FactoryInterface */
$form = $this->formFactory->createUnnamedForm($formParams);

$view->form = $form->createView();
$view->getParameters()->set('form', $form->createView());
foreach ($params as $key => $param) {
$view->{$key} = $param;
$view->getParameters()->set($key, $param);
}
}

Expand Down
78 changes: 78 additions & 0 deletions tests/_support/Helper/Browser/PhpBrowser.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@
use DachcomBundle\Test\Helper\PimcoreCore;
use DachcomBundle\Test\Helper\PimcoreUser;
use DachcomBundle\Test\Util\MembersHelper;
use MembersBundle\Adapter\User\UserInterface;
use Pimcore\Model\Document\Email;
use Pimcore\Model\User;
use Symfony\Bundle\SwiftmailerBundle\DataCollector\MessageDataCollector;
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBagInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
use Symfony\Component\HttpKernel\Profiler\Profile;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
Expand Down Expand Up @@ -127,6 +129,36 @@ public function seeSentEmailHasPropertyValue(Email $email, string $property, str
}
}

/**
* Actor Function to login into Members FrontEnd
*
* @param UserInterface $membersUser
*/
public function amLoggedInAsFrontendUser(UserInterface $membersUser)
{
$firewallName = 'members_fe';

if (!$membersUser instanceof UserInterface) {
$this->debug(sprintf('[PIMCORE BUNDLE MODULE] user needs to be a instance of %s.', UserInterface::class));
return;
}

/** @var Session $session */
$session = $this->pimcoreCore->getContainer()->get('session');

$token = new UsernamePasswordToken($membersUser, null, $firewallName, $membersUser->getRoles());
$this->pimcoreCore->getContainer()->get('security.token_storage')->setToken($token);

$session->set('_security_' . $firewallName, serialize($token));
$session->save();

$cookie = new Cookie($session->getName(), $session->getId());

$this->pimcoreCore->client->getCookieJar()->clear();
$this->pimcoreCore->client->getCookieJar()->set($cookie);

}

/**
* Actor Function to login into Pimcore Backend
*
Expand Down Expand Up @@ -233,4 +265,50 @@ protected function getCollectedEmails(Email $email)
return $emails;

}

/**
* Actor Function to see if last executed request is in given path
*
* @param string $expectedPath
*/
public function seeLastRequestIsInPath(string $expectedPath)
{
$requestUri = $this->pimcoreCore->client->getInternalRequest()->getUri();
$requestServer = $this->pimcoreCore->client->getInternalRequest()->getServer();

$expectedUri = sprintf('http://%s%s', $requestServer['HTTP_HOST'], $expectedPath);

$this->assertEquals($expectedUri, $requestUri);
}

/**
* Actor Function to check if last _fragment request has given properties in request attributes.
*
* @param array $properties
*/
public function seePropertiesInLastFragmentRequest(array $properties = [])
{
/** @var Profiler $profiler */
$profiler = $this->pimcoreCore->_getContainer()->get('profiler');

$tokens = $profiler->find('', '_fragment', 1, 'GET', '', '');
if (count($tokens) === 0) {
throw new \RuntimeException('No profile found. Is the profiler data collector enabled?');
}

$token = $tokens[0]['token'];
/** @var \Symfony\Component\HttpKernel\Profiler\Profile $profile */
$profile = $profiler->loadProfile($token);

if (!$profile instanceof Profile) {
throw new \RuntimeException(sprintf('Profile with token "%s" not found.', $token));
}

/** @var RequestDataCollector $requestCollector */
$requestCollector = $profile->getCollector('request');

foreach ($properties as $property) {
$this->assertTrue($requestCollector->getRequestAttributes()->has($property), sprintf('"%s" not found in request collector.', $property));
}
}
}
114 changes: 99 additions & 15 deletions tests/_support/Helper/MembersFrontend.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Codeception\Lib\Interfaces\DependsOnModule;
use Codeception\Module;
use DachcomBundle\Test\Util\MembersHelper;
use MembersBundle\Adapter\User\UserInterface;
use MembersBundle\Configuration\Configuration;
use MembersBundle\Manager\UserManager;
Expand Down Expand Up @@ -35,53 +36,102 @@ public function _inject(PimcoreBackend $connection)
$this->pimcoreBackend = $connection;
}

public function haveARegisteredFrontEndUser($published = false)
/**
* Actor Function to create a fully registered frontend user. Confirmation is optionally.
*
* @param bool $confirmed
*
* @return mixed
* @throws \Codeception\Exception\ModuleException
*/
public function haveARegisteredFrontEndUser(bool $confirmed = false)
{
$userManager = $this->getContainer()->get(UserManager::class);
$configuration = $this->getContainer()->get(Configuration::class);

$membersStoreObject = DataObject::getByPath($configuration->getConfig('storage_path'));

$userManager = $this->getContainer()->get(UserManager::class);
$userObject = $userManager->createUser();

$userObject->setParent($membersStoreObject);
$userObject->setEmail('[email protected]');
$userObject->setUserName('chuck');
$userObject->setPlainPassword('test');
$userObject->setEmail(MembersHelper::DEFAULT_FEU_EMAIL);
$userObject->setUserName(MembersHelper::DEFAULT_FEU_USERNAME);
$userObject->setPlainPassword(MembersHelper::DEFAULT_FEU_PASSWORD);
$userObject->setPublished(false);

$user = $userManager->updateUser($userObject);

if ($published === true) {
$user->setConfirmationToken(null);
$user->setPublished(true);
$userManager->updateUser($user);
if ($confirmed === true) {
$this->publishAndConfirmAFrontendUser($user);
}

return $user;
}

public function haveALoggedInFrontEndUser()
/**
* Actor Function to publish and confirm (triggered by updateUser()) a frontend user.
*
* @param UserInterface $user
*
* @throws \Codeception\Exception\ModuleException
*/
public function publishAndConfirmAFrontendUser(UserInterface $user)
{
$user->setPublished(true);

$userManager = $this->getContainer()->get(UserManager::class);
$userManager->updateUser($user);
}

/**
* Actor function to see a logged in frontend user in session bag.
*
* @throws \Codeception\Exception\ModuleException
*/
public function seeALoggedInFrontEndUser()
{
$tokenStorage = $this->getContainer()->get('security.token_storage');

$this->assertNotNull($tokenStorage->getToken());
$this->assertInstanceOf(UserInterface::class, $tokenStorage->getToken()->getUser());
}

public function haveANotLoggedInFrontEndUser()
/**
* Actor Function to see a not logged in frontend user in session bag.
*
* @throws \Codeception\Exception\ModuleException
*/
public function seeANotLoggedInFrontEndUser()
{
$tokenStorage = $this->getContainer()->get('security.token_storage');

$this->assertNotNull($tokenStorage->getToken());
// null is ok in this case!
if (is_null($tokenStorage->getToken())) {
return;
}

$this->assertSame('anon.', $tokenStorage->getToken()->getUser());
}

/**
* Actor Function to see properties in members user object
*
* @param UserInterface $user
* @param array $expectedProperties
*/
public function seePropertiesInFrontendUser(UserInterface $user, array $expectedProperties = [])
{
$userProperties = $user->getProperties();
foreach ($expectedProperties as $property) {
$this->assertArrayHasKey($property, $userProperties);
}
}

/**
* Actor Function to get confirmation link from email
*
* @param Email $email
*
* @return string|null
* @return string
*/
public function haveConfirmationLinkInEmail(Email $email)
{
Expand All @@ -105,34 +155,69 @@ public function haveConfirmationLinkInEmail(Email $email)
$this->assertNotEmpty($link);

return $link;
}

/**
* Actor Function to check if no users are available in storage.
*
* @throws \Exception
*/
public function seeNoFrontendUserInStorage()
{
$list = MembersUser::getList(['unpublished' => true]);
$users = $list->load();

$this->assertCount(0, $users);
}

/**
* Actor Function to check if the last registered user has an valid token.
*
* @throws \Exception
*/
public function seeAUserWithValidToken()
{
$user = $this->grabOneUserAfterRegistration();
$this->assertNotEmpty($user->getConfirmationToken());
}

/**
* Actor Function to check if the last registered user has an invalid token.
*
* @throws \Exception
*/
public function seeAUserWithInvalidatedToken()
{
$user = $this->grabOneUserAfterRegistration();
$this->assertNull($user->getConfirmationToken());
}

/**
* Actor Function to check if the last registered user is published.
*
* @throws \Exception
*/
public function seeAPublishedUserAfterRegistration()
{
$user = $this->grabOneUserAfterRegistration();
$this->assertTrue($user->getPublished());
}

/**
* Actor Function to check if the last registered user is unpublished.
*
* @throws \Exception
*/
public function seeAUnpublishedUserAfterRegistration()
{
$user = $this->grabOneUserAfterRegistration();
$this->assertFalse($user->getPublished());
}

/**
* Actor function to get the last registered frontend user.
* Only one user in storage is allowed here.
*
* @return UserInterface
* @throws \Exception
*/
Expand All @@ -145,7 +230,6 @@ public function grabOneUserAfterRegistration()
$this->assertInstanceOf(UserInterface::class, $users[0]);

return $users[0];

}

/**
Expand Down
Loading

0 comments on commit 2b4dcfe

Please sign in to comment.