feat(#132): add PHPUnit test suite with unit tests
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Failing after 4s
Universal: PR Check / Secret Scan (pull_request) Successful in 5s
Universal: Auto Version Bump / Version Bump (push) Successful in 14s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 46s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Failing after 4s
Universal: PR Check / Secret Scan (pull_request) Successful in 5s
Universal: Auto Version Bump / Version Bump (push) Successful in 14s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 46s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
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
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?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\ServiceIconHelper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ServiceIconHelperTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider knownServiceTypesProvider
|
||||
*/
|
||||
public function testGetIconReturnsKnownIcon(string $serviceType, string $expectedIcon): void
|
||||
{
|
||||
$this->assertSame($expectedIcon, ServiceIconHelper::getIcon($serviceType));
|
||||
}
|
||||
|
||||
public static function knownServiceTypesProvider(): array
|
||||
{
|
||||
return [
|
||||
'facebook' => ['facebook', 'icon-facebook'],
|
||||
'twitter' => ['twitter', 'icon-twitter'],
|
||||
'linkedin' => ['linkedin', 'icon-linkedin'],
|
||||
'mastodon' => ['mastodon', 'icon-globe'],
|
||||
'bluesky' => ['bluesky', 'icon-cloud'],
|
||||
'telegram' => ['telegram', 'icon-paper-plane'],
|
||||
'discord' => ['discord', 'icon-headset'],
|
||||
'slack' => ['slack', 'icon-hashtag'],
|
||||
'mailchimp' => ['mailchimp', 'icon-envelope'],
|
||||
'medium' => ['medium', 'icon-book'],
|
||||
];
|
||||
}
|
||||
|
||||
public function testGetIconReturnsFallbackForUnknownType(): void
|
||||
{
|
||||
$this->assertSame('icon-share-alt', ServiceIconHelper::getIcon('unknown_platform'));
|
||||
}
|
||||
|
||||
public function testRenderIconOutputsSpanElement(): void
|
||||
{
|
||||
$html = ServiceIconHelper::renderIcon('facebook');
|
||||
|
||||
$this->assertSame('<span class="icon-facebook" aria-hidden="true"></span>', $html);
|
||||
}
|
||||
|
||||
public function testRenderIconWithExtraClass(): void
|
||||
{
|
||||
$html = ServiceIconHelper::renderIcon('twitter', 'me-1 text-info');
|
||||
|
||||
$this->assertSame('<span class="icon-twitter me-1 text-info" aria-hidden="true"></span>', $html);
|
||||
}
|
||||
|
||||
public function testRenderIconEscapesExtraClass(): void
|
||||
{
|
||||
$html = ServiceIconHelper::renderIcon('facebook', '"><script>');
|
||||
|
||||
$this->assertStringNotContainsString('<script>', $html);
|
||||
$this->assertStringContainsString('"><script>', $html);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user