From 894570356c66c0e7f35eca1d487a03b35a7f3284 Mon Sep 17 00:00:00 2001 From: drishu Date: Fri, 16 Dec 2022 15:18:04 +0200 Subject: [PATCH 1/8] OEL-1915: Add oebt dev branch. --- composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer.json b/composer.json index d28a6213a..43967527e 100644 --- a/composer.json +++ b/composer.json @@ -90,6 +90,9 @@ "patches": { "drupal/entity_reference_revisions": { "https://www.drupal.org/project/entity_reference_revisions/issues/2937835": "https://www.drupal.org/files/issues/2021-03-26/entity_reference_revisions-field_formatter_label-2937835-36.patch" + }, + "openeuropa/oe_bootstrap_theme": { + "dev": "https://github.com/openeuropa/oe_bootstrap_theme/compare/1.x...OEL-1915.diff" } }, "drupal-scaffold": { From 4ac2f3af6c37e6969b17c54ee7f81116735b5831 Mon Sep 17 00:00:00 2001 From: drishu Date: Fri, 16 Dec 2022 15:19:02 +0200 Subject: [PATCH 2/8] OEL-1915: Add date field to the event teaser. --- .../oe_whitelabel_starter_event.module | 37 ++++++++++++++++++- .../node--oe-sc-event--teaser.html.twig | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module index d1869ad7e..e02abf686 100755 --- a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module +++ b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module @@ -79,7 +79,7 @@ function _oe_whitelabel_starter_event_preprocess_links(array &$variables): void * Implements template_preprocess_node() for the Event node type. */ function oe_whitelabel_starter_event_preprocess_node__oe_sc_event__teaser(&$variables) { - _oe_whitelabel_starter_event_preprocess_featured_media($variables); + _oe_whitelabel_starter_event_preprocess_date($variables); } /** @@ -171,3 +171,38 @@ function _oe_whitelabel_starter_event_preprocess_inpage_nav(array &$variables): ]; } } + +/** + * Helper function to preprocess the date field. + * + * @param array $variables + * Render array variables. + */ +function _oe_whitelabel_starter_event_preprocess_date(array &$variables): void { + /** @var \Drupal\node\NodeInterface $node */ + $node = $variables['node']; + + if ($node->get('oe_sc_event_dates')->isEmpty()) { + return; + } + + $dates = $node->get('oe_sc_event_dates')->first(); + /** @var \Drupal\Core\Datetime\DrupalDateTime $start */ + $start = $dates->get('start_date')->getValue(); + $variables['date_block'] = [ + 'year' => $start->format('Y'), + 'month' => $start->format('M'), + 'day' => $start->format('d'), + 'date_time' => $start->format('Y-m-d'), + ]; + /** @var \Drupal\Core\Datetime\DrupalDateTime $end */ + $end = $dates->get('end_date')->getValue(); + + if (!empty($end) && $start->format('d-m-y') !== $end->format('d-m-y')) { + $variables['date_block'] += [ + 'end_year' => $end->format('Y'), + 'end_month' => $end->format('M'), + 'end_day' => $end->format('d'), + ]; + } +} diff --git a/templates/content/node--oe-sc-event--teaser.html.twig b/templates/content/node--oe-sc-event--teaser.html.twig index df62e02cb..ce288839d 100755 --- a/templates/content/node--oe-sc-event--teaser.html.twig +++ b/templates/content/node--oe-sc-event--teaser.html.twig @@ -12,7 +12,7 @@ variant: 'search', title: _title, text: content.oe_summary, - image: image, + date: date_block, meta: [ content.oe_sc_event_dates|field_value, content.oe_sc_event_location|field_value From 4c0a66f01741a7d510f695b682bd8df4b832cf41 Mon Sep 17 00:00:00 2001 From: drishu Date: Mon, 19 Dec 2022 11:39:06 +0200 Subject: [PATCH 3/8] OEL-1915: Use new CardPatternAssert in Event test. --- .../src/Functional/ContentEventRenderTest.php | 69 ++++++++++--------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/tests/src/Functional/ContentEventRenderTest.php b/tests/src/Functional/ContentEventRenderTest.php index 7691c7de9..ff624b2db 100644 --- a/tests/src/Functional/ContentEventRenderTest.php +++ b/tests/src/Functional/ContentEventRenderTest.php @@ -8,8 +8,8 @@ use Drupal\media\Entity\Media; use Drupal\node\NodeInterface; use Drupal\Tests\media\Traits\MediaTypeCreationTrait; +use Drupal\Tests\oe_bootstrap_theme\PatternAssertion\CardPatternAssert; use Drupal\Tests\TestFileCreationTrait; -use Symfony\Component\DomCrawler\Crawler; /** * Tests that the Event content type renders correctly. @@ -164,28 +164,25 @@ public function testEventRenderingTeaser(): void { // Build node teaser view. $builder = \Drupal::entityTypeManager()->getViewBuilder('node'); $build = $builder->view($node, 'teaser'); - $render = $this->container->get('renderer')->renderRoot($build); - $crawler = new Crawler((string) $render); - - $article = $crawler->filter('article'); - $this->assertCount(1, $article); - - $this->assertEquals( - 'Test event node', - trim($article->filter('h1.card-title')->text()) - ); - $image = $article->filter('img'); - $this->assertCount(1, $image); - $this->assertCount(1, $image->filter('.card-img-top')); - $this->assertStringContainsString( - 'image-test.png', - trim($image->attr('src')) - ); - - $time = $crawler->filter('div > span.text-muted:nth-of-type(1)'); - $this->assertEquals('9 Feb 2022', trim($time->text())); - $address = $crawler->filter('div > span.text-muted:nth-of-type(2)'); - $this->assertEquals('Brussel, Belgium', trim($address->text())); + $html = (string) $this->container->get('renderer')->renderRoot($build); + + $expected = [ + 'title' => 'Test event node', + 'description' => 'https://www.example.org is a web page', + 'content' => [ + '9 Feb 2022', + 'Brussel, Belgium', + ], + 'date' => [ + 'year' => '2022', + 'month' => 'Feb', + 'day' => '09', + 'date_time' => '2022-02-09', + ], + ]; + $card_assert = new CardPatternAssert(); + $card_assert->assertVariant('search', $html); + $card_assert->assertPattern($expected, $html); // Assert event dates starting and ending at different days. $node->set('oe_sc_event_dates', [ @@ -194,16 +191,24 @@ public function testEventRenderingTeaser(): void { ]); $node->save(); - $builder = \Drupal::entityTypeManager()->getViewBuilder('node'); $build = $builder->view($node, 'teaser'); - $render = $this->container->get('renderer')->renderRoot($build); - $crawler = new Crawler((string) $render); - $this->drupalGet($node->toUrl()); - - $time = $crawler->filter('div > span.text-muted:nth-of-type(1)'); - $this->assertEquals('7 Feb 2022 - 22 Feb 2022', trim($time->text())); - $address = $crawler->filter('div > span.text-muted:nth-of-type(2)'); - $this->assertEquals('Brussel, Belgium', trim($address->text())); + $html = (string) $this->container->get('renderer')->renderRoot($build); + + $expected['content'] = [ + '7 Feb 2022 - 22 Feb 2022', + 'Brussel, Belgium', + ]; + $expected['date'] = [ + 'year' => '2022', + 'month' => 'Feb', + 'day' => '07', + 'end_year' => '2022', + 'end_month' => 'Feb', + 'end_day' => '22', + 'date_time' => '2022-02-07', + ]; + $card_assert->assertVariant('search', $html); + $card_assert->assertPattern($expected, $html); } /** From e39716f8a5dfd46e6b193bcd27a2624c67bcdea6 Mon Sep 17 00:00:00 2001 From: drishu Date: Mon, 19 Dec 2022 12:51:09 +0200 Subject: [PATCH 4/8] OEL-1915: Remove CardAssert. --- .../PublicationContentRenderTest.php | 4 +- tests/src/Kernel/ProjectRenderTest.php | 4 +- tests/src/PatternAssertions/CardAssert.php | 133 ------------------ 3 files changed, 4 insertions(+), 137 deletions(-) delete mode 100644 tests/src/PatternAssertions/CardAssert.php diff --git a/tests/src/Functional/PublicationContentRenderTest.php b/tests/src/Functional/PublicationContentRenderTest.php index f4f66b0e1..060120a07 100644 --- a/tests/src/Functional/PublicationContentRenderTest.php +++ b/tests/src/Functional/PublicationContentRenderTest.php @@ -4,8 +4,8 @@ namespace Drupal\Tests\oe_whitelabel\Functional; +use Drupal\Tests\oe_bootstrap_theme\PatternAssertion\CardPatternAssert; use Drupal\Tests\oe_bootstrap_theme\PatternAssertion\FilePatternAssert; -use Drupal\Tests\oe_whitelabel\PatternAssertions\CardAssert; use Drupal\Tests\oe_whitelabel\PatternAssertions\ContentBannerAssert; use Drupal\Tests\oe_whitelabel\PatternAssertions\InPageNavigationAssert; use Drupal\Tests\oe_whitelabel\Traits\MediaCreationTrait; @@ -157,7 +157,7 @@ public function testTeaserViewMode(): void { $build = $builder->view($node, 'teaser'); $html = (string) $this->container->get('renderer')->renderRoot($build); - $card_assert = new CardAssert(); + $card_assert = new CardPatternAssert(); $card_assert->assertVariant('search', $html); $card_assert->assertPattern([ 'title' => $title, diff --git a/tests/src/Kernel/ProjectRenderTest.php b/tests/src/Kernel/ProjectRenderTest.php index 17d06e3b9..1734cc1ec 100644 --- a/tests/src/Kernel/ProjectRenderTest.php +++ b/tests/src/Kernel/ProjectRenderTest.php @@ -6,7 +6,7 @@ use Drupal\media\Entity\Media; use Drupal\node\Entity\Node; -use Drupal\Tests\oe_whitelabel\PatternAssertions\CardAssert; +use Drupal\Tests\oe_bootstrap_theme\PatternAssertion\CardPatternAssert; use Drupal\Tests\user\Traits\UserCreationTrait; /** @@ -94,7 +94,7 @@ public function testProjectTeaser(): void { $build = $this->nodeViewBuilder->view($node, 'teaser'); $html = $this->renderRoot($build); - $assert = new CardAssert(); + $assert = new CardPatternAssert(); $expected_values = [ 'title' => 'Project 1', diff --git a/tests/src/PatternAssertions/CardAssert.php b/tests/src/PatternAssertions/CardAssert.php deleted file mode 100644 index e2e7eff3d..000000000 --- a/tests/src/PatternAssertions/CardAssert.php +++ /dev/null @@ -1,133 +0,0 @@ - [ - [$this, 'assertElementText'], - '.card-title a span', - ], - 'url' => [ - [$this, 'assertElementAttribute'], - '.card-title a', - 'href', - ], - 'image' => [ - [$this, 'assertCardImage'], - $variant, - ], - 'description' => [ - [$this, 'assertElementText'], - '.card-text p', - ], - 'badges' => [ - [$this, 'assertBadgesElements'], - ], - 'content' => [ - [$this, 'assertContent'], - $variant, - ], - ]; - } - - /** - * Asserts the image of a card. - * - * @param array|null $expected_image - * The expected image values. - * @param string $variant - * The variant of the pattern being checked. - * @param \Symfony\Component\DomCrawler\Crawler $crawler - * The DomCrawler where to check the element. - */ - protected function assertCardImage($expected_image, string $variant, Crawler $crawler): void { - if ($variant === 'search') { - $image_div = $crawler->filter('.row .col-md-3 img.card-img-top'); - self::assertEquals($expected_image['alt'], $image_div->attr('alt')); - self::assertStringContainsString($expected_image['src'], $image_div->attr('src')); - } - else { - $image_div = $crawler->filter('article.card img'); - self::assertEquals($expected_image['alt'], $image_div->attr('alt')); - self::assertStringContainsString($expected_image['src'], $image_div->attr('src')); - } - } - - /** - * Asserts the content of a card. - * - * @param array $expected_items - * The expected item values. - * @param string $variant - * The variant of the pattern being checked. - * @param \Symfony\Component\DomCrawler\Crawler $crawler - * The DomCrawler where to check the element. - */ - protected function assertContent(array $expected_items, string $variant, Crawler $crawler): void { - // There's no wrapping element in content that can be targeted, - // so we are checking that the expected items are present. - foreach ($expected_items as $expected_item) { - if ($variant === 'search') { - self::assertStringContainsString($expected_item, $crawler->filter('.row .col-md-9')->html()); - } - else { - self::assertStringContainsString($expected_item, $crawler->html()); - } - } - } - - /** - * {@inheritdoc} - */ - protected function assertBaseElements(string $html, string $variant): void { - $crawler = new Crawler($html); - $card = $crawler->filter($this->getBaseItemClass($variant)); - self::assertCount(1, $card); - } - - /** - * Returns the base CSS selector for a list item depending on the variant. - * - * @param string $variant - * The variant being checked. - * - * @return string - * The base selector for the variant. - */ - protected function getBaseItemClass(string $variant): string { - switch ($variant) { - case 'search': - return 'article.listing-item.card'; - - default: - return 'article.card'; - } - } - - /** - * {@inheritdoc} - */ - protected function getPatternVariant(string $html): string { - $crawler = new Crawler($html); - if ($crawler->filter('article.listing-item')->count() > 0) { - return 'search'; - } - return 'default'; - } - -} From 87ea95fe46e0cfb15123506754e8cee45c82f7a5 Mon Sep 17 00:00:00 2001 From: drishu Date: Tue, 3 Jan 2023 16:40:53 +0200 Subject: [PATCH 5/8] OEL-1915: Use oebt dev tag. --- composer.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 43967527e..c9814eebe 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "drupal/daterange_compact": "^2.0", "drupal/twig_field_value": "^2.0", "openeuropa/composer-artifacts": "^1.0.0-alpha1", - "openeuropa/oe_bootstrap_theme": "^1.0.0" + "openeuropa/oe_bootstrap_theme": "0.1915.202301031227" }, "require-dev": { "composer/installers": "^1.11", @@ -90,9 +90,6 @@ "patches": { "drupal/entity_reference_revisions": { "https://www.drupal.org/project/entity_reference_revisions/issues/2937835": "https://www.drupal.org/files/issues/2021-03-26/entity_reference_revisions-field_formatter_label-2937835-36.patch" - }, - "openeuropa/oe_bootstrap_theme": { - "dev": "https://github.com/openeuropa/oe_bootstrap_theme/compare/1.x...OEL-1915.diff" } }, "drupal-scaffold": { From 0228d0594b86a4319926068019ffbeb4bdd05cd4 Mon Sep 17 00:00:00 2001 From: drishu Date: Wed, 11 Jan 2023 15:43:40 +0200 Subject: [PATCH 6/8] OEL-1915: Fix schema inheritance. --- config/schema/oe_whitelabel.schema.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/schema/oe_whitelabel.schema.yml b/config/schema/oe_whitelabel.schema.yml index ccc5dd66a..06d18dd58 100644 --- a/config/schema/oe_whitelabel.schema.yml +++ b/config/schema/oe_whitelabel.schema.yml @@ -1,5 +1,5 @@ oe_whitelabel.settings: - type: theme_settings + type: oe_bootstrap_theme.settings label: 'OE Whitelabel settings' mapping: component_library: From 56801902de3632c38e659ac37234f385721f7b54 Mon Sep 17 00:00:00 2001 From: drishu Date: Wed, 11 Jan 2023 17:54:16 +0200 Subject: [PATCH 7/8] OEL-1915: Prevent double printing year when same. --- composer.json | 3 +++ .../oe_whitelabel_starter_event.module | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index c9814eebe..ae280e9e2 100644 --- a/composer.json +++ b/composer.json @@ -90,6 +90,9 @@ "patches": { "drupal/entity_reference_revisions": { "https://www.drupal.org/project/entity_reference_revisions/issues/2937835": "https://www.drupal.org/files/issues/2021-03-26/entity_reference_revisions-field_formatter_label-2937835-36.patch" + }, + "openeuropa/oe_bootstrap_theme": { + "dev": "https://github.com/openeuropa/oe_bootstrap_theme/compare/0.1915.202301031227...OEL-1915.diff" } }, "drupal-scaffold": { diff --git a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module index e02abf686..3fcde2001 100755 --- a/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module +++ b/modules/oe_whitelabel_starter_event/oe_whitelabel_starter_event.module @@ -200,9 +200,12 @@ function _oe_whitelabel_starter_event_preprocess_date(array &$variables): void { if (!empty($end) && $start->format('d-m-y') !== $end->format('d-m-y')) { $variables['date_block'] += [ - 'end_year' => $end->format('Y'), 'end_month' => $end->format('M'), 'end_day' => $end->format('d'), ]; + + if ($start->format('y') !== $end->format('y')) { + $variables['date_block']['end_year'] = $end->format('Y'); + } } } From 8a3943534eb6d3a24212ab6adcb8f05c3ed23ee9 Mon Sep 17 00:00:00 2001 From: drishu Date: Fri, 13 Jan 2023 10:39:19 +0200 Subject: [PATCH 8/8] OEL-1915: Use dev tag. --- composer.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/composer.json b/composer.json index ae280e9e2..fcb0cd481 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "drupal/daterange_compact": "^2.0", "drupal/twig_field_value": "^2.0", "openeuropa/composer-artifacts": "^1.0.0-alpha1", - "openeuropa/oe_bootstrap_theme": "0.1915.202301031227" + "openeuropa/oe_bootstrap_theme": "0.1.202301130938" }, "require-dev": { "composer/installers": "^1.11", @@ -90,9 +90,6 @@ "patches": { "drupal/entity_reference_revisions": { "https://www.drupal.org/project/entity_reference_revisions/issues/2937835": "https://www.drupal.org/files/issues/2021-03-26/entity_reference_revisions-field_formatter_label-2937835-36.patch" - }, - "openeuropa/oe_bootstrap_theme": { - "dev": "https://github.com/openeuropa/oe_bootstrap_theme/compare/0.1915.202301031227...OEL-1915.diff" } }, "drupal-scaffold": {