You are here

public function InvoiceGeneratorTest::testMultilingual in Commerce Invoice 8.2

Tests generating invoices in multiple languages.

File

tests/src/Kernel/InvoiceGeneratorTest.php, line 178

Class

InvoiceGeneratorTest
Tests the invoice generator service.

Namespace

Drupal\Tests\commerce_invoice\Kernel

Code

public function testMultilingual() {
  $variation = ProductVariation::create([
    'type' => 'default',
    'title' => 'Version one',
    'price' => new Price('12.00', 'USD'),
  ]);
  $variation
    ->addTranslation('fr', [
    'title' => 'Version une',
  ]);
  $variation
    ->save();

  /** @var \Drupal\commerce_order\OrderItemStorageInterface $order_item_storage */
  $order_item_storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('commerce_order_item');
  $order_item = $order_item_storage
    ->createFromPurchasableEntity($variation);
  $order_item
    ->save();
  $order = Order::create([
    'type' => 'default',
    'store_id' => $this->store
      ->id(),
    'state' => 'draft',
    'mail' => $this->user
      ->getEmail(),
    'uid' => $this->user
      ->id(),
    'billing_profile' => $this->profile,
    'order_items' => [
      $order_item,
    ],
  ]);
  $order
    ->save();
  $invoice = $this->invoiceGenerator
    ->generate([
    $order,
  ], $this->store, $this->profile, [
    'uid' => $this->user
      ->id(),
  ]);
  $this
    ->assertNotNull($invoice);
  $this
    ->assertFalse($invoice
    ->hasTranslation('fr'));
  $invoice
    ->delete();
  $config = ContentLanguageSettings::loadByEntityTypeBundle('commerce_invoice', 'default');
  $config
    ->setDefaultLangcode('en');
  $config
    ->setThirdPartySetting('commerce_invoice', 'generate_translations', TRUE);
  $config
    ->setLanguageAlterable(FALSE);
  $config
    ->save();
  $invoice = $this->invoiceGenerator
    ->generate([
    $order,
  ], $this->store, $this->profile, [
    'uid' => $this->user
      ->id(),
  ]);
  $this
    ->assertEquals('Version one', $invoice
    ->getItems()[0]
    ->label());
  $this
    ->assertEquals('en', $invoice
    ->language()
    ->getId());
  $this
    ->assertNotEmpty($invoice
    ->getData('invoice_type'));
  $expected = [
    'paymentTerms' => 'Payment terms',
    'footerText' => 'Footer text',
  ];
  $this
    ->assertEquals($expected, $invoice
    ->getData('invoice_type'));
  $this
    ->assertTrue($invoice
    ->hasTranslation('fr'));
  $fr_translation = $invoice
    ->getTranslation('fr');
  $this
    ->assertEquals('fr', $fr_translation
    ->language()
    ->getId());
  $this
    ->assertNotEmpty($fr_translation
    ->getData('invoice_type'));
  $expected = [
    'paymentTerms' => 'Termes de paiement',
    'footerText' => 'Texte pied de page',
  ];
  $this
    ->assertEquals($expected, $fr_translation
    ->getData('invoice_type'));
  $fr_invoice_item = $fr_translation
    ->getItems()[0]
    ->getTranslation('fr');
  $this
    ->assertEquals('Version une', $fr_invoice_item
    ->label());
}