<?php

namespace Telnyx;

class DummyApiResource extends ApiResource
{
    const OBJECT_NAME = 'phone_number';

    // For testing nested resources
    public static function getSavedNestedResources()
    {
        static $savedNestedResources = null;
        if (null === $savedNestedResources) {
            $savedNestedResources = new Util\Set([
                'source',
            ]);
        }

        return $savedNestedResources;
    }
}

/**
 * @internal
 * @covers \Telnyx\ApiResource
 */
class ApiResourceTest extends \Telnyx\TestCase
{
    public function testGetSavedNestedResources()
    {
        $result = ApiResource::getSavedNestedResources();

        static::assertInstanceOf(\Telnyx\Util\Set::class, $result);
    }
    
    public function testSet()
    {
        $class = new DummyApiResource();
        $class->abc = '123';
        $class->source = new PhoneNumber();

        static::assertSame('123', $class->abc);
        static::assertInstanceOf(PhoneNumber::class, $class->source);
        static::assertTrue($class->source->saveWithParent);
        static::assertFalse($class->saveWithParent);
    }
    
    public function testResourceUrlNullId()
    {
        $class = new PhoneNumber();
        try {
            $url = $class->resourceUrl(null);
            static::fail('Did not raise error');
        } catch (\Telnyx\Exception\UnexpectedValueException $e) {
            static::assertSame(
                'Could not determine which URL to request: Telnyx\PhoneNumber instance has invalid ID: ',
                $e->getMessage()
            );
        } catch (\Exception $e) {
            static::fail('Unexpected exception: ' . \get_class($e));
        }
    }
}