<?php

namespace SilverStripe\Forms\Tests;

use SilverStripe\Dev\SapphireTest;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\RequiredFields;
use SilverStripe\Forms\Tip;

class TextFieldTest extends SapphireTest
{

    /**
     * Tests the TextField Max Length Validation Failure
     */
    public function testMaxLengthValidationFail()
    {
        $textField = new TextField('TestField');
        $textField->setMaxLength(5);
        $textField->setValue("John Doe"); // 8 characters, so should fail
        $result = $textField->validate(new RequiredFields());
        $this->assertFalse($result);
    }

    /**
     * Tests the TextField Max Length Validation Success
     */
    public function testMaxLengthValidationSuccess()
    {
        $textField = new TextField('TestField');
        $textField->setMaxLength(5);
        $textField->setValue("John"); // 4 characters, so should pass
        $result = $textField->validate(new RequiredFields());
        $this->assertTrue($result);
    }

    /**
     * Ensures that when a Tip is applied to the field, it outputs it in the schema
     */
    public function testTipIsIncludedInSchema()
    {
        $textField = new TextField('TestField');
        $this->assertArrayNotHasKey('tip', $textField->getSchemaDataDefaults());

        $textField->setTip(new Tip('TestTip'));
        $this->assertArrayHasKey('tip', $textField->getSchemaDataDefaults());
    }
}