View source  
  <?php
namespace Drupal\Tests\domain_source\Functional;
use Drupal\Core\Url;
use Drupal\Tests\domain\Functional\DomainTestBase;
use Drupal\domain_source\DomainSourceElementManagerInterface;
use Drupal\language\Entity\ConfigurableLanguage;
class DomainSourceLanguageTest extends DomainTestBase {
  
  public static $modules = [
    'language',
    'content_translation',
    'domain',
    'domain_source',
    'field',
    'node',
    'user',
  ];
  
  protected function setUp() {
    parent::setUp();
    
    DomainTestBase::domainCreateTestDomains(3);
    
    ConfigurableLanguage::createFromLangcode('hu')
      ->save();
    ConfigurableLanguage::createFromLangcode('af')
      ->save();
    
    \Drupal::service('content_translation.manager')
      ->setEnabled('node', 'page', TRUE);
  }
  
  public function testDomainSourceLanguage() {
    
    $id = 'one_example_com';
    
    $node = $this
      ->drupalCreateNode([
      'body' => [
        [],
      ],
      'status' => 1,
      DomainSourceElementManagerInterface::DOMAIN_SOURCE_FIELD => $id,
    ]);
    
    $storage = \Drupal::entityTypeManager()
      ->getStorage('node');
    
    $node = $storage
      ->load(1);
    
    $id2 = 'two_example_com';
    $translation = $node
      ->addTranslation('af');
    $translation->title->value = $this
      ->randomString();
    $translation->{DomainSourceElementManagerInterface::DOMAIN_SOURCE_FIELD} = $id2;
    $translation->status = 1;
    $node
      ->save();
    
    $path = 'node/1';
    $domains = \Drupal::entityTypeManager()
      ->getStorage('domain')
      ->loadMultiple();
    $source = $domains[$id];
    $expected = $source
      ->getPath() . $path;
    $route_name = 'entity.node.canonical';
    $route_parameters = [
      'node' => 1,
    ];
    $uri = 'entity:' . $path;
    $uri_path = '/' . $path;
    $options = [];
    
    $url = Url::fromRoute($route_name, $route_parameters, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromRoute');
    
    $url = Url::fromUserInput($uri_path, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromUserInput');
    
    $url = Url::fromUri($uri, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromUri');
    
    $path = 'node/1';
    $source = $domains[$id2];
    $expected = $source
      ->getPath() . 'af/' . $path;
    $route_name = 'entity.node.canonical';
    $route_parameters = [
      'node' => 1,
    ];
    $uri = 'entity:' . $path;
    $uri_path = '/' . $path;
    $language = \Drupal::entityTypeManager()
      ->getStorage('configurable_language')
      ->load('af');
    $options = [
      'language' => $language,
    ];
    $translation = $node
      ->getTranslation('af');
    $this
      ->assertTrue(domain_source_get($translation) == $id2, domain_source_get($translation));
    
    drupal_flush_all_caches();
    
    $url = Url::fromRoute($route_name, $route_parameters, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromRoute');
    
    $url = Url::fromUserInput($uri_path, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromUserInput');
    
    $url = Url::fromUri($uri, $options)
      ->toString();
    $this
      ->assertTrue($url == $expected, 'fromUri');
  }
}