Newer
Older
gn-synapse-client-php / tests / SynapseConfigTest.php
@Eugene Sukhodolskiy Eugene Sukhodolskiy 1 day ago 2 KB Initial client library skeleton (v0.1.0)
<?php

declare(strict_types=1);

namespace GNexus\Synapse\Tests\Config;

use GNexus\Synapse\Config\SynapseConfig;
use GNexus\Synapse\Exception\ConfigurationException;
use PHPUnit\Framework\TestCase;

final class SynapseConfigTest extends TestCase
{
    public function testValidConfigAndUrl(): void
    {
        $cfg = new SynapseConfig('http://synapse:8013/', 'syn_abc');
        self::assertSame('http://synapse:8013/api/v1/events', $cfg->url('/api/v1/events'));
        self::assertSame('syn_abc', $cfg->apiKey);
        self::assertSame(10.0, $cfg->timeoutSeconds);
        self::assertSame('', $cfg->source());
    }

    public function testRejectsEmptyUrl(): void
    {
        $this->expectException(ConfigurationException::class);
        $this->expectExceptionMessage(SynapseConfig::ENV_URL);
        new SynapseConfig('');
    }

    public function testRejectsUrlWithoutScheme(): void
    {
        $this->expectException(ConfigurationException::class);
        new SynapseConfig('synapse:8013'); // без схемы http(s)
    }

    public function testRejectsZeroTimeout(): void
    {
        $this->expectException(ConfigurationException::class);
        new SynapseConfig('http://s', timeoutSeconds: 0);
    }

    public function testFromGlobalsReadsEnv(): void
    {
        $cfg = SynapseConfig::fromGlobals([
            SynapseConfig::ENV_URL => 'http://synapse:8013/',
            SynapseConfig::ENV_API_KEY => 'syn_abc',
            SynapseConfig::ENV_TIMEOUT => '3.5',
            SynapseConfig::ENV_DEFAULT_SOURCE => 'bugtrail',
        ]);
        self::assertSame('http://synapse:8013/api/v1', $cfg->url('/api/v1'));
        self::assertSame('syn_abc', $cfg->apiKey);
        self::assertSame(3.5, $cfg->timeoutSeconds);
        self::assertSame('bugtrail', $cfg->source());
    }

    public function testFromGlobalsDefaultsWithoutKey(): void
    {
        // url обязателен: пустой env — ConfigurationException, fail fast
        $cfg = SynapseConfig::fromGlobals([SynapseConfig::ENV_URL => 'http://synapse.test']);
        self::assertNull($cfg->apiKey);          // ключа нет — send поднимет ConfigurationException,
        self::assertSame(10.0, $cfg->timeoutSeconds); // health() же работает
        self::assertSame('', $cfg->source());
    }
}