jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/383412 )

Change subject: Deal with extreme of an empty book
......................................................................


Deal with extreme of an empty book

This edge case currently throws an exception. Let's not do that.

Bug: T175856
Change-Id: I768a89d213611799a227270c6cb2b512c083e7ef
---
M includes/BookRenderer.php
M tests/phpunit/includes/BookRendererTest.php
2 files changed, 29 insertions(+), 8 deletions(-)

Approvals:
  Bmansurov: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/BookRenderer.php b/includes/BookRenderer.php
index 231868e..2dbb07d 100644
--- a/includes/BookRenderer.php
+++ b/includes/BookRenderer.php
@@ -41,6 +41,7 @@
                $articleCount = count( array_filter( $collection['items'], 
function ( $item ) {
                        return $item['type'] === 'article';
                } ) );
+               $hasArticles = $articleCount > 0;
 
                $headingCounter = new HeadingCounter();
                $bookBodyHtml = '';
@@ -119,19 +120,26 @@
                $hasImages = isset( $metadata['images'] ) && 
$metadata['images'];
                $hasLicense = isset( $metadata['license'] ) && 
$metadata['license'];
 
-               $outline = array_merge( $outline,
-                       $this->getAdditionalBookChapters( $tocHeadingCounter, 
$metadataLevel,
-                               $hasImages, $hasLicense )
-               );
+               if ( $hasArticles ) {
+                       $outline = array_merge( $outline,
+                               $this->getAdditionalBookChapters( 
$tocHeadingCounter, $metadataLevel,
+                                       $hasImages, $hasLicense )
+                       );
+               }
 
                $templateData = [
-                       'contributors' => [
-                               'data' => $metadata['contributors'],
-                               'level' => 
$headingCounter->incrementAndGetTopLevel(),
-                       ],
                        'outline' => $outline,
                        'html' => $bookBodyHtml,
                ];
+
+               if ( $hasArticles ) {
+                       $templateData['contributors'] = [
+                               'data' => $metadata['contributors'],
+                               'level' => 
$headingCounter->incrementAndGetTopLevel(),
+                       ];
+               } else {
+                       $templateData['contributors'] = false;
+               }
                if ( $hasImages ) {
                        $templateData['images'] = [
                                'data' => $metadata['images'],
diff --git a/tests/phpunit/includes/BookRendererTest.php 
b/tests/phpunit/includes/BookRendererTest.php
index c3d9ccc..f2d31f8 100644
--- a/tests/phpunit/includes/BookRendererTest.php
+++ b/tests/phpunit/includes/BookRendererTest.php
@@ -21,6 +21,19 @@
                        'Check table of contents generation' );
        }
 
+       public function testGetBookTemplateDataImagesGeneration() {
+               $templateParser = new TemplateParser( __DIR__ . 
'/../../../templates' );
+               $renderer = new BookRenderer( $templateParser );
+               $collection = [ 'items' => [], 'title' => 'Empty book' ];
+               $data = $renderer->getBookTemplateData( $collection, [], [] );
+               $this->assertSame( $data['license'], false, 'Template data for 
empty book has no license' );
+               $this->assertSame( $data['images'], false, 'Template data for 
empty book has no images' );
+               $this->assertSame( $data['contributors'], false,
+                       'Template data for empty book has no contributors' );
+               $this->assertArraySame( $data['outline'], [],
+                       'Template data for empty book has empty outline' );
+       }
+
        /**
         * @dataProvider provideRenderBook
         * @param array[] $collection Collection, as returned by 
CollectionSession::getCollection().

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I768a89d213611799a227270c6cb2b512c083e7ef
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Collection
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>
Gerrit-Reviewer: Bmansurov <bmansu...@wikimedia.org>
Gerrit-Reviewer: C. Scott Ananian <canan...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to