Jdlrobson has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/383476 )

Change subject: WIP: Add tests for the fixTemplateData method
......................................................................

WIP: Add tests for the fixTemplateData method

The previous patch surfaced an issue in that code. Let's ensure
we've captured all possible edge cases here.

Change-Id: Ifaf12815f56706a7393544564400803b99bc72eb
---
M includes/BookRenderer.php
M tests/phpunit/includes/BookRendererTest.php
2 files changed, 46 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Collection 
refs/changes/76/383476/1

diff --git a/includes/BookRenderer.php b/includes/BookRenderer.php
index e5d0d50..ad36066 100644
--- a/includes/BookRenderer.php
+++ b/includes/BookRenderer.php
@@ -333,14 +333,18 @@
         * @param array $data
         * @return array
         */
-       private function fixTemplateData( $data ) {
+       public function fixTemplateData( $data ) {
                $fixedData = [];
                if ( !is_array( $data ) ) {
                        return $data;
                }
                foreach ( $data as $field => $value ) {
                        // treat 0/'0' as truthy
-                       $fixedData[$field . '?'] = !in_array( $value, [ false, 
[], '' ], true );
+                       if ( is_array( $value ) ) {
+                               $fixedData[$field . '?'] = !in_array( $value, [ 
false, [], '' ], true );
+                       } else if ( is_string( $value ) ) {
+                               $fixedData[$field . '?'] = (bool)$value;
+                       }
                        if ( is_array( $value ) ) {
                                if ( array_keys( $value ) === array_keys( 
array_values( $value ) ) ) {
                                        // consecutive numeric keys - treat as 
an array
diff --git a/tests/phpunit/includes/BookRendererTest.php 
b/tests/phpunit/includes/BookRendererTest.php
index e7d2ad3..a9eb961 100644
--- a/tests/phpunit/includes/BookRendererTest.php
+++ b/tests/phpunit/includes/BookRendererTest.php
@@ -8,21 +8,58 @@
 use Title;
 
 class BookRendererTest extends MediaWikiTestCase {
+       const TEMPLATE_DIR = '/../../../templates';
+
        /**
         * @dataProvider provideGetBookTemplateDataOutlineGeneration
         */
        public function testGetBookTemplateDataOutlineGeneration(
                $collection, $pages, $metadata, $expectedOutline
        ) {
-               $templateParser = new TemplateParser( __DIR__ . 
'/../../../templates' );
+               $templateParser = new TemplateParser( __DIR__ . 
self::TEMPLATE_DIR );
                $renderer = new BookRenderer( $templateParser );
                $data = $renderer->getBookTemplateData( $collection, $pages, 
$metadata );
                $this->assertArraySame( $renderer->getNestedOutline( 
$expectedOutline ), $data['toc']['tocitems'],
                        'Check table of contents generation' );
        }
 
+       public function testfixTemplateData() {
+               $templateParser = new TemplateParser( __DIR__ . 
self::TEMPLATE_DIR );
+               $renderer = new BookRenderer( $templateParser );
+               $fixedData = $renderer->fixTemplateData( [
+                       'a' => false,
+                       'b' => [],
+                       'c' => [
+                               'd' => [ 'a', 'b', 'c' ],
+                               'e' => false,
+                               'f' => [
+                                       'g' => [ 'a', 'b', 'c' ],
+                               ],
+                       ],
+                       'd' => 'hello world'
+               ] );
+               $this->assertArraySame( $fixedData, [
+                       'a' => false,
+                       'b?' => false,
+                       'b' => [],
+                       'c?' => true,
+                       'c' => [
+                               'd?' => true,
+                               'd' => [ 'a', 'b', 'c' ],
+                               'e' => false,
+                               'f?' => true,
+                               'f' => [
+                                       'g?' => true,
+                                       'g' => [ 'a', 'b', 'c' ],
+                               ],
+                       ],
+                       'd?' => true,
+                       'd' => 'hello world',
+               ] );
+       }
+
        public function testGetBookTemplateDataImagesGeneration() {
-               $templateParser = new TemplateParser( __DIR__ . 
'/../../../templates' );
+               $templateParser = new TemplateParser( __DIR__ . 
self::TEMPLATE_DIR );
                $renderer = new BookRenderer( $templateParser );
                $collection = [ 'items' => [], 'title' => 'Empty book' ];
                $data = $renderer->getBookTemplateData( $collection, [], [] );
@@ -44,7 +81,7 @@
        public function testRenderBook(
                $collection, $pages, $metadata, $expectedHtml
        ) {
-               $templateParser = new TemplateParser( __DIR__ . 
'/../../../templates' );
+               $templateParser = new TemplateParser( __DIR__ . 
self::TEMPLATE_DIR );
                $templateParser->enableRecursivePartials( true );
                $renderer = new BookRenderer( $templateParser );
                $html = $renderer->renderBook( $collection, $pages, $metadata );

-- 
To view, visit https://gerrit.wikimedia.org/r/383476
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifaf12815f56706a7393544564400803b99bc72eb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Collection
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to