View source  
  <?php
namespace Drupal\Tests\lingotek\Functional;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\language\Entity\ContentLanguageSettings;
use Drupal\lingotek\Entity\LingotekProfile;
class LingotekNodeMissingProfileTranslationTest extends LingotekTestBase {
  
  public static $modules = [
    'block',
    'node',
  ];
  
  protected $node;
  
  protected function setUp() : void {
    parent::setUp();
    
    $this
      ->drupalCreateContentType([
      'type' => 'article',
      'name' => 'Article',
    ]);
    
    ConfigurableLanguage::createFromLangcode('es')
      ->setThirdPartySetting('lingotek', 'locale', 'es_MX')
      ->save();
    
    ContentLanguageSettings::loadByEntityTypeBundle('node', 'article')
      ->setLanguageAlterable(TRUE)
      ->save();
    \Drupal::service('content_translation.manager')
      ->setEnabled('node', 'article', TRUE);
    drupal_static_reset();
    \Drupal::entityTypeManager()
      ->clearCachedDefinitions();
    $this
      ->applyEntityUpdates();
    
    $this
      ->rebuildContainer();
    $profile = LingotekProfile::create([
      'id' => 'missing_profile',
      'label' => 'Missing profile',
    ]);
    $profile
      ->save();
    $this
      ->saveLingotekContentTranslationSettingsForNodeTypes([
      'article',
    ], 'missing_profile');
  }
  
  public function testNodeTranslationUsingLinks() {
    
    $this
      ->drupalLogin($this->rootUser);
    
    $edit = [];
    $edit['title[0][value]'] = 'Llamas are cool';
    $edit['body[0][value]'] = 'Llamas are very cool';
    $this
      ->saveAndPublishNodeForm($edit);
    $this
      ->goToContentBulkManagementForm();
    
    $this
      ->assertLingotekUploadLink();
    
    $this
      ->assertNoLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('EN');
    $this
      ->assertText('Node Llamas are cool has been uploaded.');
    
    $data = json_decode(\Drupal::state()
      ->get('lingotek.uploaded_content', '[]'), TRUE);
    $this
      ->assertUploadedDataFieldCount($data, 2);
    $this
      ->assertTrue(isset($data['title'][0]['value']));
    $this
      ->assertEqual(1, count($data['body'][0]));
    $this
      ->assertTrue(isset($data['body'][0]['value']));
    $this
      ->assertIdentical('en_US', \Drupal::state()
      ->get('lingotek.uploaded_locale'));
    
    $this
      ->assertLingotekCheckSourceStatusLink();
    
    $this
      ->assertLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('EN');
    $this
      ->assertText('The import for node Llamas are cool is complete.');
    
    $this
      ->assertLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertText("Locale 'es_MX' was added as a translation target for node Llamas are cool.");
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.added_target_locale'));
    
    $this
      ->assertLingotekCheckTargetStatusLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.checked_target_locale'));
    $this
      ->assertText('The es_MX translation for node Llamas are cool is ready for download.');
    
    $this
      ->assertLingotekDownloadTargetLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertText('The translation of node Llamas are cool into es_MX has been downloaded.');
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.downloaded_locale'));
    
    $this
      ->assertLingotekWorkbenchLink('es_MX', 'dummy-document-hash-id', 'ES');
    $profile = LingotekProfile::load('missing_profile');
    $profile
      ->delete();
    $this
      ->drupalGet('node/1/edit');
    $edit = [];
    $edit['title[0][value]'] = 'Cats are cool';
    $this
      ->saveAndPublishNodeForm($edit, NULL);
    
    $this
      ->assertText('Article Cats are cool has been updated.');
    
    $this
      ->assertNoText('Cats are cool was updated and sent to Lingotek successfully.');
  }
  
  public function testNodeMissingProfileTranslationUsingLinks() {
    $profile = LingotekProfile::load('missing_profile');
    $profile
      ->delete();
    
    $this
      ->drupalLogin($this->rootUser);
    
    $edit = [];
    $edit['title[0][value]'] = 'Llamas are cool';
    $edit['body[0][value]'] = 'Llamas are very cool';
    $this
      ->saveAndPublishNodeForm($edit);
    $this
      ->goToContentBulkManagementForm();
    
    $this
      ->assertLingotekUploadLink();
    
    $this
      ->assertNoLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('EN');
    $this
      ->assertText('Node Llamas are cool has been uploaded.');
    
    $data = json_decode(\Drupal::state()
      ->get('lingotek.uploaded_content', '[]'), TRUE);
    $this
      ->assertUploadedDataFieldCount($data, 2);
    $this
      ->assertTrue(isset($data['title'][0]['value']));
    $this
      ->assertEqual(1, count($data['body'][0]));
    $this
      ->assertTrue(isset($data['body'][0]['value']));
    $this
      ->assertIdentical('en_US', \Drupal::state()
      ->get('lingotek.uploaded_locale'));
    
    $this
      ->assertLingotekCheckSourceStatusLink();
    
    $this
      ->assertLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('EN');
    $this
      ->assertText('The import for node Llamas are cool is complete.');
    
    $this
      ->assertLingotekRequestTranslationLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertText("Locale 'es_MX' was added as a translation target for node Llamas are cool.");
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.added_target_locale'));
    
    $this
      ->assertLingotekCheckTargetStatusLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.checked_target_locale'));
    $this
      ->assertText('The es_MX translation for node Llamas are cool is ready for download.');
    
    $this
      ->assertLingotekDownloadTargetLink('es_MX');
    $this
      ->clickLink('ES');
    $this
      ->assertText('The translation of node Llamas are cool into es_MX has been downloaded.');
    $this
      ->assertIdentical('es_MX', \Drupal::state()
      ->get('lingotek.downloaded_locale'));
    
    $this
      ->assertLingotekWorkbenchLink('es_MX', 'dummy-document-hash-id', 'ES');
    $this
      ->drupalGet('node/1/edit');
    $edit = [];
    $edit['title[0][value]'] = 'Cats are cool';
    $this
      ->saveAndPublishNodeForm($edit, NULL);
    
    $this
      ->assertText('Article Cats are cool has been updated.');
    
    $this
      ->assertNoText('Cats are cool was updated and sent to Lingotek successfully.');
  }
}