<?php
/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace FOS\UserBundle\Tests\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use FOS\UserBundle\DependencyInjection\FOSUserExtension;
use Symfony\Component\Yaml\Parser;
class FOSUserExtensionTest extends \PHPUnit_Framework_TestCase
{
protected $configuration;
/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/
public function testUserLoadThrowsExceptionUnlessDatabaseDriverSet()
{
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
unset($config['db_driver']);
$loader->load(array($config), new ContainerBuilder());
}
/**
* @expectedException \InvalidArgumentException
*/
public function testUserLoadThrowsExceptionUnlessDatabaseDriverIsValid()
{
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$config['db_driver'] = 'foo';
$loader->load(array($config), new ContainerBuilder());
}
/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/
public function testUserLoadThrowsExceptionUnlessFirewallNameSet()
{
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
unset($config['firewall_name']);
$loader->load(array($config), new ContainerBuilder());
}
/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/
public function testUserLoadThrowsExceptionUnlessGroupModelClassSet()
{
$loader = new FOSUserExtension();
$config = $this->getFullConfig();
unset($config['group']['group_class']);
$loader->load(array($config), new ContainerBuilder());
}
/**
* @expectedException \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
*/
public function testUserLoadThrowsExceptionUnlessUserModelClassSet()
{
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
unset($config['user_class']);
$loader->load(array($config), new ContainerBuilder());
}
public function testDisableRegistration()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$config['registration'] = false;
$loader->load(array($config), $this->configuration);
$this->assertNotHasDefinition('fos_user.registration.form');
}
public function testDisableResetting()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$config['resetting'] = false;
$loader->load(array($config), $this->configuration);
$this->assertNotHasDefinition('fos_user.resetting.form');
}
public function testDisableProfile()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$config['profile'] = false;
$loader->load(array($config), $this->configuration);
$this->assertNotHasDefinition('fos_user.profile.form');
}
public function testDisableChangePassword()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$config['change_password'] = false;
$loader->load(array($config), $this->configuration);
$this->assertNotHasDefinition('fos_user.change_password.form');
}
public function testUserLoadModelClassWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter('Acme\MyBundle\Document\User', 'fos_user.model.user.class');
}
public function testUserLoadModelClass()
{
$this->createFullConfiguration();
$this->assertParameter('Acme\MyBundle\Entity\User', 'fos_user.model.user.class');
}
public function testUserLoadManagerClassWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter(null, 'fos_user.model_manager_name');
$this->assertAlias('fos_user.user_manager.default', 'fos_user.user_manager');
$this->assertNotHasDefinition('fos_user.group_manager');
}
public function testUserLoadManagerClass()
{
$this->createFullConfiguration();
$this->assertParameter('custom', 'fos_user.model_manager_name');
$this->assertAlias('acme_my.user_manager', 'fos_user.user_manager');
$this->assertAlias('fos_user.group_manager.default', 'fos_user.group_manager');
}
public function testUserLoadFormClassWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter('fos_user_profile', 'fos_user.profile.form.type');
$this->assertParameter('fos_user_registration', 'fos_user.registration.form.type');
$this->assertParameter('fos_user_change_password', 'fos_user.change_password.form.type');
$this->assertParameter('fos_user_resetting', 'fos_user.resetting.form.type');
}
public function testUserLoadFormClass()
{
$this->createFullConfiguration();
$this->assertParameter('acme_my_profile', 'fos_user.profile.form.type');
$this->assertParameter('acme_my_registration', 'fos_user.registration.form.type');
$this->assertParameter('acme_my_group', 'fos_user.group.form.type');
$this->assertParameter('acme_my_change_password', 'fos_user.change_password.form.type');
$this->assertParameter('acme_my_resetting', 'fos_user.resetting.form.type');
}
public function testUserLoadFormNameWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter('fos_user_profile_form', 'fos_user.profile.form.name');
$this->assertParameter('fos_user_registration_form', 'fos_user.registration.form.name');
$this->assertParameter('fos_user_change_password_form', 'fos_user.change_password.form.name');
$this->assertParameter('fos_user_resetting_form', 'fos_user.resetting.form.name');
}
public function testUserLoadFormName()
{
$this->createFullConfiguration();
$this->assertParameter('acme_profile_form', 'fos_user.profile.form.name');
$this->assertParameter('acme_registration_form', 'fos_user.registration.form.name');
$this->assertParameter('acme_group_form', 'fos_user.group.form.name');
$this->assertParameter('acme_change_password_form', 'fos_user.change_password.form.name');
$this->assertParameter('acme_resetting_form', 'fos_user.resetting.form.name');
}
public function testUserLoadFormServiceWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertHasDefinition('fos_user.profile.form');
$this->assertHasDefinition('fos_user.registration.form');
$this->assertNotHasDefinition('fos_user.group.form');
$this->assertHasDefinition('fos_user.change_password.form');
$this->assertHasDefinition('fos_user.resetting.form');
}
public function testUserLoadFormService()
{
$this->createFullConfiguration();
$this->assertHasDefinition('fos_user.profile.form');
$this->assertHasDefinition('fos_user.registration.form');
$this->assertHasDefinition('fos_user.group.form');
$this->assertHasDefinition('fos_user.change_password.form');
$this->assertHasDefinition('fos_user.resetting.form');
}
public function testUserLoadConfirmationEmailWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter(false, 'fos_user.registration.confirmation.enabled');
$this->assertParameter(array('webmaster@example.com' => 'webmaster'), 'fos_user.registration.confirmation.from_email');
$this->assertParameter('FOSUserBundle:Registration:email.txt.twig', 'fos_user.registration.confirmation.template');
$this->assertParameter('FOSUserBundle:Resetting:email.txt.twig', 'fos_user.resetting.email.template');
$this->assertParameter(array('webmaster@example.com' => 'webmaster'), 'fos_user.resetting.email.from_email');
$this->assertParameter(86400, 'fos_user.resetting.token_ttl');
}
public function testUserLoadConfirmationEmail()
{
$this->createFullConfiguration();
$this->assertParameter(true, 'fos_user.registration.confirmation.enabled');
$this->assertParameter(array('register@acme.org' => 'Acme Corp'), 'fos_user.registration.confirmation.from_email');
$this->assertParameter('AcmeMyBundle:Registration:mail.txt.twig', 'fos_user.registration.confirmation.template');
$this->assertParameter('AcmeMyBundle:Resetting:mail.txt.twig', 'fos_user.resetting.email.template');
$this->assertParameter(array('reset@acme.org' => 'Acme Corp'), 'fos_user.resetting.email.from_email');
$this->assertParameter(1800, 'fos_user.resetting.token_ttl');
}
public function testUserLoadTemplateConfigWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter('twig', 'fos_user.template.engine');
$this->assertParameter('FOSUserBundle::form.html.twig', 'fos_user.template.theme');
}
public function testUserLoadTemplateConfig()
{
$this->createFullConfiguration();
$this->assertParameter('php', 'fos_user.template.engine');
$this->assertParameter('AcmeMyBundle:Form:theme.html.twig', 'fos_user.template.theme');
}
public function testUserLoadEncoderConfigWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertParameter('sha512', 'fos_user.encoder.algorithm');
$this->assertParameter(false, 'fos_user.encoder.encode_as_base64');
$this->assertParameter(1, 'fos_user.encoder.iterations');
}
public function testUserLoadEncoderConfig()
{
$this->createFullConfiguration();
$this->assertParameter('sha1', 'fos_user.encoder.algorithm');
$this->assertParameter(true, 'fos_user.encoder.encode_as_base64');
$this->assertParameter(3, 'fos_user.encoder.iterations');
}
public function testUserLoadUtilServiceWithDefaults()
{
$this->createEmptyConfiguration();
$this->assertAlias('fos_user.mailer.default', 'fos_user.mailer');
$this->assertAlias('fos_user.util.email_canonicalizer.default', 'fos_user.util.email_canonicalizer');
$this->assertAlias('fos_user.util.username_canonicalizer.default', 'fos_user.util.username_canonicalizer');
}
public function testUserLoadUtilService()
{
$this->createFullConfiguration();
$this->assertAlias('acme_my.mailer', 'fos_user.mailer');
$this->assertAlias('acme_my.email_canonicalizer', 'fos_user.util.email_canonicalizer');
$this->assertAlias('acme_my.username_canonicalizer', 'fos_user.util.username_canonicalizer');
}
/**
* @return ContainerBuilder
*/
protected function createEmptyConfiguration()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getEmptyConfig();
$loader->load(array($config), $this->configuration);
$this->assertTrue($this->configuration instanceof ContainerBuilder);
}
/**
* @return ContainerBuilder
*/
protected function createFullConfiguration()
{
$this->configuration = new ContainerBuilder();
$loader = new FOSUserExtension();
$config = $this->getFullConfig();
$loader->load(array($config), $this->configuration);
$this->assertTrue($this->configuration instanceof ContainerBuilder);
}
/**
* getEmptyConfig
*
* @return array
*/
protected function getEmptyConfig()
{
$yaml = <<<EOF
db_driver: mongodb
firewall_name: fos_user
user_class: Acme\MyBundle\Document\User
EOF;
$parser = new Parser();
return $parser->parse($yaml);
}
protected function getFullConfig()
{
$yaml = <<<EOF
db_driver: orm
firewall_name: fos_user
use_listener: true
user_class: Acme\MyBundle\Entity\User
model_manager_name: custom
from_email:
address: admin@acme.org
sender_name: Acme Corp
profile:
form:
type: acme_my_profile
handler: acme_my.form.handler.profile
name: acme_profile_form
validation_groups: [acme_profile]
change_password:
form:
type: acme_my_change_password
handler: acme_my.form.handler.change_password
name: acme_change_password_form
validation_groups: [acme_change_password]
registration:
confirmation:
from_email:
address: register@acme.org
sender_name: Acme Corp
enabled: true
template: AcmeMyBundle:Registration:mail.txt.twig
form:
type: acme_my_registration
handler: acme_my.form.handler.registration
name: acme_registration_form
validation_groups: [acme_registration]
resetting:
token_ttl: 1800
email:
from_email:
address: reset@acme.org
sender_name: Acme Corp
template: AcmeMyBundle:Resetting:mail.txt.twig
form:
type: acme_my_resetting
handler: acme_my.form.handler.resetting
name: acme_resetting_form
validation_groups: [acme_resetting]
service:
mailer: acme_my.mailer
email_canonicalizer: acme_my.email_canonicalizer
username_canonicalizer: acme_my.username_canonicalizer
user_manager: acme_my.user_manager
encoder:
algorithm: sha1
encode_as_base64: true
iterations: 3
template:
engine: php
theme: AcmeMyBundle:Form:theme.html.twig
group:
group_class: Acme\MyBundle\Entity\Group
form:
type: acme_my_group
handler: acme_my.form.handler.group
name: acme_group_form
validation_groups: [acme_group]
EOF;
$parser = new Parser();
return $parser->parse($yaml);
}
private function assertAlias($value, $key)
{
$this->assertEquals($value, (string) $this->configuration->getAlias($key), sprintf('%s alias is correct', $key));
}
private function assertParameter($value, $key)
{
$this->assertEquals($value, $this->configuration->getParameter($key), sprintf('%s parameter is correct', $key));
}
private function assertHasDefinition($id)
{
$this->assertTrue(($this->configuration->hasDefinition($id) ?: $this->configuration->hasAlias($id)));
}
private function assertNotHasDefinition($id)
{
$this->assertFalse(($this->configuration->hasDefinition($id) ?: $this->configuration->hasAlias($id)));
}
protected function tearDown()
{
unset($this->configuration);
}
}