From: Jeremy Benoist Date: Wed, 20 Jul 2016 10:02:02 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/master' into 2.1 X-Git-Tag: 2.1.0~63 X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=0faeabefa7faedb3a6a3675a5e49e947554adae9;hp=2bb138ef6df2d1a608b42907185b274fb87f4513;p=github%2Fwallabag%2Fwallabag.git Merge remote-tracking branch 'origin/master' into 2.1 --- diff --git a/.gitignore b/.gitignore index 5eca0e6b..fb51034e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ /var/sessions/* !var/sessions/.gitkeep !var/SymfonyRequirements.php +/bin/* +!/bin/console +!/bin/symfony_requirements # Parameters /app/config/parameters.yml diff --git a/.travis.yml b/.travis.yml index 17c3abaf..dd8815c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ php: - 5.5 - 5.6 - 7.0 + - nightly - hhvm node_js: diff --git a/README.md b/README.md index 2a7b54bf..0d87d7bb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ More informations on our website: [wallabag.org](https://wallabag.org) # Install wallabag -If you don't have it yet, please [install composer](https://getcomposer.org/download/). +If you don't have it yet, please [install composer](https://getcomposer.org/download/) or be sure to use Composer 1.2 (`composer selfupdate` can help you about that). Then you can install wallabag by executing the following commands: ``` diff --git a/app/config/config.yml b/app/config/config.yml index 29847820..a1517e97 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -5,25 +5,27 @@ imports: framework: #esi: ~ - translator: { fallback: "%locale%" } - secret: "%secret%" + translator: + enabled: true + fallback: "%locale%" + secret: "%secret%" router: resource: "%kernel.root_dir%/config/routing.yml" strict_requirements: ~ - form: ~ + form: ~ csrf_protection: ~ - validation: { enable_annotations: true } + validation: + enable_annotations: true templating: engines: ['twig'] - #assets_version: SomeVersionScheme - default_locale: "%locale%" - trusted_hosts: ~ + default_locale: "%locale%" + trusted_hosts: ~ trusted_proxies: ~ session: # handler_id set to null will use default session handler from php.ini - handler_id: session.handler.native_file - save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" - fragments: ~ + handler_id: session.handler.native_file + save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" + fragments: ~ http_method_override: true assets: ~ @@ -54,7 +56,7 @@ wallabag_import: # Twig Configuration twig: - debug: "%kernel.debug%" + debug: "%kernel.debug%" strict_variables: "%kernel.debug%" form_themes: - "LexikFormFilterBundle:Form:form_div_layout.html.twig" @@ -62,14 +64,14 @@ twig: # Doctrine Configuration doctrine: dbal: - driver: "%database_driver%" + driver: "%database_driver%" host: "%database_host%" port: "%database_port%" dbname: "%database_name%" user: "%database_user%" password: "%database_password%" - charset: UTF8 - path: "%database_path%" + charset: UTF8 + path: "%database_path%" server_version: 5.6 orm: @@ -95,10 +97,11 @@ doctrine_migrations: # Swiftmailer Configuration swiftmailer: transport: "%mailer_transport%" - host: "%mailer_host%" - username: "%mailer_user%" - password: "%mailer_password%" - spool: { type: memory } + host: "%mailer_host%" + username: "%mailer_user%" + password: "%mailer_password%" + spool: + type: memory fos_rest: param_fetcher_listener: true @@ -160,7 +163,7 @@ liip_theme: fos_user: db_driver: orm - firewall_name: main + firewall_name: secured_area user_class: Wallabag\UserBundle\Entity\User registration: confirmation: diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml index f3030ff1..77840682 100644 --- a/app/config/config_dev.yml +++ b/app/config/config_dev.yml @@ -5,7 +5,8 @@ framework: router: resource: "%kernel.root_dir%/config/routing_dev.yml" strict_requirements: true - profiler: { only_exceptions: false } + profiler: + only_exceptions: false web_profiler: toolbar: true @@ -14,19 +15,19 @@ web_profiler: monolog: handlers: main: - type: stream - path: "%kernel.logs_dir%/%kernel.environment%.log" - level: debug + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug channels: ['!event'] console: - type: console + type: console bubble: false verbosity_levels: VERBOSITY_VERBOSE: INFO VERBOSITY_VERY_VERBOSE: DEBUG channels: ['!event', '!doctrine'] console_very_verbose: - type: console + type: console bubble: false verbosity_levels: VERBOSITY_VERBOSE: NOTICE diff --git a/app/config/config_prod.yml b/app/config/config_prod.yml index 65b040cc..5a4dd69e 100644 --- a/app/config/config_prod.yml +++ b/app/config/config_prod.yml @@ -14,12 +14,12 @@ imports: monolog: handlers: main: - type: fingers_crossed + type: fingers_crossed action_level: error - handler: nested + handler: nested nested: - type: stream - path: "%kernel.logs_dir%/%kernel.environment%.log" + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" level: debug console: - type: console + type: console diff --git a/app/config/routing.yml b/app/config/routing.yml index 6a6aa6ac..40cc7165 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -4,8 +4,8 @@ wallabag_annotation: wallabag_import: resource: "@WallabagImportBundle/Controller/" - type: annotation - prefix: /import + type: annotation + prefix: /import wallabag_api: resource: "@WallabagApiBundle/Resources/config/routing.yml" diff --git a/app/config/routing_dev.yml b/app/config/routing_dev.yml index 404f6a3b..95c1b026 100644 --- a/app/config/routing_dev.yml +++ b/app/config/routing_dev.yml @@ -1,14 +1,14 @@ _wdt: resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" - prefix: /_wdt + prefix: /_wdt _profiler: resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" - prefix: /_profiler + prefix: /_profiler _errors: resource: "@TwigBundle/Resources/config/routing/errors.xml" - prefix: /_error + prefix: /_error _main: resource: routing.yml diff --git a/app/config/security.yml b/app/config/security.yml index 0748c06c..e24e03df 100644 --- a/app/config/security.yml +++ b/app/config/security.yml @@ -3,12 +3,14 @@ security: FOS\UserBundle\Model\UserInterface: sha512 role_hierarchy: - ROLE_ADMIN: ROLE_USER + ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] providers: administrators: - entity: { class: WallabagUserBundle:User, property: username } + entity: + class: WallabagUserBundle:User + property: username fos_userbundle: id: fos_user.user_provider.username @@ -31,7 +33,7 @@ security: anonymous: true login_firewall: - pattern: ^/login$ + pattern: ^/login$ anonymous: ~ secured_area: @@ -40,12 +42,12 @@ security: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager - anonymous: true + anonymous: true remember_me: - secret: "%secret%" + secret: "%secret%" lifetime: 31536000 - path: / - domain: ~ + path: / + domain: ~ logout: path: /logout diff --git a/bin/doctrine b/bin/doctrine deleted file mode 120000 index 0f72e36f..00000000 --- a/bin/doctrine +++ /dev/null @@ -1 +0,0 @@ -../vendor/doctrine/orm/bin/doctrine \ No newline at end of file diff --git a/bin/doctrine-dbal b/bin/doctrine-dbal deleted file mode 120000 index 110e93c5..00000000 --- a/bin/doctrine-dbal +++ /dev/null @@ -1 +0,0 @@ -../vendor/doctrine/dbal/bin/doctrine-dbal \ No newline at end of file diff --git a/bin/doctrine-migrations b/bin/doctrine-migrations deleted file mode 120000 index 7184da71..00000000 --- a/bin/doctrine-migrations +++ /dev/null @@ -1 +0,0 @@ -../vendor/doctrine/migrations/bin/doctrine-migrations \ No newline at end of file diff --git a/bin/doctrine.php b/bin/doctrine.php deleted file mode 120000 index b22b74da..00000000 --- a/bin/doctrine.php +++ /dev/null @@ -1 +0,0 @@ -../vendor/doctrine/orm/bin/doctrine.php \ No newline at end of file diff --git a/bin/php-cs-fixer b/bin/php-cs-fixer deleted file mode 120000 index 4d771203..00000000 --- a/bin/php-cs-fixer +++ /dev/null @@ -1 +0,0 @@ -../vendor/friendsofphp/php-cs-fixer/php-cs-fixer \ No newline at end of file diff --git a/bin/security-checker b/bin/security-checker deleted file mode 120000 index 85f6e8ed..00000000 --- a/bin/security-checker +++ /dev/null @@ -1 +0,0 @@ -../vendor/sensiolabs/security-checker/security-checker \ No newline at end of file diff --git a/bin/symfony_requirements b/bin/symfony_requirements index 7cd559a4..8825a964 100755 --- a/bin/symfony_requirements +++ b/bin/symfony_requirements @@ -13,7 +13,7 @@ echo '> PHP is using the following php.ini file:'.PHP_EOL; if ($iniPath) { echo_style('green', ' '.$iniPath); } else { - echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); + echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!'); } echo PHP_EOL.PHP_EOL; diff --git a/composer.json b/composer.json index 7beb9bd9..38ccec81 100644 --- a/composer.json +++ b/composer.json @@ -73,7 +73,7 @@ "grandt/phpepub": "~4.0", "wallabag/php-mobi": "~1.0.0", "kphoen/rulerz-bundle": "~0.10", - "guzzlehttp/guzzle": "^5.2.0", + "guzzlehttp/guzzle": "^5.3.1", "doctrine/doctrine-migrations-bundle": "^1.0", "paragonie/random_compat": "~1.0", "craue/config-bundle": "~1.4", diff --git a/docs/en/user/installation.rst b/docs/en/user/installation.rst index 58d9fb7e..bd3095e0 100644 --- a/docs/en/user/installation.rst +++ b/docs/en/user/installation.rst @@ -37,7 +37,7 @@ Installation On a dedicated web server (recommended way) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -wallabag uses a large number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so. +wallabag uses a large number of libraries in order to function. These libraries must be installed with a tool called Composer. You need to install it if you have not already done so and be sure to use the 1.2 version (if you already have Composer, run a ``composer selfupdate``). Install Composer: diff --git a/docs/fr/user/installation.rst b/docs/fr/user/installation.rst index b1136c12..0693fc5d 100644 --- a/docs/fr/user/installation.rst +++ b/docs/fr/user/installation.rst @@ -35,7 +35,7 @@ Installation Sur un serveur dédié (méthode conseillée) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait. +wallabag utilise un grand nombre de bibliothèques pour fonctionner. Ces bibliothèques doivent être installées à l'aide d'un outil nommé Composer. Vous devez l'installer si ce n'est déjà fait et vous assurer que vous utilisez bien la version 1.2 (si vous avez déjà Composer, faite un ``composer selfupdate``). Installation de Composer : diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml index f3fa44f1..5a755e6c 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml @@ -135,7 +135,7 @@ config: entry: page_titles: - unread: 'Artúclos no leídos' + unread: 'Artículos no leídos' starred: 'Artículos favoritos' archived: 'Artículos archivados' filtered: 'Artículos filtrados' diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index ed0ad2f6..56382096 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig @@ -129,10 +129,10 @@ - + - +

diff --git a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php index f503ff4b..03355f5a 100644 --- a/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/SecurityControllerTest.php @@ -36,7 +36,7 @@ class SecurityControllerTest extends WallabagCoreTestCase $em->persist($user); $em->flush(); - $this->logInAs('admin'); + $this->logInAsUsingHttp('admin'); $crawler = $client->request('GET', '/config'); $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(['_text'])[0]); diff --git a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php index a019d36c..58450e5f 100644 --- a/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/TagControllerTest.php @@ -39,6 +39,12 @@ class TagControllerTest extends WallabagCoreTestCase $client->submit($form, $data); $this->assertEquals(302, $client->getResponse()->getStatusCode()); + // be sure to reload the entry + $entry = $client->getContainer() + ->get('doctrine.orm.entity_manager') + ->getRepository('WallabagCoreBundle:Entry') + ->findOneByUsernameAndNotArchived('admin'); + $this->assertEquals(1, count($entry->getTags())); # tag already exists and already assigned diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php index c69e8330..c0055888 100644 --- a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php +++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php @@ -3,6 +3,7 @@ namespace Tests\Wallabag\CoreBundle; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Symfony\Component\BrowserKit\Cookie; abstract class WallabagCoreTestCase extends WebTestCase { @@ -20,7 +21,38 @@ abstract class WallabagCoreTestCase extends WebTestCase $this->client = static::createClient(); } + /** + * Login a user without making a HTTP request. + * If we make a HTTP request we lose ability to mock service in the container. + * + * @param string $username User to log in + */ public function logInAs($username) + { + $container = $this->client->getContainer(); + $session = $container->get('session'); + + $userManager = $container->get('fos_user.user_manager'); + $loginManager = $container->get('fos_user.security.login_manager'); + $firewallName = $container->getParameter('fos_user.firewall_name'); + + $user = $userManager->findUserBy(array('username' => $username)); + $loginManager->loginUser($firewallName, $user); + + $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); + $session->save(); + + $cookie = new Cookie($session->getName(), $session->getId()); + $this->client->getCookieJar()->set($cookie); + } + + /** + * Instead of `logInAs` this method use a HTTP request to log in the user. + * Could be better for some tests. + * + * @param string $username User to log in + */ + public function logInAsUsingHttp($username) { $crawler = $this->client->request('GET', '/login'); $form = $crawler->filter('button[type=submit]')->form(); diff --git a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php index 6aaf1b57..e0e61df8 100644 --- a/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php +++ b/tests/Wallabag/ImportBundle/Controller/PocketControllerTest.php @@ -22,15 +22,13 @@ class PocketControllerTest extends WallabagCoreTestCase $this->logInAs('admin'); $client = $this->getClient(); - $crawler = $client->request('GET', '/import/pocket/auth'); + $client->request('GET', '/import/pocket/auth'); $this->assertEquals(302, $client->getResponse()->getStatusCode()); } public function testImportPocketAuth() { - $this->markTestSkipped('PocketImport: Find a way to properly mock a service.'); - $this->logInAs('admin'); $client = $this->getClient(); @@ -43,9 +41,9 @@ class PocketControllerTest extends WallabagCoreTestCase ->method('getRequestToken') ->willReturn('token'); - $client->getContainer()->set('wallabag_import.pocket.import', $pocketImport); + static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); - $crawler = $client->request('GET', '/import/pocket/auth'); + $client->request('GET', '/import/pocket/auth'); $this->assertEquals(301, $client->getResponse()->getStatusCode()); $this->assertContains('getpocket.com/auth/authorize', $client->getResponse()->headers->get('location')); @@ -56,10 +54,55 @@ class PocketControllerTest extends WallabagCoreTestCase $this->logInAs('admin'); $client = $this->getClient(); - $crawler = $client->request('GET', '/import/pocket/callback'); + $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') + ->disableOriginalConstructor() + ->getMock(); + + $pocketImport + ->expects($this->once()) + ->method('authorize') + ->willReturn(false); + + static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); + + $client->request('GET', '/import/pocket/callback'); $this->assertEquals(302, $client->getResponse()->getStatusCode()); - $this->assertContains('import/pocket', $client->getResponse()->headers->get('location')); + $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); } + + public function testImportPocketCallback() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') + ->disableOriginalConstructor() + ->getMock(); + + $pocketImport + ->expects($this->once()) + ->method('authorize') + ->willReturn(true); + + $pocketImport + ->expects($this->once()) + ->method('setMarkAsRead') + ->with(false) + ->willReturn($pocketImport); + + $pocketImport + ->expects($this->once()) + ->method('import') + ->willReturn(true); + + static::$kernel->getContainer()->set('wallabag_import.pocket.import', $pocketImport); + + $client->request('GET', '/import/pocket/callback'); + + $this->assertEquals(302, $client->getResponse()->getStatusCode()); + $this->assertContains('/', $client->getResponse()->headers->get('location'), 'Import is ok, redirect to homepage'); + $this->assertEquals('flashes.import.notice.summary', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); + } } diff --git a/tests/Wallabag/ImportBundle/fixtures/unnamed.png b/tests/Wallabag/ImportBundle/fixtures/unnamed.png new file mode 100644 index 00000000..e6dd9caa Binary files /dev/null and b/tests/Wallabag/ImportBundle/fixtures/unnamed.png differ