<?php
namespace GraphQL\Tests\Utils;

use GraphQL\Error\Error;
use GraphQL\Error\InvariantViolation;
use GraphQL\Utils\Utils;

class AssertValidNameTest extends \PHPUnit_Framework_TestCase
{
    // Describe: assertValidName()

    /**
     * @it throws for use of leading double underscores
     */
    public function testThrowsForUseOfLeadingDoubleUnderscores()
    {
        $this->setExpectedException(
            Error::class,
            '"__bad" must not begin with "__", which is reserved by GraphQL introspection.'
        );
        Utils::assertValidName('__bad');
    }

    /**
     * @it throws for non-strings
     */
    public function testThrowsForNonStrings()
    {
        $this->setExpectedException(
            InvariantViolation::class,
            'Expected string'
        );
        Utils::assertValidName([]);
    }

    /**
     * @it throws for names with invalid characters
     */
    public function testThrowsForNamesWithInvalidCharacters()
    {
        $this->setExpectedException(
            Error::class,
            'Names must match'
        );
        Utils::assertValidName('>--()-->');
    }
}