<?php
/**
 * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
 */

namespace Temando\Shipping\ViewModel\Config;

use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\Request;
use Temando\Shipping\Model\Location;
use Temando\Shipping\Model\LocationInterface;
use Temando\Shipping\ViewModel\DataProvider\EntityUrlInterface;
use Temando\Shipping\ViewModel\PageActionsInterface;
use Temando\Shipping\ViewModel\ShippingApiInterface;

/**
 * Temando Checkout Fields View Model Test
 *
 * @package  Temando\Shipping\Test\Integration
 * @author   Christoph Aßmann <christoph.assmann@netresearch.de>
 * @license  http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
 * @link     http://www.temando.com/
 */
class CheckoutFieldsViewTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @test
     */
    public function backButtonIsAvailableInComponent()
    {
        /** @var CheckoutFields $viewModel */
        $viewModel = Bootstrap::getObjectManager()->get(CheckoutFields::class);
        $this->assertInstanceOf(PageActionsInterface::class, $viewModel);

        $actions = $viewModel->getMainActions();

        $this->assertNotEmpty($actions);
        $this->assertInternalType('array', $actions);
        $this->assertArrayHasKey('back', $actions);
    }

    /**
     * @test
     * @magentoConfigFixture default/carriers/temando/session_endpoint https://auth.temando.io/v1/
     * @magentoConfigFixture default/carriers/temando/sovereign_endpoint https://foo.temando.io/v1/
     */
    public function shippingApiCredentialsAreAvailableInLocationComponents()
    {
        /** @var CheckoutFields $viewModel */
        $viewModel = Bootstrap::getObjectManager()->get(CheckoutFields::class);
        $this->assertInstanceOf(ShippingApiInterface::class, $viewModel);
        $this->assertEquals('https://foo.temando.io/v1/', $viewModel->getShippingApiAccess()->getApiEndpoint());
    }

    /**
     * @test
     * @magentoAppArea adminhtml
     */
    public function getUpdateCheckoutFieldEndpoint()
    {
        /** @var CheckoutFields $viewModel */
        $viewModel = Bootstrap::getObjectManager()->get(CheckoutFields::class);
        $this->assertContains('temando/settings_checkout/save', $viewModel->getUpdateCheckoutFieldEndpoint());
    }

    /**
     * @test
     * @magentoAppArea adminhtml
     */
    public function getConfigUrl()
    {
        /** @var CheckoutFields $viewModel */
        $viewModel = Bootstrap::getObjectManager()->get(CheckoutFields::class);

        $url = $viewModel->getConfigurationPageUrl();
        $this->assertContains('system_config/edit', $url);
        $this->assertContains('carriers', $url);
        $this->assertContains('#carriers_temando-link', $url);
    }

    /**
     * @test
     * @magentoAppArea adminhtml
     * @magentoConfigFixture default/carriers/temando/additional_checkout_fields [{"foo": "bar"},{"fox": "baz"}]
     */
    public function getCheckoutFieldsData()
    {
        /** @var CheckoutFields $viewModel */
        $viewModel = Bootstrap::getObjectManager()->get(CheckoutFields::class);

        $fieldsData = $viewModel->getCheckoutFieldsData();
        $this->assertJson($fieldsData);
        $fields = json_decode($fieldsData);
        $this->assertInternalType('array', $fields);
        $this->assertCount(2, $fields);
    }
}