vendor/bundles/FOS/UserBundle/Tests/DependencyInjection/FOSUserExtensionTest.php
changeset 3 e54dfe4d0b2b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/FOS/UserBundle/Tests/DependencyInjection/FOSUserExtensionTest.php	Fri Sep 30 11:24:53 2011 +0200
@@ -0,0 +1,426 @@
+<?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);
+    }
+}