DeliveryTermTest.php 2.85 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
<?php
/**
 * @copyright  Vertex. All rights reserved.  https://www.vertexinc.com/
 * @author     Mediotype                     https://www.mediotype.com/
 */

namespace Vertex\Tax\Test\Unit\Model\Config;

use PHPUnit\Framework\MockObject\MockObject;
use Vertex\Tax\Model\Config\DeliveryTerm;
use Vertex\Tax\Test\Unit\TestCase;
use Magento\Framework\Math\Random;
use Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray;

/**
 * Test Class @see DeliveryTerm
 */
class DeliveryTermTest extends TestCase
{
    /** @var DeliveryTerm */
    private $deliveryTerm;

    /** @var MockObject */
    private $randomMathMock;

    /**
     * @inheritdoc
     */
    protected function setUp() // @codingStandardsIgnoreLine MEQP2.PHP.ProtectedClassMember.FoundProtected
    {
        parent::setUp();
        $this->randomMathMock = $this->createMock(Random::class);
        $this->deliveryTerm = $this->getObject(
            DeliveryTerm::class,
            [
                'mathRandom' => $this->randomMathMock,
            ]
        );
    }

    /**
     * Data Provider for test @see testMakeArrayFieldValue
     *
     * @return array
     */
    public function makeArrayFieldValueDataProvider()
    {
        return [
            'invalid bool' => [false, []],
            'invalid empty string' => ['', []],
            'valid empty array' => [[], []],
            'valid with serialized' => [
                '{"USA":"DAT"}',
                [
                    '' => ['country_id' => 'USA', 'delivery_term' => 'DAT'],
                ],
            ],
        ];
    }

    /**
     * Data Provider for test @see testMakeStorableArrayFieldValue
     *
     * @return array
     */
    public function makeStorableArrayFieldValueDataProvider()
    {
        return [
            'invalid bool' => [false, ''],
            'invalid empty string' => ['', ''],
            'valid empty array' => [[], '[]'],
            'valid delivery term' => [
                [
                    'DZA' => 'AD',
                    'USA' => 'CFR',
                ],
                '{"DZA":"AD","USA":"CFR"}',
            ],
        ];
    }

    /**
     * Test if value is readable by @see AbstractFieldArray
     *
     * @param string|array $value
     * @param array $result
     * @dataProvider makeArrayFieldValueDataProvider
     * @return void
     */
    public function testMakeArrayFieldValue($value, $result)
    {
        $this->assertSame($result, $this->deliveryTerm->makeArrayFieldValue($value));
    }

    /**
     * Test value to make ready for store
     *
     * @param string|array $value
     * @param string $result
     * @dataProvider makeStorableArrayFieldValueDataProvider
     * @return void
     */
    public function testMakeStorableArrayFieldValue($value, $result)
    {
        $this->assertSame($result, $this->deliveryTerm->makeStorableArrayFieldValue($value));
    }
}