<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Braintree\Block;

use Magento\Braintree\Model\Ui\PayPal\ConfigProvider;
use Magento\Customer\Model\Session;
use Magento\Framework\App\Area;
use Magento\Framework\ObjectManagerInterface;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\Vault\Api\Data\PaymentTokenInterface;
use Magento\Vault\Block\Customer\AccountTokens;
use Magento\Vault\Model\AccountPaymentTokenFactory;

/**
 * Class VaultTokenRendererTest
 */
class VaultTokenRendererTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @var AccountTokens
     */
    private $tokenBlock;

    /**
     * @var ObjectManagerInterface
     */
    private $objectManager;
    
    protected function setUp()
    {
        $bootstrap = Bootstrap::getInstance();
        $bootstrap->loadArea(Area::AREA_FRONTEND);
        $this->objectManager = Bootstrap::getObjectManager();
        
        $this->tokenBlock = $this->objectManager->get(AccountTokens::class);
    }

    /**
     * @covers \Magento\Vault\Block\Customer\AccountTokens::getPaymentTokens
     * @magentoDataFixture Magento/Braintree/_files/paypal_vault_token.php
     */
    public function testGetPaymentTokens()
    {
        $customerId = 1;
        $token = 'mx29vk';

        /** @var Session $session */
        $session = $this->objectManager->get(Session::class);
        $session->setCustomerId($customerId);

        $tokens = $this->tokenBlock->getPaymentTokens();

        static::assertCount(1, $tokens);

        /** @var PaymentTokenInterface $vaultToken */
        $vaultToken = array_pop($tokens);

        static::assertTrue($vaultToken->getIsActive());
        static::assertTrue($vaultToken->getIsVisible());
        static::assertEquals($token, $vaultToken->getGatewayToken());
        static::assertEquals(ConfigProvider::PAYPAL_CODE, $vaultToken->getPaymentMethodCode());
        static::assertEquals(AccountPaymentTokenFactory::TOKEN_TYPE_ACCOUNT, $vaultToken->getType());
    }
}
