8700b46e13
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
Add phpunit.xml.dist, bootstrap, and PSR-4 autoload config. Tests: - PreviewHelper: 14 tests for platform mockup rendering (skipped when PreviewHelper not yet merged from feature/156 branch) - ServiceIconHelper: 14 tests for icon mapping and HTML rendering - ServiceInterfaceContract: 7 reflection tests verifying interface methods and types, plus 15 plugin implementation checks (skipped outside Joomla runtime) 21 tests pass immediately, 29 skip gracefully. Authored-by: Moko Consulting
129 lines
4.6 KiB
PHP
129 lines
4.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package MokoSuiteCross
|
|
* @subpackage Tests
|
|
* @author Moko Consulting <hello@mokoconsulting.tech>
|
|
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
|
|
* @license GNU General Public License version 3 or later; see LICENSE
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
namespace MokoSuiteCross\Tests\Unit\Helper;
|
|
|
|
use Joomla\Component\MokoSuiteCross\Administrator\Helper\PreviewHelper;
|
|
use PHPUnit\Framework\Attributes\RequiresMethod;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
#[RequiresMethod(PreviewHelper::class, 'render')]
|
|
class PreviewHelperTest extends TestCase
|
|
{
|
|
public function testRenderTwitterContainsCharCount(): void
|
|
{
|
|
$html = PreviewHelper::render('twitter', 'Test Title', 'Hello world', 'https://example.com', '', 'Author');
|
|
|
|
$this->assertStringContainsString('11/280', $html);
|
|
}
|
|
|
|
public function testRenderTwitterEscapesHtml(): void
|
|
{
|
|
$html = PreviewHelper::render('twitter', '<script>alert(1)</script>', 'text', 'https://example.com');
|
|
|
|
$this->assertStringNotContainsString('<script>', $html);
|
|
$this->assertStringContainsString('<script>', $html);
|
|
}
|
|
|
|
public function testRenderFacebookContainsAuthor(): void
|
|
{
|
|
$html = PreviewHelper::render('facebook', 'My Article', 'Intro text here', 'https://example.com', '', 'John Doe');
|
|
|
|
$this->assertStringContainsString('John Doe', $html);
|
|
$this->assertStringContainsString('My Article', $html);
|
|
}
|
|
|
|
public function testRenderMastodonContainsCharCount(): void
|
|
{
|
|
$html = PreviewHelper::render('mastodon', 'Title', 'Post text', 'https://example.com', '', 'Author');
|
|
|
|
$this->assertStringContainsString('9/500', $html);
|
|
}
|
|
|
|
public function testRenderBlueskyContainsCharCount(): void
|
|
{
|
|
$html = PreviewHelper::render('bluesky', 'Title', 'A bluesky post', 'https://example.com', '', 'Author');
|
|
|
|
$this->assertStringContainsString('14/300', $html);
|
|
}
|
|
|
|
public function testRenderLinkedInContainsAuthor(): void
|
|
{
|
|
$html = PreviewHelper::render('linkedin', 'Article', 'Text', 'https://example.com', '', 'Jane Smith');
|
|
|
|
$this->assertStringContainsString('Jane Smith', $html);
|
|
}
|
|
|
|
public function testRenderTelegramDoesNotShowAuthor(): void
|
|
{
|
|
$html = PreviewHelper::render('telegram', 'Article', 'Message text', 'https://example.com');
|
|
|
|
$this->assertStringContainsString('Message text', $html);
|
|
$this->assertStringContainsString('Article', $html);
|
|
}
|
|
|
|
public function testRenderWithImageIncludesImgTag(): void
|
|
{
|
|
$html = PreviewHelper::render('twitter', 'Title', 'Text', 'https://example.com', 'https://example.com/image.jpg', 'Author');
|
|
|
|
$this->assertStringContainsString('<img src="https://example.com/image.jpg"', $html);
|
|
}
|
|
|
|
public function testRenderWithoutImageOmitsImgTag(): void
|
|
{
|
|
$html = PreviewHelper::render('twitter', 'Title', 'Text', 'https://example.com', '', 'Author');
|
|
|
|
$this->assertStringNotContainsString('<img', $html);
|
|
}
|
|
|
|
public function testRenderGenericPlatform(): void
|
|
{
|
|
$html = PreviewHelper::render('pinterest', 'Title', 'Text', 'https://example.com');
|
|
|
|
$this->assertStringContainsString('PINTEREST', $html);
|
|
$this->assertStringContainsString('Title', $html);
|
|
}
|
|
|
|
public function testGetSupportedPlatformsReturnsSix(): void
|
|
{
|
|
$platforms = PreviewHelper::getSupportedPlatforms();
|
|
|
|
$this->assertCount(6, $platforms);
|
|
$this->assertContains('twitter', $platforms);
|
|
$this->assertContains('facebook', $platforms);
|
|
$this->assertContains('mastodon', $platforms);
|
|
$this->assertContains('linkedin', $platforms);
|
|
$this->assertContains('bluesky', $platforms);
|
|
$this->assertContains('telegram', $platforms);
|
|
}
|
|
|
|
public function testRenderUsesTextWhenProvided(): void
|
|
{
|
|
$html = PreviewHelper::render('facebook', 'My Title', 'Custom intro text', 'https://example.com');
|
|
|
|
$this->assertStringContainsString('Custom intro text', $html);
|
|
}
|
|
|
|
public function testRenderFallsBackToTitleWhenTextEmpty(): void
|
|
{
|
|
$html = PreviewHelper::render('facebook', 'Fallback Title', '', 'https://example.com');
|
|
|
|
$this->assertMatchesRegularExpression('/Fallback Title.*Fallback Title/s', $html);
|
|
}
|
|
|
|
public function testImageUrlIsEscaped(): void
|
|
{
|
|
$html = PreviewHelper::render('twitter', 'Title', 'Text', 'https://example.com', 'https://example.com/img?a=1&b=2', 'Author');
|
|
|
|
$this->assertStringContainsString('https://example.com/img?a=1&b=2', $html);
|
|
}
|
|
}
|