208 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Analytics\Model\Plugin;
 | 
						|
 | 
						|
use Magento\Analytics\Model\Config\Backend\Baseurl\SubscriptionUpdateHandler;
 | 
						|
use Magento\Config\Model\PreparedValueFactory;
 | 
						|
use Magento\Config\Model\ResourceModel\Config\Data as ConfigData;
 | 
						|
use Magento\Framework\App\Config\ScopeConfigInterface;
 | 
						|
use Magento\Framework\FlagManager;
 | 
						|
use Magento\Framework\ObjectManagerInterface;
 | 
						|
use Magento\Store\Model\ScopeInterface;
 | 
						|
use Magento\Store\Model\Store;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoAppArea adminhtml
 | 
						|
 */
 | 
						|
class BaseUrlConfigPluginTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var PreparedValueFactory
 | 
						|
     */
 | 
						|
    private $preparedValueFactory;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ConfigData
 | 
						|
     */
 | 
						|
    private $configValueResourceModel;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ScopeConfigInterface
 | 
						|
     */
 | 
						|
    private $scopeConfig;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var FlagManager
 | 
						|
     */
 | 
						|
    private $flagManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var ObjectManagerInterface
 | 
						|
     */
 | 
						|
    private $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->preparedValueFactory = $this->objectManager->get(PreparedValueFactory::class);
 | 
						|
        $this->configValueResourceModel = $this->objectManager->get(ConfigData::class);
 | 
						|
        $this->scopeConfig = $this->objectManager->get(ScopeConfigInterface::class);
 | 
						|
        $this->flagManager = $this->objectManager->get(FlagManager::class);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     */
 | 
						|
    public function testAfterSaveNotSecureUrl()
 | 
						|
    {
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_UNSECURE_BASE_URL,
 | 
						|
            'http://store.com/',
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
        $this->assertCronWasNotSet();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     */
 | 
						|
    public function testAfterSaveSecureUrlNotInDefaultScope()
 | 
						|
    {
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_SECURE_BASE_URL,
 | 
						|
            'https://store.com/',
 | 
						|
            ScopeInterface::SCOPE_STORES
 | 
						|
        );
 | 
						|
        $this->assertCronWasNotSet();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAdminConfigFixture web/secure/base_url https://previous.example.com/
 | 
						|
     */
 | 
						|
    public function testAfterSaveSecureUrlInDefaultScopeOnDoesNotRegisteredInstance()
 | 
						|
    {
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_SECURE_BASE_URL,
 | 
						|
            'https://store.com/',
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
        $this->assertCronWasNotSet();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAdminConfigFixture web/secure/base_url https://previous.example.com/
 | 
						|
     * @magentoAdminConfigFixture analytics/general/token MBI_token
 | 
						|
     */
 | 
						|
    public function testAfterSaveSecureUrlInDefaultScopeOnRegisteredInstance()
 | 
						|
    {
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_SECURE_BASE_URL,
 | 
						|
            'https://store.com/',
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
        $this->assertCronWasSet();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAdminConfigFixture web/secure/base_url https://previous.example.com/
 | 
						|
     * @magentoAdminConfigFixture analytics/general/token MBI_token
 | 
						|
     */
 | 
						|
    public function testAfterSaveMultipleBaseUrlChanges()
 | 
						|
    {
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_SECURE_BASE_URL,
 | 
						|
            'https://store.com/',
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
 | 
						|
        $this->saveConfigValue(
 | 
						|
            Store::XML_PATH_SECURE_BASE_URL,
 | 
						|
            'https://store10.com/',
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
        $this->assertCronWasSet();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $path The configuration path in format section/group/field_name
 | 
						|
     * @param string $value The configuration value
 | 
						|
     * @param string $scope The configuration scope (default, website, or store)
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    private function saveConfigValue(string $path, string $value, string $scope)
 | 
						|
    {
 | 
						|
        $value = $this->preparedValueFactory->create(
 | 
						|
            $path,
 | 
						|
            $value,
 | 
						|
            $scope
 | 
						|
        );
 | 
						|
        $this->configValueResourceModel->save($value);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    private function assertCronWasNotSet()
 | 
						|
    {
 | 
						|
        $this->assertNull($this->getSubscriptionUpdateSchedule());
 | 
						|
        $this->assertNull($this->getPreviousUpdateUrl());
 | 
						|
        $this->assertNull($this->getUpdateReverseCounter());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    private function assertCronWasSet()
 | 
						|
    {
 | 
						|
        $this->assertSame(
 | 
						|
            '0 * * * *',
 | 
						|
            $this->getSubscriptionUpdateSchedule(),
 | 
						|
            'Subscription update schedule has not been set'
 | 
						|
        );
 | 
						|
        $this->assertSame(
 | 
						|
            'https://previous.example.com/',
 | 
						|
            $this->getPreviousUpdateUrl(),
 | 
						|
            'The previous URL stored for update is not correct'
 | 
						|
        );
 | 
						|
        $this->assertSame(48, $this->getUpdateReverseCounter());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    private function getSubscriptionUpdateSchedule()
 | 
						|
    {
 | 
						|
        return $this->scopeConfig->getValue(
 | 
						|
            SubscriptionUpdateHandler::UPDATE_CRON_STRING_PATH,
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    private function getPreviousUpdateUrl()
 | 
						|
    {
 | 
						|
        return $this->flagManager->getFlagData(SubscriptionUpdateHandler::PREVIOUS_BASE_URL_FLAG_CODE);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    private function getUpdateReverseCounter()
 | 
						|
    {
 | 
						|
        return $this->flagManager
 | 
						|
            ->getFlagData(SubscriptionUpdateHandler::SUBSCRIPTION_UPDATE_REVERSE_COUNTER_FLAG_CODE);
 | 
						|
    }
 | 
						|
}
 |