X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FWallabag%2FCoreBundle%2FTests%2FController%2FConfigControllerTest.php;h=8cdedfda38bdf66bf6c47cb8f76a78de55830afb;hb=49e2854d5c15bbce3f24f91da34450e8f209295b;hp=f72cba6595ed690d064c93e66a3a0429aa5cbb0c;hpb=75e9d1df03831a3dc1f92b0ef713c5e2f90fa543;p=github%2Fwallabag%2Fwallabag.git diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index f72cba65..8cdedfda 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php @@ -43,11 +43,12 @@ class ConfigControllerTest extends WallabagCoreTestCase $form = $crawler->filter('button[id=config_save]')->form(); - $data = array( - 'config[theme]' => 0, + $data = [ + 'config[theme]' => 'baggy', 'config[items_per_page]' => '30', - 'config[language]' => 'fr_FR', - ); + 'config[reading_speed]' => '0.5', + 'config[language]' => 'en', + ]; $client->submit($form, $data); @@ -55,24 +56,56 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); - $this->assertContains('Config saved', $alert[0]); + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); + $this->assertContains('flashes.config.notice.config_saved', $alert[0]); + } + + public function testChangeReadingSpeed() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/unread/list'); + $form = $crawler->filter('button[id=submit-filter]')->form(); + $dataFilters = [ + 'entry_filter[readingTime][right_number]' => 22, + 'entry_filter[readingTime][left_number]' => 22, + ]; + $crawler = $client->submit($form, $dataFilters); + $this->assertCount(1, $crawler->filter('div[class=entry]')); + + // Change reading speed + $crawler = $client->request('GET', '/config'); + $form = $crawler->filter('button[id=config_save]')->form(); + $data = [ + 'config[reading_speed]' => '2', + ]; + $client->submit($form, $data); + + // Is the entry still available via filters? + $crawler = $client->request('GET', '/unread/list'); + $form = $crawler->filter('button[id=submit-filter]')->form(); + $crawler = $client->submit($form, $dataFilters); + $this->assertCount(0, $crawler->filter('div[class=entry]')); + + // Restore old configuration + $crawler = $client->request('GET', '/config'); + $form = $crawler->filter('button[id=config_save]')->form(); + $data = [ + 'config[reading_speed]' => '0.5', + ]; + $client->submit($form, $data); } public function dataForUpdateFailed() { - return array( - array(array( - 'config[theme]' => 0, + return [ + [[ + 'config[theme]' => 'baggy', 'config[items_per_page]' => '', - 'config[language]' => 'fr_FR', - )), - array(array( - 'config[theme]' => 0, - 'config[items_per_page]' => '12', - 'config[language]' => '', - )), - ); + 'config[language]' => 'en', + ]], + ]; } /** @@ -93,46 +126,46 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); $this->assertContains('This value should not be blank', $alert[0]); } public function dataForChangePasswordFailed() { - return array( - array( - array( - 'change_passwd[old_password]' => 'baggy', + return [ + [ + [ + 'change_passwd[old_password]' => 'material', 'change_passwd[new_password][first]' => '', 'change_passwd[new_password][second]' => '', - ), - 'Wrong value for your current password', - ), - array( - array( + ], + 'validator.password_wrong_value', + ], + [ + [ 'change_passwd[old_password]' => 'mypassword', 'change_passwd[new_password][first]' => '', 'change_passwd[new_password][second]' => '', - ), + ], 'This value should not be blank', - ), - array( - array( + ], + [ + [ 'change_passwd[old_password]' => 'mypassword', 'change_passwd[new_password][first]' => 'hop', 'change_passwd[new_password][second]' => '', - ), - 'The password fields must match', - ), - array( - array( + ], + 'validator.password_must_match', + ], + [ + [ 'change_passwd[old_password]' => 'mypassword', 'change_passwd[new_password][first]' => 'hop', 'change_passwd[new_password][second]' => 'hop', - ), - 'Password should by at least', - ), - ); + ], + 'validator.password_too_short', + ], + ]; } /** @@ -153,7 +186,7 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); $this->assertContains($expectedMessage, $alert[0]); } @@ -168,11 +201,11 @@ class ConfigControllerTest extends WallabagCoreTestCase $form = $crawler->filter('button[id=change_passwd_save]')->form(); - $data = array( + $data = [ 'change_passwd[old_password]' => 'mypassword', 'change_passwd[new_password][first]' => 'mypassword', 'change_passwd[new_password][second]' => 'mypassword', - ); + ]; $client->submit($form, $data); @@ -180,28 +213,28 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); - $this->assertContains('Password updated', $alert[0]); + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); + $this->assertContains('flashes.config.notice.password_updated', $alert[0]); } public function dataForUserFailed() { - return array( - array( - array( + return [ + [ + [ 'update_user[name]' => '', 'update_user[email]' => '', - ), - 'This value should not be blank.', - ), - array( - array( + ], + 'fos_user.email.blank', + ], + [ + [ 'update_user[name]' => '', 'update_user[email]' => 'test', - ), - 'This value is not a valid email address.', - ), - ); + ], + 'fos_user.email.invalid', + ], + ]; } /** @@ -222,7 +255,7 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); $this->assertContains($expectedMessage, $alert[0]); } @@ -237,10 +270,10 @@ class ConfigControllerTest extends WallabagCoreTestCase $form = $crawler->filter('button[id=update_user_save]')->form(); - $data = array( + $data = [ 'update_user[name]' => 'new name', 'update_user[email]' => 'admin@wallabag.io', - ); + ]; $client->submit($form, $data); @@ -248,54 +281,59 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); - $this->assertContains('Information updated', $alert[0]); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); + $this->assertContains('flashes.config.notice.user_updated', $alert[0]); } public function dataForNewUserFailed() { - return array( - array( - array( + return [ + [ + [ 'new_user[username]' => '', - 'new_user[password]' => '', + 'new_user[plainPassword][first]' => '', + 'new_user[plainPassword][second]' => '', 'new_user[email]' => '', - ), - 'This value should not be blank.', - ), - array( - array( - 'new_user[username]' => 'ad', - 'new_user[password]' => '', + ], + 'fos_user.username.blank', + ], + [ + [ + 'new_user[username]' => 'a', + 'new_user[plainPassword][first]' => 'mypassword', + 'new_user[plainPassword][second]' => 'mypassword', 'new_user[email]' => '', - ), - 'This value is too short.', - ), - array( - array( + ], + 'fos_user.username.short', + ], + [ + [ 'new_user[username]' => 'wallace', - 'new_user[password]' => '', + 'new_user[plainPassword][first]' => 'mypassword', + 'new_user[plainPassword][second]' => 'mypassword', 'new_user[email]' => 'test', - ), - 'This value is not a valid email address.', - ), - array( - array( - 'new_user[username]' => 'wallace', - 'new_user[password]' => 'admin', - 'new_user[email]' => 'wallace@wallace.me', - ), - 'Password should by at least', - ), - array( - array( + ], + 'fos_user.email.invalid', + ], + [ + [ 'new_user[username]' => 'admin', - 'new_user[password]' => 'wallacewallace', + 'new_user[plainPassword][first]' => 'wallacewallace', + 'new_user[plainPassword][second]' => 'wallacewallace', 'new_user[email]' => 'wallace@wallace.me', - ), - 'This value is already used', - ), - ); + ], + 'fos_user.username.already_used', + ], + [ + [ + 'new_user[username]' => 'wallace', + 'new_user[plainPassword][first]' => 'mypassword1', + 'new_user[plainPassword][second]' => 'mypassword2', + 'new_user[email]' => 'wallace@wallace.me', + ], + 'validator.password_must_match', + ], + ]; } /** @@ -316,7 +354,7 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); $this->assertContains($expectedMessage, $alert[0]); } @@ -331,11 +369,12 @@ class ConfigControllerTest extends WallabagCoreTestCase $form = $crawler->filter('button[id=new_user_save]')->form(); - $data = array( + $data = [ 'new_user[username]' => 'wallace', - 'new_user[password]' => 'wallace1', + 'new_user[plainPassword][first]' => 'wallace1', + 'new_user[plainPassword][second]' => 'wallace1', 'new_user[email]' => 'wallace@wallace.me', - ); + ]; $client->submit($form, $data); @@ -343,8 +382,21 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); - $this->assertContains('User "wallace" added', $alert[0]); + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); + $this->assertContains('flashes.config.notice.user_added', $alert[0]); + + $em = $client->getContainer()->get('doctrine.orm.entity_manager'); + $user = $em + ->getRepository('WallabagUserBundle:User') + ->findOneByUsername('wallace'); + + $this->assertTrue(false !== $user); + $this->assertTrue($user->isEnabled()); + $this->assertEquals('material', $user->getConfig()->getTheme()); + $this->assertEquals(12, $user->getConfig()->getItemsPerPage()); + $this->assertEquals(50, $user->getConfig()->getRssLimit()); + $this->assertEquals('en', $user->getConfig()->getLanguage()); + $this->assertEquals(1, $user->getConfig()->getReadingSpeed()); } public function testRssUpdateResetToken() @@ -355,7 +407,7 @@ class ConfigControllerTest extends WallabagCoreTestCase // reset the token $em = $client->getContainer()->get('doctrine.orm.entity_manager'); $user = $em - ->getRepository('WallabagCoreBundle:User') + ->getRepository('WallabagUserBundle:User') ->findOneByUsername('admin'); if (!$user) { @@ -371,16 +423,16 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); - $this->assertContains('You need to generate a token first.', $body[0]); + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertContains('config.form_rss.no_token', $body[0]); $client->request('GET', '/generate-token'); $this->assertEquals(302, $client->getResponse()->getStatusCode()); $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); - $this->assertNotContains('You need to generate a token first.', $body[0]); + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertNotContains('config.form_rss.no_token', $body[0]); } public function testGenerateTokenAjax() @@ -391,9 +443,9 @@ class ConfigControllerTest extends WallabagCoreTestCase $client->request( 'GET', '/generate-token', - array(), - array(), - array('HTTP_X-Requested-With' => 'XMLHttpRequest') + [], + [], + ['HTTP_X-Requested-With' => 'XMLHttpRequest'] ); $this->assertEquals(200, $client->getResponse()->getStatusCode()); @@ -408,18 +460,13 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->request('GET', '/config'); - if (500 == $client->getResponse()->getStatusCode()) { - var_export($client->getResponse()->getContent()); - die(); - } - $this->assertEquals(200, $client->getResponse()->getStatusCode()); $form = $crawler->filter('button[id=rss_config_save]')->form(); - $data = array( + $data = [ 'rss_config[rss_limit]' => 12, - ); + ]; $client->submit($form, $data); @@ -427,26 +474,26 @@ class ConfigControllerTest extends WallabagCoreTestCase $crawler = $client->followRedirect(); - $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); - $this->assertContains('RSS information updated', $alert[0]); + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); + $this->assertContains('flashes.config.notice.rss_updated', $alert[0]); } public function dataForRssFailed() { - return array( - array( - array( + return [ + [ + [ 'rss_config[rss_limit]' => 0, - ), + ], 'This value should be 1 or more.', - ), - array( - array( + ], + [ + [ 'rss_config[rss_limit]' => 1000000000000, - ), - 'This will certainly kill the app', - ), - ); + ], + 'validator.rss_limit_too_hight', + ], + ]; } /** @@ -467,7 +514,139 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertEquals(200, $client->getResponse()->getStatusCode()); - $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); + $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(['_text'])); $this->assertContains($expectedMessage, $alert[0]); } + + 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 = [ + '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(['_text'])); + $this->assertContains('flashes.config.notice.tagging_rules_updated', $alert[0]); + + $deleteLink = $crawler->filter('.delete')->last()->link(); + + $crawler = $client->click($deleteLink); + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + + $crawler = $client->followRedirect(); + $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(['_text'])); + $this->assertContains('flashes.config.notice.tagging_rules_deleted', $alert[0]); + } + + public function dataForTaggingRuleFailed() + { + return [ + [ + [ + 'tagging_rule[rule]' => 'unknownVar <= 3', + 'tagging_rule[tags]' => 'cool tag', + ], + [ + 'The variable', + 'does not exist.', + ], + ], + [ + [ + 'tagging_rule[rule]' => 'length(domainName) <= 42', + 'tagging_rule[tags]' => 'cool tag', + ], + [ + 'The operator', + 'does not exist.', + ], + ], + ]; + } + + /** + * @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(); + + $crawler = $client->submit($form, $data); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + + foreach ($messages as $message) { + $this->assertContains($message, $body[0]); + } + } + + public function testDeletingTaggingRuleFromAnOtherUser() + { + $this->logInAs('bob'); + $client = $this->getClient(); + + $rule = $client->getContainer()->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:TaggingRule') + ->findAll()[0]; + + $crawler = $client->request('GET', '/tagging-rule/delete/'.$rule->getId()); + + $this->assertEquals(403, $client->getResponse()->getStatusCode()); + $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(['_text'])); + $this->assertContains('You can not access this tagging rule', $body[0]); + } + + 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 = [ + '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('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]); + + $config->set('demo_mode_enabled', 0); + $config->set('demo_mode_username', 'wallabag'); + } }