xero_sync-8.x-1.x-dev/modules/xero_sync_user_contact/tests/src/Kernel/AdvancedQueuingProcessingTest.php

modules/xero_sync_user_contact/tests/src/Kernel/AdvancedQueuingProcessingTest.php
<?php

namespace Drupal\Tests\xero_sync_user_contact\Kernel;

use Drupal\advancedqueue\Entity\Queue;
use Drupal\advancedqueue\Job;
use Drupal\xero\XeroNullClient;
use Drupal\xero_sync\Plugin\AdvancedQueue\JobType\JobBase;
use Drupal\Core\Logger\RfcLogLevel;

/**
 * Test processing queue items with AdvancedQueue.
 *
 * @requires module advancedqueue
 * @group xero_sync
 */
class AdvancedQueuingProcessingTest extends QueuingProcessingTest {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
    'serialization',
    'xero',
    'xero_sync',
    'xero_sync_user_contact',
    'advancedqueue',
    'views',
  ];

  /**
   * {@inheritDoc}
   */
  protected $jobClass = JobBase::class;

  /**
   * {@inheritDoc}
   */
  protected function setUp(): void {
    parent::setUp();
    // Disabling entity handler might not be needed here.
    $this->disableEntityHandler();
    $this->installSchema('advancedqueue', ['advancedqueue']);
    $data = [
      'id' => 'xero_sync_sync',
      'label' => 'Xero Sync sync',
      'backend' => 'database',
      'backend_configuration' => ['lease_time' => 60],
      'processor' => 'cron',
      'processing_time' => 60,
      'locked' => TRUE,
    ];
    $queue = Queue::create($data);
    $queue->save();
  }

  /**
   * Test the API rate limit being exceeded when finding.
   */
  public function testMinuteRateLimitExceededWhenFinding() {
    $this->logger->expects($this->at(0))
      ->method('log')
      ->with(
        RfcLogLevel::WARNING,
        $this->stringContains('Xero rate limit exceeded while processing xero_sync_sync queue, retry in 5 seconds')
      );
    $this->logger->expects($this->at(1))
      ->method('log')
      ->with(
        RfcLogLevel::INFO,
        $this->stringContains('Success in queue')
      );

    $this->xeroClient->expects($this->at(0))
      ->method('__call')
      ->with('get')
      ->willThrowException($this->getRequestException(429, '5'));

    // The job should be retried after a 5 second delay.
    $response = $this->getMockResponseFor("{$this->username} ({$this->uid})", $this->email, $this->uid);
    $this->xeroClient->expects($this->at(1))
      ->method('__call')
      ->with('get')
      ->willReturn($response);

    $this->expectEntityUpdates(1);
    $this->user->save();

    $this->enqueueJob();
    $this->runQueueJob();

    // Running the queue again immediately will have no effect, as the retry
    // delay will not have been satisifed on the stored queue job and the
    // processor will not pick it up.
    $this->runQueueJob();
    sleep(5);

    $this->runQueueJob();
    $this->assertItemReferencedInField($this->user, 'xero_contact', $this->xeroId);
  }

  /**
   * Test throwing an exception when creating.
   */
  public function testInvalidClientWhenCreating() {
    $this->logger->expects($this->once())
      ->method('log')
      ->with(
        RfcLogLevel::ERROR,
        $this->stringContains('Exception in queue')
      );
    $response = $this->getMockResponseForEmpty();
    $this->mockFindByEmail($response);
    $this->xeroClient = $this->createMock(XeroNullClient::class);
    $this->assertUserCreation(FALSE);
  }

  /**
   * {@inheritDoc}
   */
  protected function enqueueJob() {
    /** @var \Drupal\advancedqueue\Entity\QueueInterface $queue */
    $queue = Queue::load('xero_sync_sync');

    $jobCounts = $queue->getBackend()->countJobs();
    foreach ($jobCounts as $jobCount) {
      $this->assertEquals(0, $jobCount);
    }
    $queue->getBackend()->enqueueJob(Job::create('xero_sync_sync',
    [
      'entity_id' => $this->uid,
      'entity_type' => 'user',
    ]));
  }

  /**
   * {@inheritDoc}
   */
  protected function runQueueJob($repeat = 1) {
    // $repeat is ignored for AQ.
    /** @var \Drupal\advancedqueue\Entity\QueueInterface $queue */
    $queue = Queue::load('xero_sync_sync');
    /** @var \Drupal\advancedqueue\ProcessorInterface $queue_processor */
    $queue_processor = \Drupal::service('advancedqueue.processor');
    $queue_processor->processQueue($queue);
  }

  /**
   * Test the advanced queue report.
   *
   * Currently we don't use this, it would need a functional test.
   *
   * @param string $text1
   *   Text.
   * @param string $text2
   *   Text.
   */
  protected function assertAdvancedQueueReport($text1, $text2) {
    $this->drupalLogin($this->rootUser);
    $this->drupalGet('/admin/config/system/queues/jobs/xero_sync_sync');
    $this->assertSession()->responseContains($text1);
    $this->assertSession()->responseContains($text2);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc