Skip to content

Commit 02c511d

Browse files
committed
Option and reder method added with unit test
1 parent 85a61b8 commit 02c511d

13 files changed

Lines changed: 239 additions & 164 deletions

prefill.php

Lines changed: 0 additions & 111 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Contentstack\Utils\Enums;
5+
namespace Contentstack\Utils\Enum;
66

77
use MabeEnum\Enum;
88

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace Contentstack\Utils\Enums;
5+
namespace Contentstack\Utils\Enum;
66

77
use MabeEnum\Enum;
88

src/Interfaces/EntryEmbedable.php

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/Interfaces/RenderableInterface.php

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace Contentstack\Utils\Models;
5+
namespace Contentstack\Utils\Model;
66

7-
use Contentstack\Utils\Enums\EmbedItemType;
8-
use Contentstack\Utils\Enums\StyleType;
7+
use Contentstack\Utils\Enum\EmbedItemType;
8+
use Contentstack\Utils\Enum\StyleType;
99

1010
class Metadata {
1111

@@ -82,6 +82,10 @@ public function getAttributes(): \DOMNamedNodeMap
8282
return $this->attributes;
8383
}
8484

85+
public function getAttribute(string $name): string {
86+
return $this->element->getAttribute($name);
87+
}
88+
8589
public function getOuterHTML(): string
8690
{
8791
$doc = new \DOMDocument();

src/Model/Option.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Contentstack\Utils\Model;
6+
7+
use Contentstack\Utils\Resource\EntryEmbedable;
8+
use Contentstack\Utils\Resource\RenderableInterface;
9+
use Contentstack\Utils\Resource\EmbeddedObject;
10+
use Contentstack\Utils\Enum\StyleType;
11+
12+
class Option implements RenderableInterface {
13+
14+
/**
15+
* @var EntryEmbedable
16+
*/
17+
18+
public $entry;
19+
20+
public function __construct(array $entry)
21+
{
22+
$this->entry = $entry;
23+
}
24+
25+
function renderOptions(array $embeddedObject, Metadata $metadata): string
26+
{
27+
$resultString = "";
28+
switch ($metadata->getStyleType()) {
29+
case StyleType::get(StyleType::BLOCK):
30+
$resultString = "<div><p>" . ($embeddedObject["title"] ?? $embeddedObject["uid"]) . "</p><p>Content type: <span>". $embeddedObject["_content_type_uid"] ."</span></p></div>";
31+
break;
32+
case StyleType::get(StyleType::INLINE):
33+
$resultString = "<span>".($embeddedObject["title"] ?? $embeddedObject["uid"])."</span>";
34+
break;
35+
case StyleType::get(StyleType::LINK):
36+
$resultString = "<a href=\"".($metadata->getAttribute("href") ?? $embeddedObject["url"] ?? $embeddedObject["title"] ?? $embeddedObject["uid"] )."\">".($metadata->getText() ?? $embeddedObject["title"] ?? $embeddedObject["uid"])."</a>";
37+
break;
38+
case StyleType::get(StyleType::DISPLAY):
39+
$resultString = "<img src=\"".($metadata->getAttributes("src")->value ?? $embeddedObject["url"] )."\" alt=\"".($metadata->getAttributes()["alt"]->value ?? $embeddedObject["title"] ?? $embeddedObject["filename"] ?? $embeddedObject["uid"])."\" />";
40+
break;
41+
case StyleType::get(StyleType::DOWNLOAD):
42+
$resultString = "<a href=\"".($metadata->getAttributes("href")->value ?? $embeddedObject["url"])."\">".($metadata->getText() ?? $embeddedObject["filename"]?? $embeddedObject["title"] ?? $embeddedObject["uid"])."</a>";
43+
break;
44+
}
45+
return $resultString;
46+
}
47+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Contentstack\Utils\Resource;
5+
6+
use Contentstack\Utils\Enum\EmbedItemType;
7+
use Contentstack\Utils\Model\Metadata;
8+
9+
interface RenderableInterface
10+
{
11+
function renderOptions(array $embeddedObject, Metadata $metadata): string;
12+
}

src/Utils.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
declare(strict_types=1);
44

55
namespace Contentstack\Utils;
6+
7+
use Contentstack\Utils\Model\Option;
8+
69
class Utils
710
{
811
/**
912
*
1013
*
1114
* @param string $content RTE content to render embedded objects
15+
* @param Option $option Option containing Entry and RendarableInterface
1216
*
1317
* @return string Returns RTE content with render embedded objects
1418
*/
15-
public static function renderContent(string $content): string
19+
public static function renderContent(string $content, Option $option): string
1620
{
1721
return $content;
1822
}
@@ -21,10 +25,11 @@ public static function renderContent(string $content): string
2125
*
2226
*
2327
* @param string $content RTE content to render embedded objects
28+
* @param Option $option Option containing Entry and RendarableInterface
2429
*
2530
* @return string Returns RTE content with render embedded objects
2631
*/
27-
public static function renderContents(string ...$contents): array
32+
public static function renderContents(array $contents, Option $option): array
2833
{
2934
$result = array();
3035
foreach ($contents as $content) {

tests/DefaultOptionTest.php

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Contentstack\Tests\Utils;
6+
7+
require_once __DIR__ . '/Helpers/Utility.php';
8+
require_once __DIR__ . '/Mock/EmbedObjectMock.php';
9+
10+
use Contentstack\Utils\Utils;
11+
use Contentstack\Utils\Enum\EmbedItemType;
12+
use Contentstack\Utils\Enum\StyleType;
13+
use Contentstack\Utils\Model\Metadata;
14+
use Contentstack\Utils\Model\Option;
15+
use PHPUnit\Framework\TestCase;
16+
class DefaultOptionTest extends TestCase
17+
{
18+
public static $defaultRender;
19+
public static $embeddedEntry;
20+
public static $embeddedContentType;
21+
public static $embeddedAsset;
22+
public static $text = "Text To set Link";
23+
24+
25+
public function getMetadata($itemType, $styleType, $linkText = null)
26+
{
27+
$html = "<test type={$itemType} sys-style-type={$styleType}>{$linkText}</test>";
28+
$element = Utility::getElement($html, '//test')[0];
29+
return new Metadata($element);
30+
}
31+
32+
public function setUp(): void
33+
{
34+
DefaultOptionTest::$defaultRender = new Option(EmbedObjectMock::embeddedModel(''));
35+
DefaultOptionTest::$embeddedEntry = EmbedObjectMock::embeddedEntryModel();
36+
DefaultOptionTest::$embeddedContentType = EmbedObjectMock::embeddedContentTypeUidModel();
37+
DefaultOptionTest::$embeddedAsset = EmbedObjectMock::embeddedAssetModel();
38+
}
39+
public function tearDown(): void{ }
40+
41+
public function testEmbeddedContentTypeEntry(): void
42+
{
43+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::BLOCK));
44+
$this->assertEquals($blockString, '<div><p>uid</p><p>Content type: <span>contentTypeUid</span></p></div>');
45+
46+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::INLINE));
47+
$this->assertEquals($blockString, '<span>uid</span>');
48+
49+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::LINK));
50+
$this->assertEquals($blockString, '<a href=""></a>');
51+
}
52+
53+
public function testEmbeddedEntry(): void
54+
{
55+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::BLOCK));
56+
$this->assertEquals($blockString, '<div><p>title</p><p>Content type: <span>contentTypeUid</span></p></div>');
57+
58+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::INLINE));
59+
$this->assertEquals($blockString, '<span>title</span>');
60+
61+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::LINK));
62+
$this->assertEquals($blockString, '<a href=""></a>');
63+
}
64+
65+
public function testEmbeddedAsset(): void
66+
{
67+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedAsset, $this->getMetadata(EmbedItemType::ASSET, StyleType::DISPLAY));
68+
$this->assertEquals($blockString, '<img src="URL" alt="asset" />');
69+
70+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedAsset, $this->getMetadata(EmbedItemType::ASSET, StyleType::DOWNLOAD));
71+
$this->assertEquals($blockString, '<a href="URL"></a>');
72+
}
73+
public function testEmbeddedContentTypeEntryWithText(): void
74+
{
75+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::BLOCK, DefaultOptionTest::$text));
76+
$this->assertEquals($blockString, '<div><p>uid</p><p>Content type: <span>contentTypeUid</span></p></div>');
77+
78+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::INLINE, DefaultOptionTest::$text));
79+
$this->assertEquals($blockString, '<span>uid</span>');
80+
81+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedContentType, $this->getMetadata(EmbedItemType::ENTRY, StyleType::LINK, DefaultOptionTest::$text));
82+
$this->assertEquals($blockString, '<a href="">Text To set Link</a>');
83+
}
84+
85+
public function testEmbeddedEntryWithText(): void
86+
{
87+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::BLOCK, DefaultOptionTest::$text));
88+
$this->assertEquals($blockString, '<div><p>title</p><p>Content type: <span>contentTypeUid</span></p></div>');
89+
90+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::INLINE, DefaultOptionTest::$text));
91+
$this->assertEquals($blockString, '<span>title</span>');
92+
93+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedEntry, $this->getMetadata(EmbedItemType::ENTRY, StyleType::LINK, DefaultOptionTest::$text));
94+
$this->assertEquals($blockString, '<a href="">Text To set Link</a>');
95+
}
96+
97+
public function testEmbeddedAssetWithText(): void
98+
{
99+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedAsset, $this->getMetadata(EmbedItemType::ASSET, StyleType::DISPLAY, DefaultOptionTest::$text));
100+
$this->assertEquals($blockString, '<img src="URL" alt="asset" />');
101+
102+
$blockString = DefaultOptionTest::$defaultRender->renderOptions(DefaultOptionTest::$embeddedAsset, $this->getMetadata(EmbedItemType::ASSET, StyleType::DOWNLOAD, DefaultOptionTest::$text));
103+
$this->assertEquals($blockString, '<a href="URL">Text To set Link</a>');
104+
}
105+
}

0 commit comments

Comments
 (0)