2015-02-16 21:28:49 +01:00
< ? php
namespace Wallabag\CoreBundle\Tests\Controller ;
2015-03-29 10:53:10 +02:00
use Wallabag\CoreBundle\Tests\WallabagCoreTestCase ;
2015-02-16 21:28:49 +01:00
2015-03-29 10:53:10 +02:00
class ConfigControllerTest extends WallabagCoreTestCase
2015-02-16 21:28:49 +01:00
{
public function testLogin ()
{
$client = $this -> getClient ();
$client -> request ( 'GET' , '/new' );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$this -> assertContains ( 'login' , $client -> getResponse () -> headers -> get ( 'location' ));
}
public function testIndex ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-02-17 21:03:23 +01:00
$this -> assertCount ( 1 , $crawler -> filter ( 'button[id=config_save]' ));
$this -> assertCount ( 1 , $crawler -> filter ( 'button[id=change_passwd_save]' ));
2015-03-28 00:10:39 +01:00
$this -> assertCount ( 1 , $crawler -> filter ( 'button[id=update_user_save]' ));
2015-03-28 21:43:49 +01:00
$this -> assertCount ( 1 , $crawler -> filter ( 'button[id=new_user_save]' ));
$this -> assertCount ( 1 , $crawler -> filter ( 'button[id=rss_config_save]' ));
2015-02-16 21:28:49 +01:00
}
public function testUpdate ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-02-17 21:03:23 +01:00
$form = $crawler -> filter ( 'button[id=config_save]' ) -> form ();
2015-02-16 21:28:49 +01:00
$data = array (
2015-12-29 09:59:46 +01:00
'config[theme]' => 'baggy' ,
2015-02-16 21:28:49 +01:00
'config[items_per_page]' => '30' ,
2016-03-18 13:12:09 +01:00
'config[reading_speed]' => '0.5' ,
2015-10-01 16:28:38 +02:00
'config[language]' => 'en' ,
2015-02-16 21:28:49 +01:00
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
2015-02-23 22:55:06 +01:00
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
2015-02-16 21:28:49 +01:00
$this -> assertContains ( 'Config saved' , $alert [ 0 ]);
}
public function dataForUpdateFailed ()
{
return array (
array ( array (
2015-12-29 09:59:46 +01:00
'config[theme]' => 'baggy' ,
2015-02-16 21:28:49 +01:00
'config[items_per_page]' => '' ,
2015-10-01 16:28:38 +02:00
'config[language]' => 'en' ,
2015-02-16 21:28:49 +01:00
)),
);
}
/**
* @ dataProvider dataForUpdateFailed
*/
public function testUpdateFailed ( $data )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-02-17 21:03:23 +01:00
$form = $crawler -> filter ( 'button[id=config_save]' ) -> form ();
2015-02-16 21:28:49 +01:00
$crawler = $client -> submit ( $form , $data );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( 'This value should not be blank' , $alert [ 0 ]);
}
2015-02-17 21:03:23 +01:00
public function dataForChangePasswordFailed ()
{
return array (
array (
array (
2015-08-04 22:51:21 +02:00
'change_passwd[old_password]' => 'material' ,
2015-02-17 21:03:23 +01:00
'change_passwd[new_password][first]' => '' ,
'change_passwd[new_password][second]' => '' ,
),
2016-03-09 08:59:08 +01:00
'validator.password_wrong_value' ,
2015-02-17 21:03:23 +01:00
),
array (
array (
'change_passwd[old_password]' => 'mypassword' ,
'change_passwd[new_password][first]' => '' ,
'change_passwd[new_password][second]' => '' ,
),
2015-02-17 22:45:20 +01:00
'This value should not be blank' ,
2015-02-17 21:03:23 +01:00
),
array (
array (
'change_passwd[old_password]' => 'mypassword' ,
'change_passwd[new_password][first]' => 'hop' ,
'change_passwd[new_password][second]' => '' ,
),
2016-03-09 08:59:08 +01:00
'validator.password_must_match' ,
2015-02-17 21:03:23 +01:00
),
array (
array (
'change_passwd[old_password]' => 'mypassword' ,
'change_passwd[new_password][first]' => 'hop' ,
'change_passwd[new_password][second]' => 'hop' ,
),
2016-03-09 08:59:08 +01:00
'validator.password_too_short' ,
2015-02-17 21:03:23 +01:00
),
);
}
/**
* @ dataProvider dataForChangePasswordFailed
*/
public function testChangePasswordFailed ( $data , $expectedMessage )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=change_passwd_save]' ) -> form ();
$crawler = $client -> submit ( $form , $data );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( $expectedMessage , $alert [ 0 ]);
}
public function testChangePassword ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=change_passwd_save]' ) -> form ();
$data = array (
'change_passwd[old_password]' => 'mypassword' ,
'change_passwd[new_password][first]' => 'mypassword' ,
'change_passwd[new_password][second]' => 'mypassword' ,
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
2015-02-23 22:55:06 +01:00
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
2015-02-17 21:03:23 +01:00
$this -> assertContains ( 'Password updated' , $alert [ 0 ]);
}
2015-02-17 22:45:20 +01:00
public function dataForUserFailed ()
{
return array (
array (
array (
2015-03-28 00:10:39 +01:00
'update_user[name]' => '' ,
'update_user[email]' => '' ,
2015-02-17 22:45:20 +01:00
),
2016-03-09 08:59:08 +01:00
'fos_user.email.blank' ,
2015-02-17 22:45:20 +01:00
),
array (
array (
2015-03-28 00:10:39 +01:00
'update_user[name]' => '' ,
'update_user[email]' => 'test' ,
2015-02-17 22:45:20 +01:00
),
2016-03-09 08:59:08 +01:00
'fos_user.email.invalid' ,
2015-02-17 22:45:20 +01:00
),
);
}
/**
* @ dataProvider dataForUserFailed
*/
public function testUserFailed ( $data , $expectedMessage )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-03-28 00:10:39 +01:00
$form = $crawler -> filter ( 'button[id=update_user_save]' ) -> form ();
2015-02-17 22:45:20 +01:00
$crawler = $client -> submit ( $form , $data );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( $expectedMessage , $alert [ 0 ]);
}
public function testUserUpdate ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-03-28 00:10:39 +01:00
$form = $crawler -> filter ( 'button[id=update_user_save]' ) -> form ();
2015-02-17 22:45:20 +01:00
$data = array (
2015-03-28 00:10:39 +01:00
'update_user[name]' => 'new name' ,
'update_user[email]' => 'admin@wallabag.io' ,
2015-02-17 22:45:20 +01:00
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
2016-03-09 08:59:08 +01:00
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
2015-02-17 22:45:20 +01:00
$this -> assertContains ( 'Information updated' , $alert [ 0 ]);
}
2015-02-22 09:30:25 +01:00
public function dataForNewUserFailed ()
{
return array (
array (
array (
'new_user[username]' => '' ,
2015-09-29 14:31:52 +02:00
'new_user[plainPassword][first]' => '' ,
'new_user[plainPassword][second]' => '' ,
2015-02-22 09:30:25 +01:00
'new_user[email]' => '' ,
),
2016-03-09 08:59:08 +01:00
'fos_user.username.blank' ,
2015-02-22 09:30:25 +01:00
),
array (
array (
2015-08-25 16:29:22 +02:00
'new_user[username]' => 'a' ,
2015-09-29 14:31:52 +02:00
'new_user[plainPassword][first]' => 'mypassword' ,
'new_user[plainPassword][second]' => 'mypassword' ,
2015-02-22 09:30:25 +01:00
'new_user[email]' => '' ,
),
2016-03-09 08:59:08 +01:00
'fos_user.username.short' ,
2015-02-22 09:30:25 +01:00
),
array (
array (
'new_user[username]' => 'wallace' ,
2015-09-29 14:31:52 +02:00
'new_user[plainPassword][first]' => 'mypassword' ,
'new_user[plainPassword][second]' => 'mypassword' ,
2015-02-22 09:30:25 +01:00
'new_user[email]' => 'test' ,
),
2016-03-09 08:59:08 +01:00
'fos_user.email.invalid' ,
2015-02-22 09:30:25 +01:00
),
2015-03-28 00:10:39 +01:00
array (
array (
'new_user[username]' => 'admin' ,
2015-09-29 14:31:52 +02:00
'new_user[plainPassword][first]' => 'wallacewallace' ,
'new_user[plainPassword][second]' => 'wallacewallace' ,
2015-03-28 00:10:39 +01:00
'new_user[email]' => 'wallace@wallace.me' ,
),
2016-03-09 08:59:08 +01:00
'fos_user.username.already_used' ,
2015-03-28 00:10:39 +01:00
),
2015-09-29 14:31:52 +02:00
array (
array (
'new_user[username]' => 'wallace' ,
'new_user[plainPassword][first]' => 'mypassword1' ,
'new_user[plainPassword][second]' => 'mypassword2' ,
'new_user[email]' => 'wallace@wallace.me' ,
),
2016-03-09 08:59:08 +01:00
'validator.password_must_match' ,
2015-09-29 14:31:52 +02:00
),
2015-02-22 09:30:25 +01:00
);
}
/**
* @ dataProvider dataForNewUserFailed
*/
public function testNewUserFailed ( $data , $expectedMessage )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=new_user_save]' ) -> form ();
$crawler = $client -> submit ( $form , $data );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( $expectedMessage , $alert [ 0 ]);
}
public function testNewUserCreated ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=new_user_save]' ) -> form ();
$data = array (
'new_user[username]' => 'wallace' ,
2015-09-29 14:31:52 +02:00
'new_user[plainPassword][first]' => 'wallace1' ,
'new_user[plainPassword][second]' => 'wallace1' ,
2015-02-22 09:30:25 +01:00
'new_user[email]' => 'wallace@wallace.me' ,
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
2015-02-23 22:55:06 +01:00
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
2015-02-22 09:30:25 +01:00
$this -> assertContains ( 'User "wallace" added' , $alert [ 0 ]);
2015-09-26 19:35:00 +02:00
$em = $client -> getContainer () -> get ( 'doctrine.orm.entity_manager' );
$user = $em
2015-10-02 14:51:41 +02:00
-> getRepository ( 'WallabagUserBundle:User' )
2015-09-26 19:35:00 +02:00
-> findOneByUsername ( 'wallace' );
$this -> assertTrue ( false !== $user );
$this -> assertTrue ( $user -> isEnabled ());
2015-02-22 09:30:25 +01:00
}
2015-03-28 21:43:49 +01:00
public function testRssUpdateResetToken ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
// reset the token
$em = $client -> getContainer () -> get ( 'doctrine.orm.entity_manager' );
$user = $em
2015-10-02 14:51:41 +02:00
-> getRepository ( 'WallabagUserBundle:User' )
2015-03-28 21:43:49 +01:00
-> findOneByUsername ( 'admin' );
if ( ! $user ) {
$this -> markTestSkipped ( 'No user found in db.' );
}
$config = $user -> getConfig ();
$config -> setRssToken ( null );
$em -> persist ( $config );
$em -> flush ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $body = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
2016-03-09 08:59:08 +01:00
$this -> assertContains ( 'config.form_rss.no_token' , $body [ 0 ]);
2015-03-28 21:43:49 +01:00
$client -> request ( 'GET' , '/generate-token' );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
$this -> assertGreaterThan ( 1 , $body = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
2016-03-09 08:59:08 +01:00
$this -> assertNotContains ( 'config.form_rss.no_token' , $body [ 0 ]);
2015-03-28 21:43:49 +01:00
}
public function testGenerateTokenAjax ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$client -> request (
'GET' ,
'/generate-token' ,
array (),
array (),
array ( 'HTTP_X-Requested-With' => 'XMLHttpRequest' )
);
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2015-04-01 21:53:57 +02:00
$content = json_decode ( $client -> getResponse () -> getContent (), true );
2015-03-28 21:43:49 +01:00
$this -> assertArrayHasKey ( 'token' , $content );
}
public function testRssUpdate ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=rss_config_save]' ) -> form ();
$data = array (
'rss_config[rss_limit]' => 12 ,
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
$this -> assertContains ( 'RSS information updated' , $alert [ 0 ]);
}
public function dataForRssFailed ()
{
return array (
array (
array (
'rss_config[rss_limit]' => 0 ,
),
'This value should be 1 or more.' ,
),
array (
array (
'rss_config[rss_limit]' => 1000000000000 ,
),
2016-03-09 08:59:08 +01:00
'validator.rss_limit_too_hight' ,
2015-03-28 21:43:49 +01:00
),
);
}
/**
* @ dataProvider dataForRssFailed
*/
public function testRssFailed ( $data , $expectedMessage )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=rss_config_save]' ) -> form ();
$crawler = $client -> submit ( $form , $data );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( $expectedMessage , $alert [ 0 ]);
}
2015-10-31 16:21:56 +01:00
public function testTaggingRuleCreation ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertTrue ( $client -> getResponse () -> isSuccessful ());
$form = $crawler -> filter ( 'button[id=tagging_rule_save]' ) -> form ();
$data = array (
'tagging_rule[rule]' => 'readingTime <= 3' ,
'tagging_rule[tags]' => 'short reading' ,
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
$this -> assertContains ( 'Tagging rules updated' , $alert [ 0 ]);
2015-11-13 21:23:39 +01:00
$deleteLink = $crawler -> filter ( '.delete' ) -> last () -> link ();
2015-10-31 16:21:56 +01:00
$crawler = $client -> click ( $deleteLink );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$crawler = $client -> followRedirect ();
$this -> assertGreaterThan ( 1 , $alert = $crawler -> filter ( 'div.messages.success' ) -> extract ( array ( '_text' )));
$this -> assertContains ( 'Tagging rule deleted' , $alert [ 0 ]);
}
public function dataForTaggingRuleFailed ()
{
return array (
array (
array (
2016-01-21 18:06:10 +01:00
'tagging_rule[rule]' => 'unknownVar <= 3' ,
'tagging_rule[tags]' => 'cool tag' ,
),
array (
'The variable' ,
'does not exist.' ,
2015-10-31 16:21:56 +01:00
),
),
array (
array (
2016-01-21 18:06:10 +01:00
'tagging_rule[rule]' => 'length(domainName) <= 42' ,
'tagging_rule[tags]' => 'cool tag' ,
),
array (
'The operator' ,
'does not exist.' ,
2015-10-31 16:21:56 +01:00
),
),
);
}
2016-01-21 18:06:10 +01:00
/**
* @ dataProvider dataForTaggingRuleFailed
*/
public function testTaggingRuleCreationFail ( $data , $messages )
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertTrue ( $client -> getResponse () -> isSuccessful ());
$form = $crawler -> filter ( 'button[id=tagging_rule_save]' ) -> form ();
2016-03-11 09:42:08 +01:00
$crawler = $client -> submit ( $form , $data );
2016-01-21 18:06:10 +01:00
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
2016-03-11 09:42:08 +01:00
$this -> assertGreaterThan ( 1 , $body = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
2016-01-21 18:06:10 +01:00
foreach ( $messages as $message ) {
2016-03-11 09:42:08 +01:00
$this -> assertContains ( $message , $body [ 0 ]);
2016-01-21 18:06:10 +01:00
}
}
public function testDeletingTaggingRuleFromAnOtherUser ()
{
$this -> logInAs ( 'bob' );
$client = $this -> getClient ();
$rule = $client -> getContainer () -> get ( 'doctrine.orm.entity_manager' )
-> getRepository ( 'WallabagCoreBundle:TaggingRule' )
-> findAll ()[ 0 ];
2016-03-11 09:42:08 +01:00
$crawler = $client -> request ( 'GET' , '/tagging-rule/delete/' . $rule -> getId ());
2016-01-21 18:06:10 +01:00
$this -> assertEquals ( 403 , $client -> getResponse () -> getStatusCode ());
2016-03-11 09:42:08 +01:00
$this -> assertGreaterThan ( 1 , $body = $crawler -> filter ( 'body' ) -> extract ( array ( '_text' )));
$this -> assertContains ( 'You can not access this tagging rule' , $body [ 0 ]);
2016-01-21 18:06:10 +01:00
}
2016-02-22 13:33:22 +01:00
public function testDemoMode ()
{
$this -> logInAs ( 'admin' );
$client = $this -> getClient ();
$config = $client -> getContainer () -> get ( 'craue_config' );
$config -> set ( 'demo_mode_enabled' , 1 );
$config -> set ( 'demo_mode_username' , 'admin' );
$crawler = $client -> request ( 'GET' , '/config' );
$this -> assertEquals ( 200 , $client -> getResponse () -> getStatusCode ());
$form = $crawler -> filter ( 'button[id=change_passwd_save]' ) -> form ();
$data = array (
'change_passwd[old_password]' => 'mypassword' ,
'change_passwd[new_password][first]' => 'mypassword' ,
'change_passwd[new_password][second]' => 'mypassword' ,
);
$client -> submit ( $form , $data );
$this -> assertEquals ( 302 , $client -> getResponse () -> getStatusCode ());
$this -> assertContains ( 'In demonstration mode, you can\'t change password for this user.' , $client -> getContainer () -> get ( 'session' ) -> getFlashBag () -> get ( 'notice' )[ 0 ]);
$config -> set ( 'demo_mode_enabled' , 0 );
$config -> set ( 'demo_mode_username' , 'wallabag' );
}
2015-02-16 21:28:49 +01:00
}