You are here

public function InfiniteTest::testGenerate in Commerce Core 8.2

@covers ::generate @covers ::getInitialSequence @covers ::getCurrentSequence @covers ::getNextSequence @covers ::resetSequence

File

modules/number_pattern/tests/src/Kernel/Plugin/Commerce/NumberPattern/InfiniteTest.php, line 24

Class

InfiniteTest
Tests the infinite number pattern.

Namespace

Drupal\Tests\commerce_number_pattern\Kernel\Plugin\Commerce\NumberPattern

Code

public function testGenerate() {
  $entity = EntityTestWithStore::create([
    'store_id' => $this->store,
  ]);
  $entity
    ->save();
  $number_pattern = NumberPattern::create([
    'id' => 'test',
    'plugin' => 'infinite',
    'configuration' => [
      'padding' => 0,
      'pattern' => 'INV-[pattern:number]',
      'per_store_sequence' => TRUE,
      'initial_number' => 1000,
    ],
  ]);

  /** @var \Drupal\commerce_number_pattern\Plugin\Commerce\NumberPattern\SequentialNumberPatternInterface $number_pattern_plugin */
  $number_pattern_plugin = $number_pattern
    ->getPlugin();
  $initial_sequence = $number_pattern_plugin
    ->getInitialSequence($entity);
  $this
    ->assertEquals('1000', $initial_sequence
    ->getNumber());
  $this
    ->assertEquals(\Drupal::time()
    ->getRequestTime(), $initial_sequence
    ->getGeneratedTime());
  $this
    ->assertEquals($this->store
    ->id(), $initial_sequence
    ->getStoreId());
  $this
    ->assertNull($number_pattern_plugin
    ->getCurrentSequence($entity));
  $this
    ->assertEquals('INV-1000', $number_pattern_plugin
    ->generate($entity));
  $this
    ->assertEquals('INV-1001', $number_pattern_plugin
    ->generate($entity));
  $current_sequence = $number_pattern_plugin
    ->getCurrentSequence($entity);
  $this
    ->assertEquals('1001', $current_sequence
    ->getNumber());
  $this
    ->assertEquals(\Drupal::time()
    ->getRequestTime(), $current_sequence
    ->getGeneratedTime());
  $this
    ->assertEquals($this->store
    ->id(), $current_sequence
    ->getStoreId());

  // Confirm that the sequence can be reset.
  $number_pattern_plugin
    ->resetSequence();
  $this
    ->assertNull($number_pattern_plugin
    ->getCurrentSequence($entity));
  $this
    ->assertEquals('INV-1000', $number_pattern_plugin
    ->generate($entity));
  $this
    ->assertEquals('INV-1001', $number_pattern_plugin
    ->generate($entity));

  // Test the token replacement.
  $configuration = $number_pattern_plugin
    ->getConfiguration();
  $configuration['pattern'] = 'INV-[entity_test_with_store:store_id:target_id]-[pattern:number]';
  $number_pattern_plugin
    ->setConfiguration($configuration);
  $this
    ->assertEquals('INV-1-1002', $number_pattern_plugin
    ->generate($entity));

  // Confirm that each store gets its own sequence.
  $second_store = $this
    ->createStore('Second store', 'admin2@example.com', 'online', FALSE);
  $entity
    ->setStoreId($second_store
    ->id());
  $entity
    ->save();
  $this
    ->assertEquals('INV-2-1000', $number_pattern_plugin
    ->generate($entity));

  // Test the padding.
  $configuration = $number_pattern_plugin
    ->getConfiguration();
  $configuration['padding'] = 4;
  $configuration['initial_number'] = 1;
  $number_pattern_plugin
    ->setConfiguration($configuration);
  $number_pattern_plugin
    ->resetSequence();
  $this
    ->assertEquals('INV-2-0001', $number_pattern_plugin
    ->generate($entity));
}