<?php
/**
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 * @license MIT
 */

declare(strict_types=1);

namespace Test\Unit\Mapper;

use BitBadger\PDODocument\Mapper\StringMapper;
use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\TestCase;

/**
 * Unit tests for the StringMapper class
 */
#[TestDox('String Mapper (Unit tests)')]
class StringMapperTest extends TestCase
{
    public function testMapSucceedsWhenFieldIsPresentAndString(): void
    {
        $result = ['test_field' => 'test_value'];
        $mapper = new StringMapper('test_field');
        $this->assertEquals('test_value', $mapper->map($result), 'String value not returned correctly');
    }

    public function testMapSucceedsWhenFieldIsPresentAndNotString(): void
    {
        $result = ['a_number' => 6.7];
        $mapper = new StringMapper('a_number');
        $this->assertEquals('6.7', $mapper->map($result), 'Number value not returned correctly');
    }

    public function testMapSucceedsWhenFieldIsNotPresent(): void
    {
        $mapper = new StringMapper('something_else');
        $this->assertNull($mapper->map([]), 'Missing value not returned correctly');
    }
}