Skip to content

Commit

Permalink
Add unit tests
Browse files Browse the repository at this point in the history
Signed-off-by: Michel Mendiola <suki@missallsunday.com>
  • Loading branch information
MissAllSunday committed Dec 18, 2023
1 parent 6395c06 commit 2679725
Show file tree
Hide file tree
Showing 3 changed files with 166 additions and 77 deletions.
103 changes: 26 additions & 77 deletions Sources/OharaYTEmbed.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function OYTE_bbc_add_code(&$codes)
loadLanguage('OharaYTEmbed');

array_push($codes,
array(
[
'tag' => 'youtube',
'type' => 'unparsed_content',
'content' => '$1',
Expand All @@ -35,12 +35,12 @@ function OYTE_bbc_add_code(&$codes)
$data = $txt['OYTE_unvalid_link'];

else
$data = OYTE_Main(trim(strtr($data, array('<br />' => ''))));
$data = OYTE_Main(trim(strtr($data, ['<br />' => ''])));
},
'disabled_content' => '$1',
'block_level' => true,
),
array(
],
[
'tag' => 'yt',
'type' => 'unparsed_content',
'content' => '$1',
Expand All @@ -56,12 +56,12 @@ function OYTE_bbc_add_code(&$codes)
$data = $txt['OYTE_unvalid_link'];

else
$data = OYTE_Main(trim(strtr($data, array('<br />' => ''))));
$data = OYTE_Main(trim(strtr($data, ['<br />' => ''])));
},
'disabled_content' => '$1',
'block_level' => true,
),
array(
],
[
'tag' => 'vimeo',
'type' => 'unparsed_content',
'content' => '$1',
Expand All @@ -77,11 +77,11 @@ function OYTE_bbc_add_code(&$codes)
$data = $txt['OYTE_unvalid_link'];

else
$data = OYTE_Vimeo(trim(strtr($data, array('<br />' => ''))));
$data = OYTE_Vimeo(trim(strtr($data, ['<br />' => ''])));
},
'disabled_content' => '$1',
'block_level' => true,
)
]
);

OYTE_care();
Expand All @@ -97,21 +97,19 @@ function OYTE_bbc_add_button(&$buttons)
if (empty($modSettings['OYTE_master']))
return;

$buttons[count($buttons) - 1][] = array(
'image' => 'youtube',
'code' => 'youtube',
'before' => '[youtube]',
'after' => '[/youtube]',
'description' => $txt['OYTE_desc'],
);

$buttons[count($buttons) - 1][] =array(
'image' => 'vimeo',
'code' => 'vimeo',
'before' => '[vimeo]',
'after' => '[/vimeo]',
'description' => $txt['OYTE_vimeo_desc'],
);
array_push($buttons, [
'image' => 'youtube',
'code' => 'youtube',
'before' => '[youtube]',
'after' => '[/youtube]',
'description' => $txt['OYTE_desc'],
], [
'image' => 'vimeo',
'code' => 'vimeo',
'before' => '[vimeo]',
'after' => '[/vimeo]',
'description' => $txt['OYTE_vimeo_desc'],
]);
}

// Don't bother on create a whole new page for this, let's use integrate_general_mod_settings ^o^.
Expand Down Expand Up @@ -174,8 +172,7 @@ function OYTE_Main($data)

// Got something!
else
$result = '
<div class="oharaEmbed youtube" id="oh_'. $videoID .'"><noscript><a href="https://youtube.com/watch?v='. $videoID .'">https://youtube.com/watch?v='. $videoID . '</a></noscript></div>';
$result = '<div class="oharaEmbed youtube" id="oh_'. $videoID .'"><noscript><a href="https://youtube.com/watch?v='. $videoID .'">https://youtube.com/watch?v='. $videoID . '</a></noscript></div>';

return $result;
}
Expand All @@ -195,60 +192,12 @@ function OYTE_Vimeo($data)
$jsonArray = json_decode(curlWrapper($oembed), true);

if (!empty($jsonArray) && is_array($jsonArray) && !empty($jsonArray['html']))
return '
<div class="oharaEmbed vimeo">'. $jsonArray['html'].'</div>';
return '<div class="oharaEmbed vimeo">'. $jsonArray['html'].'</div>';

else
return sprintf($txt['OYTE_unvalid_link'], 'vimeo');
}

function OYTE_Gifv($data)
{
global $modSettings, $txt;

loadLanguage('OharaYTEmbed');

// Gotta respect the master setting...
if (empty($data) || empty($modSettings['OYTE_master']))
return sprintf($txt['OYTE_unvalid_link'], 'gifv');

// Set a local var for laziness.
$videoID = '';
$result = '';

if (strpos($data, 'http') === false || strpos($data, '.com') === false)
return '
<video class="gifv" autoplay loop preload="auto" controls>
<source src="https://i.imgur.com/'. $data .'.webm" type="video/webm">
<source src="https://i.imgur.com/'. $data .'.mp4" type="video/mp4">
</video>';


// We all love Regex.
$pattern = '/^(?:https?:\/\/)?(?:www\.)?i\.imgur\.com\/([a-z0-9]+)\.(?:gif|gifv|webm|mp4)/i';

// First attempt, pure regex.
if (empty($videoID) && preg_match($pattern, $data, $matches))
$videoID = $matches[1] ?? false;


// At this point, all tests had miserably failed.
if (empty($videoID))
return sprintf($txt['OYTE_unvalid_link'], 'gifv');

// Got something!
else
$result = '
<video class="gifv" autoplay loop preload="auto" controls>
<source src="https://i.imgur.com/'. $videoID .
'.webm" type="video/webm">
<source src="https://i.imgur.com/' .
$videoID .'.mp4" type="video/mp4">
</video>';

return $result;
}

