Files
MokoSuiteCross/tests/Unit/Helper/ServiceIconHelperTest.php
T
jmiller 8700b46e13
Universal: Auto Version Bump / Version Bump (push) Successful in 8s
feat(#132): add PHPUnit test suite with unit tests
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
2026-06-27 14:50:34 -05:00

70 lines
2.3 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\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('&quot;&gt;&lt;script&gt;', $html);
}
}