903d4d37c8
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Validate PR (pull_request) Failing after 4s
Universal: PR Check / Secret Scan (pull_request) Successful in 5s
Generic: Project CI / Lint & Validate (pull_request) Successful in 11s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Failing after 28s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
- JsonLdBuilderLocalBusinessTest: buildLocalBusiness() null/minimal/custom-type/ partial-address/geo-requires-both-coords cases - JsonLdScriptTagTest: toScriptTag() wraps in ld+json, escapes </ to prevent </script> breakout, and produces valid JSON after unescaping Covers the pure (Factory/Uri/DB-free) helpers that run under the existing minimal bootstrap. The remaining #33 targets (ImageHelper, BatchController, CSV import, content/system plugin integration) need a Joomla test harness.
94 lines
3.2 KiB
PHP
94 lines
3.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @package MokoSuiteOpenGraph
|
|
* @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
|
|
*/
|
|
|
|
namespace Mokoconsulting\MokoOG\Tests\Unit\Helper;
|
|
|
|
use Joomla\Plugin\System\MokoOG\Helper\JsonLdBuilder;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class JsonLdBuilderLocalBusinessTest extends TestCase
|
|
{
|
|
/**
|
|
* Minimal Registry-like stand-in exposing get($key, $default).
|
|
*/
|
|
private function params(array $data): object
|
|
{
|
|
return new class ($data) {
|
|
private array $data;
|
|
|
|
public function __construct(array $data)
|
|
{
|
|
$this->data = $data;
|
|
}
|
|
|
|
public function get($key, $default = null)
|
|
{
|
|
return $this->data[$key] ?? $default;
|
|
}
|
|
};
|
|
}
|
|
|
|
public function testReturnsNullWithoutName(): void
|
|
{
|
|
$this->assertNull(JsonLdBuilder::buildLocalBusiness($this->params([])));
|
|
$this->assertNull(JsonLdBuilder::buildLocalBusiness($this->params(['lb_name' => ' '])));
|
|
}
|
|
|
|
public function testMinimalSchemaHasNoOptionalKeys(): void
|
|
{
|
|
$result = JsonLdBuilder::buildLocalBusiness($this->params(['lb_name' => 'Acme Co']));
|
|
|
|
$this->assertSame('https://schema.org', $result['@context']);
|
|
$this->assertSame('LocalBusiness', $result['@type']);
|
|
$this->assertSame('Acme Co', $result['name']);
|
|
$this->assertArrayNotHasKey('address', $result);
|
|
$this->assertArrayNotHasKey('geo', $result);
|
|
$this->assertArrayNotHasKey('telephone', $result);
|
|
}
|
|
|
|
public function testCustomTypeAndPartialAddress(): void
|
|
{
|
|
$result = JsonLdBuilder::buildLocalBusiness($this->params([
|
|
'lb_name' => 'Joe Pizza',
|
|
'lb_type' => 'Restaurant',
|
|
'lb_street' => '1 Main St',
|
|
'lb_city' => 'Springfield',
|
|
'lb_country' => 'US',
|
|
'lb_phone' => '+1-555-0100',
|
|
]));
|
|
|
|
$this->assertSame('Restaurant', $result['@type']);
|
|
$this->assertSame('PostalAddress', $result['address']['@type']);
|
|
$this->assertSame('1 Main St', $result['address']['streetAddress']);
|
|
$this->assertSame('Springfield', $result['address']['addressLocality']);
|
|
$this->assertSame('US', $result['address']['addressCountry']);
|
|
$this->assertArrayNotHasKey('postalCode', $result['address']);
|
|
$this->assertSame('+1-555-0100', $result['telephone']);
|
|
}
|
|
|
|
public function testGeoRequiresBothCoordinates(): void
|
|
{
|
|
$partial = JsonLdBuilder::buildLocalBusiness($this->params([
|
|
'lb_name' => 'X',
|
|
'lb_latitude' => '1.0',
|
|
]));
|
|
$this->assertArrayNotHasKey('geo', $partial);
|
|
|
|
$full = JsonLdBuilder::buildLocalBusiness($this->params([
|
|
'lb_name' => 'X',
|
|
'lb_latitude' => '1.0',
|
|
'lb_longitude' => '2.0',
|
|
]));
|
|
$this->assertSame('GeoCoordinates', $full['geo']['@type']);
|
|
$this->assertSame('1.0', $full['geo']['latitude']);
|
|
$this->assertSame('2.0', $full['geo']['longitude']);
|
|
}
|
|
}
|