function OYTE_Preparse($message)
{
global $context, $modSettings;
Expand All @@ -269,13 +218,13 @@ function OYTE_Preparse($message)

return preg_replace_callback_array(
[
$vimeo => function ($match) {var_dump($match);
$vimeo => function ($match) {
return OYTE_Vimeo($match[0]);
},
$youtube => function ($match) {
return OYTE_Main($match[1]);
},
$gifv => function ($match) {var_dump($match);
$gifv => function ($match) {
return '[gifv]'. $match[1] .'[/gifv]';
},
],
Expand Down
121 changes: 121 additions & 0 deletions tests/OharaYTEmbedTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
<?php

declare(strict_types=1);

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;

final class OharaYTEmbedTest extends TestCase
{
public function setUp(): void
{
require_once '../Sources/OharaYTEmbed.php';
require_once '../Themes/default/languages/OharaYTEmbed.english.php';
}

public function testOYTE_bbc_add_code()
{
$codes = [];
OYTE_bbc_add_code($codes);

$this->assertCount(3, $codes);
$this->assertSame('youtube', $codes[0]['tag']);
$this->assertSame('yt', $codes[1]['tag']);
$this->assertSame('vimeo', $codes[2]['tag']);
}

public function testOYTE_bbc_add_button()
{
$buttons = [];
OYTE_bbc_add_button($buttons);

$this->assertCount(2, $buttons);
$this->assertSame('youtube', $buttons[0]['image']);
$this->assertSame('vimeo', $buttons[1]['image']);
}

public function testOYTE_settings()
{
$config_vars = [];

OYTE_settings($config_vars);

$this->assertCount(7, $config_vars);
$this->assertSame('Ohara Youtube|Vimeo Embed mod', $config_vars[0]);
$this->assertSame('', $config_vars[6]);
}

#[DataProvider('OYTE_MainProvider')]
public function testOYTE_Main(string $data, string $expectedResult)
{
$result = OYTE_Main($data);

$this->assertSame($expectedResult, $result);
}

public static function OYTE_MainProvider(): array
{
$expectedResult = '<div class="oharaEmbed youtube" id="oh_4ShOpJPHRxA"><noscript><a href="https://youtube.com/watch?v=4ShOpJPHRxA">https://youtube.com/watch?v=4ShOpJPHRxA</a></noscript></div>';
return [
'no data' => [
'data' => '',
'expectedResult' => 'Not a valid youtube URL'
],
'youtube ID' => [
'data' => '4ShOpJPHRxA',
'expectedResult' => $expectedResult
],
'full url' => [
'data' => 'https://www.youtube.com/watch?v=4ShOpJPHRxA',
'expectedResult' => $expectedResult
],
'schemaless' => [
'data' => '//www.youtube.com/watch?v=4ShOpJPHRxA',
'expectedResult' => $expectedResult
],
'domain' => [
'data' => 'youtube.com/watch?v=4ShOpJPHRxA',
'expectedResult' => $expectedResult
],
];
}

#[DataProvider('OYTE_VimeoProvider')]
public function testOYTE_Vimeo(string $data, string $expectedResult)
{
$result = OYTE_Vimeo($data);

$this->assertSame($expectedResult, $result);
}

public static function OYTE_VimeoProvider(): array
{
$expectedResult = '<div class="oharaEmbed vimeo"><iframe src="https://player.vimeo.com/video/19258789?dnt=1&amp;app_id=122963" width="480" height="272" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" title="Lykke Li - I Follow Rivers (Director: Tarik Saleh)"></iframe></div>';
return [
'no data' => [
'data' => '',
'expectedResult' => 'Not a valid vimeo URL'
],
'full url' => [
'data' => 'https://vimeo.com/19258789',
'expectedResult' => $expectedResult
],
'schemaless' => [
'data' => '//vimeo.com/19258789',
'expectedResult' => $expectedResult
],
];
}

public function testOYTE_Preparse(): void
{
global $context;

OYTE_css();

$this->assertStringContainsString('max-width: 480px', $context['html_headers']);
$this->assertStringContainsString('max-height: 270px', $context['html_headers']);
$this->assertStringContainsString('padding-bottom: 270px', $context['html_headers']);
$this->assertStringContainsString('@media screen and (min-width: 768px)', $context['html_headers']);
}
}
19 changes: 19 additions & 0 deletions tests/bootstrap.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

declare(strict_types=1);

define('ROOT', __DIR__);
define('SMF', true);

global $modSettings, $txt, $context;


$modSettings['OYTE_master'] = true;
$modSettings['OYTE_autoEmbed'] = true;
$modSettings['OYTE_video_width'] = 480;
$modSettings['OYTE_video_height'] = 270;
$modSettings['OYTE_min_screen_size'] = 768;
$context['html_headers'] = '';

// Mock SMF functions
function loadLanguage(string $languageFile): void {}

0 comments on commit 2679725

Please sign in to comment.